2016-07-26 49 views
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 .:总是最后的数字被随机截断。我认为这也是一个时间问题,但我找不到解决办法。

+0

readAll()只返回迄今为止收到的字节。在通常只有1或2个字节的快速PC上。增加波特率不是一个解决办法,你会得到更多的字节,但确切地说有多少永远不是保证。聪明的做法是发送一个'\ n',所以你可以在你的Qt代码中使用readLine()。现在它在Arduino中的工作方式与之相同,并且从不出错。 –

+0

我开始在Arduino代码中使用Qt代码中的'readLine()'和'Serial.println()',并且经历了相同的行为。我会仔细检查一下,如果我没有不小心漏掉任何东西。 – tobilocker

回答

0

只是为了防止任何人面临相同的问题:将波特率从9600更改为112500固定此。