1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
String a; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); digitalWrite(13, LOW); } void loop() { while(Serial.available()) { a = Serial.readString(); Serial.println(a); if(a == "on") { digitalWrite(13, HIGH); } if(a == "off") { digitalWrite(13, LOW); } } } |
D13にLEDをつなぎ、シリアル・モニターから「on」を送ると点灯、「off」を送ると消灯する。
送った文字列をシリアル・モニタに返す。
注意点
上のコードならシリアル・モニタの改行設定を「改行なし」にする。
「LFのみ」とするなら下のように「¥n」が必要で、
a == “off¥n”
「CRのみ」とするならように「¥r」が必要、
a == “off¥r”
同様に「CRおよびLF」とするなら「¥r¥n」が必要となる。
a == “off¥r¥n”
忘れてて、「あれ?全然ON、OFFしない。」と悩んだので覚書き。
実は、バッファから1文字ずつ読み込んで文字列に加えるというやり方の他人の書いたスケッチを眺めていたのだが、途中でSerial.readString();の存在を知ったので宗旨替えした。
1文字ずつの方は実はうまく機能してないが放置している。
送る側のPythonプログラムでもじたばたしたので別記事にした。
「「Arduinoのシリアル入力から文字列を受け取る。」のPC側Pythonプログラム」
追記
エンターを押してから反応するまでに時間がかかるなあと思っていたら、タイムアウトするまで待っているようだ。
なので、以下のようにSerial.readStringUntil(‘¥n’)を使う方がいい。
これなら¥n(LF)が送られるとすぐに処理してくれる。
この場合、送信側のシリアル・モニターでは改行を「LFのみ」にしておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
String a; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); digitalWrite(13, LOW); } void loop() { while(Serial.available()) { a = Serial.readStringUntil('\n'); Serial.println(a); if(a == "on") { digitalWrite(13, HIGH); } if(a == "off") { digitalWrite(13, LOW); } } } |
Arduino_IDE_1.8.8¥hardware¥arduino¥avr¥cores¥arduino¥Stream.cpp
参考
Serial.readString()
Serial.setTimeout()
Serial.readStringUntil()