2016-07-26 8 views
0

Arduino Mega 2560からQtアプリケーションに単純な整数値を書き込もうとしています。 Baudrateは9600に設定されており、serial->write(some_data);のQtアプリケーションで開いているポートからデータを送信すると、Serial.read()が正常に動作します。Serial.print()は、QSerialPortで読み取るときにデータを切り捨てます。

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:常に最後の数字はランダムに切り捨てられます。私はこれもタイミングの問題だと思っていますが、私はこれに対する修正を見つけることができませんでした。

+0

readAll()はこれまでに受信したバイトを返します。通常は1〜2バイトの高速PCで実行されます。ボーレートを上げることは修正ではありません。バイトを増やすことはできますが、どれくらい多くが保証されることはありません。これを行うスマートな方法は、あなたのQtコードでreadLine()を使うことができるように '\ n'を送ることです。今はArduinoでのやり方と同じように動作し、間違ったことはありません。 –

+0

Qtコードでは 'readLine()'、Arduinoコードでは 'Serial.println()'を使い始めました。私は何かを間違って逃していないかどうかを再確認します。 – tobilocker

答えて

0

同じ問題に直面している人の場合:ボーレートを9600から112500に変更するとこれが修正されました。

関連する問題