では、次のステップとして
このプログラムを改造して、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)
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
#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);
}
// 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(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(G_LED, LOW);
digitalWrite(R_LED, HIGH);
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 件のコメント:
コメントを投稿