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