3.4 LEDの点滅 (delayの問題点)

ここまでのプログラムでLEDを点滅させてきました

この手法を使えば思い通りのタイミングで、点滅をさせることができます。

たとえば、赤色LEDを100[ms]で緑色LEDを1[s]の周期で点滅させたいなら
§3.3のプログラムリストを元にして記述するなら

void loop() {
 if(count%2==0)  digitalWrite(R_LED, HIGH);
 else            digitalWrite(R_LED, LOW);


 if(count%20==0)     digitalWrite(G_LED, HIGH);
 else if(count%10==0) digitalWrite(G_LED, LOW);


 count++;


 delay(50);                


}

とすればいいわけです

これで、ただ周期的にLEDを光らせるだけとか
周期的に何らかの動作をさせるだけというプログラムを作成するなら
これで良いのですが

マイコンを使ってアプリケーションを作ると言うことは
何らかの自動化したい機械などがあって
その機械をコントロールしたい場合にマイコンを使うということが一般的です

つまり、外部から物理的なアクションがあり
それに対して、何らかのリアクションを行わせたい場合を考えなくてはいけません

・ボタンを押されたら、動作を変える
・センサから入力があった時点からタイミングをとる

などという動作です。

では、こういう動作を行わせる場合
何が問題になるのでしょうか?

それは、delay()関数です。
以前も記述したとおり、delay()は
ただ、じっと状態を保持するだけの命令です。

なので、delayで待っている間はマイコンは何もできません

ボタンが押されたことも
センサが反応したことも
何一つ感知できないのです

そこで、次のステップではdelayを使わずに
一定時間毎にLEDが点滅するようなプログラムについて考えていきたいと思います。

0 件のコメント:

コメントを投稿