下記のようにSerialをセットアップして、もし何かを受信した場合メッセージを返答するプログラムを作成しようとしたとき。
シリアルモニタ接続時にsetupのSerial.plintlnの前にloopのSerial.available()内のSerial.plintlnが途中まで紛れ込んでしまいます。
tes?が入力されて100ms秒後にSerial OKが書かれてました。
シリアルモニタ接続後にリセットを掛けた場合、この現象が起きないのは確認したのですが、リセットを行わずに接続時にSerial.available()を反応させないためにはどのような対処をすればよいでしょうか?
Arduino
1 2void setup() { 3 Serial.begin(115200); 4 Serial.setTimeout(10); 5 delay(100); 6 Serial.println("Serial OK"); 7} 8 9 10void loop() { 11 if (Serial.available() > 0) { 12 Serial.println("testmess"); 13 } 14} 15 16 17###########結果############### 1810:37:56.717 -> tes⸮Serial OK 19
また、下記のようにloop内にdelayを挟んだところ、正常な応答が得られましたので、
・接続時に何かしらデータが入り、if (Serial.available() > 0)を実行する
・Serial.println("testmess");送信中にsetupが割り込み、送信が中断される
・中断されて改行が入っていないのでその続きでSerial.println("Serial OK");が書かれる
の流れだと思うのですが、Delayでは安定性に不安が残りますし、なにより初回接続時以外は完全に無駄です。何かほかに対処法はないでしょうか?
Arduino
1 2 3void setup() { 4 Serial.begin(115200); 5 Serial.setTimeout(10); 6 delay(100); 7 Serial.println("Serial OK"); 8 9} 10 11 12 13void loop() { 14 if (Serial.available() > 0) { 15 delay(1); 16 Serial.println("testmess"); 17 } 18}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/20 05:34
2021/10/20 06:16