C++ 将Arduino与Qt连接
我正在将“R”字符从Qt发送到ArduinoC++ 将Arduino与Qt连接,c++,qt,arduino,qtserialport,C++,Qt,Arduino,Qtserialport,我正在将“R”字符从Qt发送到Arduino 等待R,让Arduino上的LED闪烁。但它不起作用 我想这可能是WaitFotbyteSwrited或ASCI的问题… 注意:任何信号都是好的;不需要是一个字符 我的Qt代码: QSerialPort serial; serial.setPortName("PORT_NAME"); serial.open(QIODevice::ReadWrite); serial.setBaudRate(QSeria
等待R,让Arduino上的LED闪烁。但它不起作用 我想这可能是WaitFotbyteSwrited或ASCI的问题…
注意:任何信号都是好的;不需要是一个字符 我的Qt代码:
QSerialPort serial;
serial.setPortName("PORT_NAME");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Ready..." << endl;
serial.write("R");
if(serial.flush())
{
qDebug() << "ok" << endl;
}
qDebug() <<"value sent!!! "<< endl;
serial.close();
}
Qt输出显示:
Manufacturer: "Arduino (www.arduino.cc)"
Busy: false
Ready...
ok
value sent!!!
任何帮助都将不胜感激
以下是完整的代码: Qt:
问题已经解决: Qt: 注意:别忘了在Arduino IDE中正确输入波特率
在监视器中,9600波特率那么接收器端到底发生了什么,您从读数中得到了什么?还有,你是如何等待阅读的?这不是完整的代码。嗯,Arduino led灯闪烁1秒(他处于第二种状态),但在第一种状态下从不闪烁。我正在等待读取,只是使用
if(serial.read())
条件。。。这是等待信号的好方法吗?我只想发出一个信号,特别是一个字符
Manufacturer: "Arduino (www.arduino.cc)"
Busy: false
Ready...
ok
value sent!!!
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QString>
QT_USE_NAMESPACE
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSerialPortInfo info("usbmodem621");
// Check info of the port
qDebug() << "Name : " << info.portName();
qDebug() << "Manufacturer: " << info.manufacturer(); //if showing manufacturer, means Qstring &name is good
qDebug() << "Busy: " << info.isBusy() << endl;
// Initialize Serial
QSerialPort serial;
serial.setPortName("usbmodem621");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Is open : " << serial.isOpen() << endl;
qDebug() << "Is writable : " << serial.isWritable() << endl;
QString string("R\n");
QByteArray ba("R\n");
serial.write(ba);
if (serial.bytesToWrite() > 0)
{
serial.flush();
if(serial.waitForBytesWritten(1000))
{
qDebug() << "data has been send" << endl;
}
}
if(serial.flush())
{
qDebug() << "ok" << endl;
}
qDebug() <<"value sent!!! "<< endl;
serial.close();
}
else
{
qDebug() << "An error occured" << endl;
}
return 0;
}
int led = 13;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
digitalWrite(led, HIGH);
delay(5000);
if(Serial.read() == 'R')
{
digitalWrite(led, LOW);
delay(1000);
}
}
else
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
}
if (serial.isOpen() && serial.isWritable())
{
QByteArray ba("R");
serial.write(ba);
serial.flush();
qDebug() << "data has been send" << endl;
serial.close();
}
int led = 13, avlb = 0;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
Serial.println("started");
}
void loop()
{
if (Serial.available() > 0)
{
Serial.println("available");
Serial.println(Serial.available());
delay(2000);
if(Serial.read())
{
Serial.println("read");
Serial.println(Serial.read());
delay(2000);
}
}
else
{
Serial.println("not available");
delay(1000);
}
}