3つのLEDをあやつる
さてつぎは複数のLEDを操作しましょう。信号機なんかは三色ですね。複数の色があればメッセージを色で伝えたり出来ますね。暑いときは赤、寒いときは青とか。通常は青、警戒のシグナルは赤とか。
必要なもの
| パーツ | 数量 |
|---|---|
| Arduino UNO | 1 |
| ブレッドボードミニ | 1 |
| LED | 1 |
| 高照度LED | 2 |
| 抵抗220Ω | 1 |
| 抵抗120Ω(高照度LEDにはこちらを接続) | 2 |
| ジャンパーケーブル | 7 |
回路チェック
接続が出来たらこのプログラムを書き込んでみてください。順番に光りましたか?光らなければ回路をチェックしてください。LEDが3つだからまだいいですけど、数が増えてくると大変ですね。
int LED2=3;
int LED3=5;
int LED4=6;
void setup() {
// put your setup code here, to run once:
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
}
void loop() {
digitalWrite(LED2,HIGH);
delay(500);
digitalWrite(LED2,LOW);
delay(100);
digitalWrite(LED3,HIGH);
delay(500);
digitalWrite(LED3,LOW);
delay(100);
digitalWrite(LED4,HIGH);
delay(500);
digitalWrite(LED4,LOW);
delay(100);
}
配列
先ほどのプログラムはこのように書き換えることができます。一行目でint LED[3]={3,5,6};と宣言しています。LEDという配列には3つデータが入り、その中には2,3,4という値を割り当てます。ということですね。
このときに注意しなくてはならないのは、配列は0番から始まるということです。データを取り出すときにLED[0]はD3、LED[1]はD5、LED[2]はD6を表しているのです。4,5行目で2,3,4を出力モードにセットして、10から14行目で順番に点滅させているのです。
int LED[3]={3,5,6};//ArduinoのD3,D5,D6にLED接続
void setup() {
// put your setup code here, to run once:
for(int i=0;i<=2;i++){
pinMode(LED[i],OUTPUT);
}
}
void loop() {
for(int i=0;i<=2;i++){
digitalWrite(LED[i],HIGH);
delay(500);
digitalWrite(LED[i],LOW);
delay(100);
}
}
配列の書き方
LED[3]={3,5,6};というのが基本です。[]内の数字で配列の数。3つあるので、[3]という表記になります。LED[]={3,5,6};というように省略も可能です。
forの中での配列
もう少し詳しく見てみましょう。4,5行目を見てください。この中のfor{}の中でi=0にして、iは1づつ増えていき2まで増加していきます。3になると、条件式iは2を越えてしまうので、for文を抜けて、次の処理すなわちvoid loop{}に向かいます。
最初変数iは0ですからLED[]配列の0番目の値2です。なのでpinMode(2,OUTPUT);となります。次にiは1ですね。LED[]配列の1番目の値3です。なのでpinMode(3,OUTPUT);です。変数iが2になると、LED[]配列の2番目の値4です。なのでpinMode(4,OUTPUT);を実行しているのと同じことになります。
乱数を使ってランダムに光らせる
順番に光らせるのもいいですが、ランダムに光らせるのもいいですね。
int LED[3]={3,5,6}; //ArduinoのD3,D5,D6にLED接続
int number=0;//numberという変数を作成
void setup() {
for(int i=0;i<=2;i++){
pinMode(LED[i],OUTPUT);
}
}
void loop() {
number=random(3);//変数numberに乱数(0から2の間の整数)をセット
digitalWrite(LED[number],HIGH);
delay(200);
digitalWrite(LED[number],LOW);
delay(50);
}
random(min,max)
乱数を発生させるにはrandom(最小値,上限)という関数を使います。最小値は省略可能です。注意点は上限-1までの乱数が生成されるところでしょう。random(3)だと0から2の間の乱数が生成されます。



