3つのLEDをあやつる(配列と乱数)LED#05

Arduino

3つのLEDをあやつる

さてつぎは複数のLEDを操作しましょう。信号機なんかは三色ですね。複数の色があればメッセージを色で伝えたり出来ますね。暑いときは赤、寒いときは青とか。通常は青、警戒のシグナルは赤とか。

必要なもの

パーツ 数量
Arduino UNO 1
ブレッドボードミニ 1
LED 1
高照度LED 2
抵抗220Ω 1
抵抗120Ω(高照度LEDにはこちらを接続) 2
ジャンパーケーブル 7
image

回路チェック

接続が出来たらこのプログラムを書き込んでみてください。順番に光りましたか?光らなければ回路をチェックしてください。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の間の乱数が生成されます。

タイトルとURLをコピーしました