2011-01-03 11 views
0

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秒のスリープ状態を追加しようとしましたが、うまくいきませんでした。

答えて

1

は、代わりにこの本をお試しください:

serial.write("INIT\r") 

writelinesは、おそらくリストを取る(しかし、私は今それをチェックすることはできません)。

+0

ありがとうございます。私が使用しているpySerialのバージョンにはwriteline()はありませんが、私はwrite()を使って同じものを取得しています。なんらかの理由で、うまくいきました。私はそれが行末の文字と関係があると推測しています... –

+0

Ok、私の応答を編集しました。私もそう思っていました。入力と同じように、明示的に行終端を記述する必要があります。 – Keith

+0

'serial.flush()'も正常に動作しませんか? – ismail

関連する問題