PASのブログ

PASの中の人が書く雑記ブログです。

アナマル.9 カウントアップとデバッグ

配信ライブが多いですね。 色んなジャンルを聞きますが、僕はサンボマスターに元気づけられます。 これを書いてる今も号泣しながら書いてます(笑)

前回辺りからだんだんとややこしくなってきたのですが、理解が深まると楽しくなっきます。頑張りましょう^^

さて、前回のコードの説明の続きです。

カウントアップ

前回未解説だったコードがこちら。

void loop() {
  
  a = count % 4;
  sw(a);
  count = count + 1;
  Serial.println(a,DEC);
  
}

countという変数を作りました。 こちらは、count = count + 1;でloop一周に一回数字が増えるようにしています。
カウントアップの書き方は例えば、count = ++count ;というのもあります。後者のほうがArduino公式のようですので次回からそう書きますね。

今回はループで1回カウントアップさせていますが、タイマーを使って定期的に(時間を正確に)カウントアップする事なども可能です。

4回に1回関数を呼び出す。

a = count % 4;は、4で割って余りを出す、という演算子%を使っています。
今回、sw[0]-sw[3]まで、4つの配列というかスイッチを使っていますので、4回に1回、sw()を呼び出したいわけです。
こちらにも他に書き方があります。
例えば、a = count & 3;です。
こちらはビット演算という方法を使っています。ビット演算はかなり使う場面がありますので、プログラマブル編にて解説します。

ともあれ、これで4chの、「4つのスイッチを使い、4つの対応したLEDをオルタネート動作させる」というスケッチが完成しました。

シリアルモニタを使ったデバッグ

現代の一般的なマイコンIDE(統合開発環境)では、デバッグということが出来ます。
デバッグとは、プログラム上のミスを取り除き、期待した動作をさせる原因を探ることです。
f:id:pas_fx:20200608090715p:plain コンパイル(検証)がうまく行けば、コード上のミスはなくなりますが、かと言って予想した動作をするとは限りません。
そういう時は、変数が想定したとおりに書き換えられているか見られればいいですね。

Arduinoでは、シリアルモニタという、ArduinoからArduinoIDEにデータを送る仕組みがあります。

以下公式の抜粋
他のコンピュータやデバイスと通信するために、どのボードにも最低1つのシリアルポートが用意されています。ピン0と1がシリアルポートのピンで、この2ピンを通信に使用する場合、デジタル入出力として使うことはできません。

ArduinoIDEはシリアルモニタを備えていて、Arduinoとコミュニケーションすることができます。

Serial.begin(speed)
Serial.end()
Serial.available()
Serial.read()
Serial.peek()
Serial.flush()
Serial.print(data, format)
Serial.println(data, format)
Serial.write(val)

今回のスケッチで使っているのは、

Serial.begin(9600);

と、

  a = count % 4;
  sw(a);
  count = ++count;
  Serial.println(a,DEC);

の部分です。 スケッチをArduinoに書き込んだら、 f:id:pas_fx:20200608092035p:plain シリアルモニタを表示すると、 f:id:pas_fx:20200608092122p:plain このように、エンドレスで0,1,2,3が繰り返されていますので、期待通りに動作していることがわかります。

他にどんな事ができるの?

現在は、1つのスイッチが1つのLEDに対応していますが、例えば

sw[0] 0123
sw[1] 23

のように、任意の複数のLEDを点灯させることも可能ですし、プログラマブルにすることも可能です。 現在、

 if(state[num] == 1)
  {
   digitalWrite(LED[num], HIGH);   // LEDへの信号をHIGH(点灯)
  }
  else
  {
  digitalWrite(LED[num], LOW);    // LEDへの信号をLOW(消灯)
  }

と書いている部分を、関数にして、場合分けをしてあげるのです。

要望を聞きつつ対応して更新しようと思っていますので、コメントなど、よろしくお願い致します。