2.2 サンプルBlinkを改造してみる

§2.1で、プログラムの構造を見てきました

では、次のステップとして
このプログラムを改造して、LEDの光らせ方を変えてみましょう

まず、はじめに点滅時間の変更です。
点滅時間を司っているのは、loopの中のdelay関数でした
そこで、
loopを以下のように変更してみましょう


digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(500);              
digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
delay(500);              

1000だったところを500にしたわけです。
変更したら、早速マイコンに書き込んで実行してみましょう


書き込み&実行は
[ファイル]→[マイコンボードに書き込む]
でしたね

点滅の速度が速くなったのがわかるでしょうか
光っている時間が500ms消えている時間が500msですので
1s間隔で点滅を繰り返すようになっているはずです。

次は、もう少し違う光らせ方をしてみましょう
このLaunchPadには赤色LEDの他に緑色LEDも実装されています
こちらを光らせてみたいと思います

変更するのは

#define LED RED_LED

の部分です。RED_LEDだった部分をGREEN_LEDに変更し

#define LED GREEN_LED

とします。
書き込んで実行すると、今度は赤色ではなく緑色のLEDが点滅しているのが確認できるでしょうか

ここまで、確認できたら
次は、赤と緑を同時に扱ってみたいと思います。
同時に扱うために、以下のようにプログラムを書き換えてみてください。
修正する部分が複数あるので、よく確認して修正してください。

#define R_LED P1_0
#define G_LED P1_6

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(R_LED, OUTPUT);     
  pinMode(G_LED, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(R_LED, HIGH);
  digitalWrite(G_LED, LOW); 
  delay(500);                
  digitalWrite(R_LED, LOW);   
  digitalWrite(G_LED, HIGH);   
  delay(500);               
}

書き込んで実行すると、
今度は
赤色:点灯 緑色:消灯 (500ms)
赤色:消灯 緑色:点灯 (500ms)
とLEDが点滅しているのが確認できるでしょうか

 図2-5 LED点滅の様子

順番に、このプログラムをおさらいしてみます。

#define R_LED P1_0
#define G_LED P1_6

では、
R_LEDをP1_0に
G_LEDをP1_6に読み替えるよう定義しています。
赤色LEDはP1.0につながっていて緑色LED(LED2)はP1.6につながっているので
このように定義するわけです。
P1.6にLED2がつながっていることはLaunchPadのシルク印刷(基板上の白い文字)で確認できます。

図2-6 LED2のシルク印刷

setupでは、

void setup() {                
  // initialize the digital pin as an output.
  pinMode(R_LED, OUTPUT);     
  pinMode(G_LED, OUTPUT);     
}

と記述して、R_LEDとG_LEDをともにOUTPUTに設定しています

そして、メインのloopでは

void loop() {
  digitalWrite(R_LED, HIGH);
  digitalWrite(G_LED, LOW); 
  delay(500);                
  digitalWrite(R_LED, LOW);   
  digitalWrite(G_LED, HIGH);   
  delay(500);               
}

としています。
digitalWrite関数は、人間の目ではわからないほど一瞬で処理が終わるので、

  digitalWrite(R_LED, HIGH);
  digitalWrite(G_LED, LOW); 

と書いても

  digitalWrite(G_LED, LOW);
  digitalWrite(R_LED, HIGH); 

と書いても、見かけの処理は同じになります。

大事なのはloop()内の
最初の2行で
R_LEDを点灯、G_LEDを消灯という状態にしているということです
この状態を3行目のdelay(500)で500[ms]保持しています

そして4,5行目で
R_LEDを消灯、G_LEDを点灯という状態にし
この状態を6行目のdelay(500)で500[ms]保持しています

これを、永遠に繰り返すので
交互に点灯しているような光らせ方にできました。

次回は、それぞれのLEDの点滅時間を変えるプログラムに挑戦したいと思います。

0 件のコメント:

コメントを投稿