2016-07-26 87 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固定此。