pySerialを使用してArduino Unoボードのシリアルポートに短いメッセージを書き込むPythonスクリプトがあります。そこループがあると、いくつかの条件に応じて、複数の書き込みは、ループ内でこのような何かが起こることができます。pySerialはArduinoに書き込みます。Unoはバッファされます。
while True:
#Conditions block 1
if <CONDITION1>:
serial.writelines("INIT")
elif <CONDITION2>:
serial.writelines("NEW")
...
#Conditions block 2
if <CONDITION1>:
# Fetch something from the Internet
serial.writelines("CHECK")
elif <CONDITION2>:
# Fetch something from the Internet
serial.writelines("STOP")
...
をしかし、私のArduinoボードがこれを受信したとき、それはINITとして最初のメッセージを受信したが、2番目の1がありますINITSTOPまたはINITCHECKとして読み取られ、3番目のメッセージは前のメッセージに連結されます。私のarduinoプログラムは、このようにして特定のメッセージをチェックします:
if(msg.equals("CHECK")) {
// Do something
}
else if(msg.equals("INIT")) {
// Do Something else
}
誰もが私にこれを案内できますか?ところで、私はIDEで利用可能なシリアルモニタでテストするとき、問題がArduinoにあるとは思えません。
私はすべての書き込みの前に最大10秒のスリープ状態を追加しようとしましたが、うまくいきませんでした。
ありがとうございます。私が使用しているpySerialのバージョンにはwriteline()はありませんが、私はwrite()を使って同じものを取得しています。なんらかの理由で、うまくいきました。私はそれが行末の文字と関係があると推測しています... –
Ok、私の応答を編集しました。私もそう思っていました。入力と同じように、明示的に行終端を記述する必要があります。 – Keith
'serial.flush()'も正常に動作しませんか? – ismail