中華で始める Arduino入門日記7 LEDをクリスマスツリーっぽく光らせる
のすけです。
中華で始めるシリーズも今回で7回目ですね。
この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。
入手の話はこちらから。
中華で始める Arduino入門日記1 はじめに「中華機を購入してみる」 - hollywis's diary (はりうすブログ)
本題
前回はロウソクのようにLEDを付けました。
中華で始める Arduino入門日記6 LEDをロウソクのように瞬かせる - hollywis's diary (はりうすブログ)
今回は、たくさんの色々なLEDをくっ付けてプログラムで制御します。
チュートリアルのチャプター5 Advertising LEDになります。
Arduinoをはじめよう 互換キット UNO R3対応互換ボード 初心者専用実験キット 基本部品セット20 in 1
回路図

*出展:SainSmartチュートリアル
よく見えませんが、ArduinoのDigitalピン0~5にそれぞれLEDを付けろという
ものになります。
配線例がこちら

*出展:SainSmartチュートリアル
なんか、複雑ですねぇ。。。
ブレッドボードで作ってみる

配線例が無駄に複雑っぽかったので、簡略化しました。
材料はこちら
-
LED 6個(赤、黄、緑)
-
抵抗220Ω 6個
-
ジャンパーコード 7本
配線は次のように繋げます。
-
ピン0 – 220Ω – LED(緑) – GND
-
ピン1 – 220Ω – LED(黄) – GND
-
ピン2 – 220Ω – LED(赤) – GND
-
ピン3- 220Ω – LED(赤) – GND
-
ピン4 – 220Ω – LED(黄) – GND
-
ピン5 – 220Ω – LED(緑) – GND

つなげてみました。
お気づきかもしれませんが、なぜか右2つのピン0,ピン1に接続している
LEDが付いてます。
特にHIGHに設定していないのですが。。。よく分かりません。
プログラム
int Led1 = 1;
int Led2 = 2;
int Led3 = 3;
int Led4 = 4;
int Led5 = 5;
int Led6 = 6;
// 光り方1
// LEDが順に光り(HIGH)に、順に消える(LOW)
void style_1(void)
{
unsigned char j;
for(j=1;j<=6;j++)
{
digitalWrite(j,HIGH);
delay(200);
}
for(j=6;j>=1;j--)
{
digitalWrite(j,LOW);
delay(200);
}
}
// フラッシュ
// LEDが全て光り(HIGH)、全て消える(LOW)
void flash(void)
{
unsigned char j,k;
for(k=0;k<=1;k++)
{
for(j=1;j<=6;j++)
digitalWrite(j,HIGH);
delay(200);
for(j=1;j<=6;j++)
digitalWrite(j,LOW);
delay(200);
}
}
// 光り方2
void style_2(void)
{
unsigned char j,k;
k=1;
for(j=3;j>=1;j--)
{
digitalWrite(j,HIGH);
digitalWrite(j+k,HIGH);
delay(400);
k +=2;
}
k=5;
for(j=1;j<=3;j++)
{
digitalWrite(j,LOW);
digitalWrite(j+k,LOW);
delay(400);
k -=2;
}
}
// 光り方3
void style_3(void)
{
unsigned char j,k;
k=5;
for(j=1;j<=3;j++)
{
digitalWrite(j,HIGH);
digitalWrite(j+k,HIGH);
delay(400);
digitalWrite(j,LOW);
digitalWrite(j+k,LOW);
k -=2;
}
k=3;
for(j=2;j>=1;j--)
{
digitalWrite(j,HIGH);
digitalWrite(j+k,HIGH);
delay(400);
digitalWrite(j,LOW);
digitalWrite(j+k,LOW);
k +=2;
}
}
void setup()
{
unsigned char i;
for(i=1;i<=6;i++)
pinMode(i,OUTPUT);
}
void loop()
{
style_1();
flash();
style_2();
flash();
style_3();
flash();
}
やってみた(でも何か変)
光りましたね。でも、一番右のLEDおかしくないですか?
ずっと光ってます。
よくよくコードを見ると
int Led1 = 1;
int Led2 = 2;
int Led3 = 3;
int Led4 = 4;
int Led5 = 5;
int Led6 = 6;
となっていますね。
ずれてるじゃん!!SainSmartのサンプルコードは図とずれているようですね。
修正しましょう。
0ピンはなぜかデフォルトでHIGHになっているっぽいので、使わないでサンプルコードの通り
1~6ピンを使うようにずらします。

そして、実行すると。。
クリスマスツリーのLED照明とかに似ている感じだ。
1.右から順に光って戻る
style_1
2.フラッシュ
flush
3.黄赤緑の順に光る
style_2
4.フラッシュ
flush
5.緑赤黄の順に光る
style_3
6.フラッシュ
flush
このような順で実行されていました。上手く動いているようです。
-
ピン1,6が緑
-
ピン2,5が赤
-
ピン3,4が黄
これを意識しながらfor文で光り方を設定後delayを追加という流れで、それぞれの光り方を設定している訳ですね。
setup部の
for(i=1;i<=6;i++)
pinMode(i,OUTPUT);
で一括でDigitalピンを出力設定しています。
次回は「Traffic light」信号機をやります。
