3.3 LEDの点滅 その2 "if-else文を使う"

次は、loop()の中身を以下のようにしてみます

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


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


 count++;


 delay(500);                
}

これでも、同様に動作します。

今度はloop内の1行目と2行目がif … else … という記述になっています。

ここで出てきた if … else … 文は if よりももう少し複雑に条件分岐を行うための命令です。

if(条件1) 命令1;
else     命令2;

のように記述すると、条件1が成り立っていれば命令1を、成り立っていなければ命令2を実行することになります。

count%2の答えは0と1以外ありませんよね
ということで、1行目ではcount%2が0の時に digitalWrite(R_LED, HIGH) を実行するようにし
2行目ではcount%2が0でないとき、つまり1の時に digitalWrite(R_LED, LOW) を実行するようにしています。
これで、赤色LEDの点滅を作ります。

続いて4行目と5行目ですが

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


となっています。
今度はelseの後ろにifがきています。
この

if(条件1) 命令1;
else if(条件2) 命令2;

という形式の場合は
条件1が成り立っていれば命令1を、
成り立っていなければ条件2を判定して成り立っていれば命令2を実行します
条件2も成り立っていなければ何もしません。

今回は、最初の条件でcountを10で割った余りが0なら緑色LEDを点灯します。
そして、10で割った余りが0でないときは、5で割った余りが0かどうかを判定し0なら緑色LEDを消灯します。

countは、0→1→2→3→4→5→6→7→8→9→10→11→12→…と増えていきますので

4行目と5行目の条件文では

0,10,20,30,40…の時に点灯
5,15,25,35,45…の時に消灯

と言うことになります。

ちなみに、countは0.5秒ごとにどんどん増えていきますが
int型は-32768~32767までの値をとることができるので
32767 / 2 = 16383.5秒後までは正常に動作することになります。

つまり、約4.5時間は問題なく動作し続けるわけです。
約4.5時間以上実行し続けるプログラムの場合は、§3.2の時と同じようにdelayの前に

 if(count==10) count=0;

と記述することで、解決できます。

0 件のコメント:

コメントを投稿