のすけです。
中華で始めるシリーズも今回で7回目ですね。
この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。
入手の話はこちらから。
本題
前回はロウソクのようにLEDを付けました。
今回は、たくさんの色々なLEDをくっ付けてプログラムで制御します。
チュートリアルのチャプター5 Advertising LEDになります。
Arduinoをはじめよう 互換キット UNO R3対応互換ボード 初心者専用実験キット 基本部品セット20 in 1
- 出版社/メーカー: vership
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
回路図
*出展: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」信号機をやります。