0
我正在尝试从Arduino Mega 2560向Qt应用程序写入一个简单的整数值。波特率设置为9600,当我通过Qt应用程序的serial->write(some_data);
开放端口发送数据时,Serial.read()
工作正常。当使用QSerialPort读取数据时,Serial.print()会截断数据
digitalWrite(SS, LOW);
if (Serial.available() == 2) {
response1 = SPI.transfer(Serial.read());
response2 = SPI.transfer(Serial.read());
}
digitalWrite(SS, HIGH);
上面的代码工作正常。我之前读过另一篇文章,不得不添加delay(3)
来完成这项工作。现在我想发回回应
Serial.print((response2 << 8) | (response1 & 0xFF));
但总是有截短的数字。我从逻辑分析器得知响应是8193
所以用QByteArray b = serial->readAll();
我得到的结果如8
,81
,819
,有时候是8193
。 I.e .:总是最后的数字被随机截断。我认为这也是一个时间问题,但我找不到解决办法。
readAll()只返回迄今为止收到的字节。在通常只有1或2个字节的快速PC上。增加波特率不是一个解决办法,你会得到更多的字节,但确切地说有多少永远不是保证。聪明的做法是发送一个'\ n',所以你可以在你的Qt代码中使用readLine()。现在它在Arduino中的工作方式与之相同,并且从不出错。 –
我开始在Arduino代码中使用Qt代码中的'readLine()'和'Serial.println()',并且经历了相同的行为。我会仔细检查一下,如果我没有不小心漏掉任何东西。 – tobilocker