私はUbuntu 10.04を実行しているBeagleBoneとArduinoの間でシリアル経由で通信しようとしています。これまでのところ、文字列を送信することはできますが、改行文字の認識に問題があります。 、のpython3とPySerialを使用して、私は(ちょうど関連ビットのために編集)しているBB側からシリアル通信PythonとArduino - キャリッジリターンを認識できない
:アルドゥイーノ側で
import serial
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.write(chr(13).encode('ascii')) # establishes serial connection
# which will reset Arduino
delay(3000) # give time for reset. This method is from my own library
mesg = 'Beagle\n'
ser.write(mesg.encode('ascii'))
私が持っている:
boolean newMsg = false;
String incomingMsg = "";
void setup()
{
/* some stuff - not relevant */
Serial.begin(9600);
}
void loop()
{
if(newMsg) {
lcd.print(incomingMsg);
newMsg = false;
}
}
void serialEvent()
{
incomingMsg = "";
while (Serial.available() > 0) {
char inByte = Serial.read();
if (inByte == '\n') {
newMsg = true;
} else {
incomingMsg = incomingMsg + inByte;
}
}
}
問題ですif (inByte == '\n')
が本当に真であると検証されないため、newMsgはtrueに設定されません。私は両方の側で '\ r'とタイプ可能な文字( '#')でしようとしましたが、このテストは決してうまくいきません。文字列「ビーグル」はそれをうまく通り抜けます。だから、incomingMsg
は大丈夫です。
奇妙なことに、私はこれをArduinoとProcessing(Bluetooth経由でノートパソコンの処理に接続するロボットのArduino)との間で動作させています。なぜ私はここで働いていないのか分かりません。何かご意見は?
UPDATE:私は部分的な回答がありますが、現在はうまくいくでしょうが、何が壊れているかを知りたいのですが。
if (inByte == '\n')
が真であると検証されています。しかし、なんらかの理由でグローバルブール変数newMsg
にtrueを代入しても機能しません。 serialEvent()での代入にもかかわらず、その値はloop()内では断然偽のままです。しかし、それはグローバル変数です(ほとんどのプログラマーの嫌悪にもかかわらず、Arduinoでかなり使用されています)。私はloop()のテストを次のように置き換えました:
if (messageReceived != "")
これで動作します。しかし、私はまだそのブールの問題が存在する理由を知りたいです。
LCDに各文字を表示しようとしましたが、あなたはあなたが得るべきだと思っていますか? – Craig
うん、それを試してみました。そしてyes - カーソルが1行下がったので、改行は間違いなく到着しました:...( –