我正在使用 Qt 编写一个从串行线路读取数据的 C++ 程序。数据的“生产者”是一块 Arduino UNO 板。
Arduino 代码非常简单。目前,它只是生成一个随机数并通过串行线路发送。这是代码:
long randNumber;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop() {
randNumber = random(300);
Serial.write(randNumber);
delay(10);
}
我已经使用 Arduino 的“串行监视器”来验证数据是否通过串行线路。
在 Qt 方面,我有一个工作线程,它应该读取串行数据并相应地更新 UI 上的绘图。工作线程肯定正在运行,并且此代码正在执行(我已经检查过)。我的“端口列表”中只有一个设备显示,它是 Arduino,所以目前我直接连接到它。这是代码:
void doWork ()
{
QList<QSerialPortInfo> port_list = QSerialPortInfo::availablePorts();
QSerialPort serialPort;
serialPort.setPort(port_list[0]);
serialPort.setBaudRate(QSerialPort::Baud9600);
if (!serialPort.open(QIODevice::ReadWrite))
{
cout << QObject::tr("Failed to open port COM3, error: %1").arg(serialPort.errorString()).toStdString() << endl;
}
while(!abort_thread)
{
int bytes_available = serialPort.bytesAvailable();
if (bytes_available >= 4)
{
QByteArray byte_array = serialPort.read(4);
int data = byte_array.toInt();
emit signalDataReady(data);
}
}
serialPort.close();
}
不幸的是,从来没有任何可用的字节。它成功打开串行端口,但没有字节通过。我在这里做错了什么?有任何想法吗?谢谢!