のすけです。
中華で始めるシリーズも今回で7回目ですね。

この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。
入手の話はこちらから。

hollywis.hatenablog.com

本題

前回はロウソクのようにLEDを付けました。

hollywis.hatenablog.com

今回は、たくさんの色々なLEDをくっ付けてプログラムで制御します。

チュートリアルのチャプター5 Advertising LEDになります。

回路図

f:id:hollywis:20151203174151p:plain
*出展:SainSmartチュートリアル

よく見えませんが、ArduinoのDigitalピン0~5にそれぞれLEDを付けろという
ものになります。

配線例がこちら
f:id:hollywis:20151203174326p:plain
*出展:SainSmartチュートリアル

なんか、複雑ですねぇ。。。

ブレッドボードで作ってみる

f:id:hollywis:20151203174559j:plain

配線例が無駄に複雑っぽかったので、簡略化しました。

材料はこちら

  • 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

f:id:hollywis:20151203175139j:plain

つなげてみました。

お気づきかもしれませんが、なぜか右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ピンを使うようにずらします。

f:id:hollywis:20151203182220j:plain

そして、実行すると。。

クリスマスツリーの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」信号機をやります。

Receive the latest news in your email
Table of content
Related articles