1//入力された文字を入れる変数2String dat ="";3voidloop(){4//文字列を読み込む5if(Serial.available()){6 char c =Serial.read();7if( c =='='){// 終了文字を受信した場合8//dat.toLowerCase();//必要に応じて。全部小文字に変換9Serial.println(dat);10//出力11//読み込んだ文字が「on01」のときシリアルモニタに「ON」を送り、LEDを点灯させる12if(dat =="on01"){13digitalWrite(LED_PIN,HIGH);14//LEDを点灯させた後okを返信15Serial.println("ok");16}else17//読み込んだ文字が「off01」のときシリアルモニタに「OFF」を送り、LEDを消灯する18if(dat =="off01"){19digitalWrite(LED_PIN,LOW);20//LEDを消灯させた後okを返信21Serial.println("ok");22}else23//入力確認24//読み込んだ文字が「in01」のとき25if(dat =="in01"){26//DIN_PINの状態をon/offで返信27int value;28 value =digitalRead( DIN_PIN );29if( value ==HIGH){//HIGHがOFF,LOWがON30Serial.println("off");31}else{32Serial.println("on");33}34}else{35Serial.println("Command ERROR.");36}37 dat ="";38}else{39if(dat.length()<5){//これ以下でないとコマンドに絶対に一致しないのでデータを保存する意味がない。40 dat += c;41//dat.trim();//必要に応じて。前後のホワイトスペース文字を除く42}43}44}45}
> Serial.flush();はこれまで受信した文字を捨ててしまうのでこれを実行してはダメです。この行はコメントアウトしときましょう
について、あれ?と思ったのですが、指摘事項は、Arduino1.0より前の過去の仕様のようです。(機能仕様バグ?)今は、データ送信完了するまで待つそうです。
Serial.flush
https://www.arduino.cc/reference/tr/language/functions/communication/serial/flush/
Waits for the transmission of outgoing serial data to complete.
(Prior to Arduino 1.0, this instead removed any buffered incoming serial data.)