見出し画像

シリアルモニタに何も表示されない原因を解説【Arduino IDE】

Arduino IDEとArduinoでシリアル通信をした際に、シリアルモニタに何も表示されないといった問題が起きることがあります。

プログラムはコンパイルできているのに...
表示されない理由がわからない...

という方も多いと思います。

そこで今回は、シリアルモニタにデータが表示されない時の対処法について解説します。

あくまで筆者が体験したケースの対処をメモしたものなので、気軽に読んでいただければと思います。


表示されない原因

結論から言うと、プログラムは正常に動いているがArduino側の通信が早すぎてタイミングが合わず、パソコン(またはArduino IDE)が通信内容を受け取れなかった可能性があります。

次で具体的に説明します。

再現実験と考察

例えば、👆のようなプログラム(後述)を実行させます。シリアル通信で文字を通知するだけのプログラムです。変数を使って、シリアル通信による通知は各1度だけ実行するようにしています。

実行してみてもシリアルモニターには何も表示されず、まっさらな状態です。

次に👆のようにプログラムの冒頭にdelay(1000);を入れて、わざと1秒待たせてみます。

すると、シリアルモニターにはすべての通知が表示されました。

つまり、「パソコンかArduino IDEが通信内容を拾う前に、通り過ぎてしまっている」ということなのかな・・・と思っています。

センサーからの値を複数回表示するような場合では問題になりませんが、1度しか表示しない場合には大きな問題になるでしょう。

テストプログラム

👆で使ったプログラムです。シリアルモニターに表示されない時に検証用で使ってください。なお、注意事項をよく読んだ上でご使用ください。

//当Webサイトに掲載された内容によって生じた損害等の一切の責任を負いません。
//当webサイトの免責事項に同意いただける場合に限り、プログラムをご利用いただけます。

int flag=0; //1度だけ実行するための変数

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(1000); //待機させる(自由に設定)

  if(flag==0){
    Serial.println("1番目の通知です");
    Serial.println("2番目の通知です");
    Serial.println("3番目の通知です");
    Serial.println("4番目の通知です");
    Serial.println("5番目の通知です");
    Serial.println("6番目の通知です");
    Serial.println("7番目の通知です");
    Serial.println("8番目の通知です");
    Serial.println("9番目の通知です");
    Serial.println("10番目の通知です");
    flag=1; //処理終了
  }
}

結論

応急策としては、プログラム冒頭にdelay();を入れることです。

これにより意図的にプログラムの開始を遅らせ、パソコン(またはArduino IDE)が通信を拾えるようにします。

待機秒数はいろいろと試してみてください。環境によって変わるかもしれません。

もしこの記事がお役に立てたら、"スキ"を押していただけると励みになります!

最後まで読んでいただき、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?