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の間の乱数が生成されます。