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:常に最後の数字はランダムに切り捨てられます。私はこれもタイミングの問題だと思っていますが、私はこれに対する修正を見つけることができませんでした。
readAll()はこれまでに受信したバイトを返します。通常は1〜2バイトの高速PCで実行されます。ボーレートを上げることは修正ではありません。バイトを増やすことはできますが、どれくらい多くが保証されることはありません。これを行うスマートな方法は、あなたのQtコードでreadLine()を使うことができるように '\ n'を送ることです。今はArduinoでのやり方と同じように動作し、間違ったことはありません。 –
Qtコードでは 'readLine()'、Arduinoコードでは 'Serial.println()'を使い始めました。私は何かを間違って逃していないかどうかを再確認します。 – tobilocker