Arduino Unoと標準IDEを使用してシリアルメッセージを送信しようとしています。デバイスに送信されたシリアルメッセージの解析に問題があります。Serial.read()はシリアル入力をスキップします
この行を含めると、Serial.println("Serial.available() = " + String(Serial.available()));
メッセージの残りの部分を読むことができます。これがコメントアウトされている場合は、メッセージの最初の文字が表示され、残りの部分はスキップされます。追加されたコード行の有無にかかわらず、私が見ている出力の添付画像。
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
while (!Serial) {} // wait for serial to be initialized
Serial.println("Setup called. Serial port ready.");
Serial.println("Waiting for time sync message...");
while (!Serial.available()) {}
processSyncMessage();
}
void processSyncMessage() {
// parse first letter of message
char messageHeader = (char) Serial.read();
switch (messageHeader) {
case TIME_HEADER:
// do processing
break;
default:
Serial.println("Unknown message sent with header: " + String(messageHeader));
// must include this line in order to see the entire message sent
// just calling a println or a Serial.available() doesn't work ????
Serial.println("Serial.available() = " + String(Serial.available()));
Serial.println("---start of message");
for (int r = 0; r != -1; r = Serial.read()) {
Serial.print((char) r);
}
Serial.println();
Serial.println("---end of message");
break;
}
}
バッファにこの何とか関係していますか?どういうわけかfflush(SOME_SECRET_BUFFER)
でそれをフラッシュできますか?
ArduinoはC、削除タグではありません。これは 'Serial.println(" Serial.available()= "+ String(Serial.available()));' –
によって実証されています。 loop()関数を定義し、setup()のコードの最後の3行を連続して動かす必要があります。 –