#5中級

流れるLED

4.6(85)
206 完了
流れるLED
LEDが次々に点灯し、光が走るように進みます。Arduinoが6個のLEDを1個ずつ短く点灯して消灯させることで、光が端から端へと移動し、また最初に戻ります。この簡単なプロジェクトで、1つのパターンで複数の光を制御する方法を学びます。

動画

回路図

流れるLED - Circuit

ソースコード

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   LED Chaser
4// ─────────────────────────────────────────
5// The 6 LEDs light up one after another for 150 ms each, so the light
6// walks along the row. Shows multi-pin control with an array and a for
7// loop.
8//
9// Pins:
10//   D2, D3, D4, D5, D6, D7 -> 6 LEDs (in order)
11//   Each LED with a 330 ohm resistor
12
13int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pins in lighting order
14
15void setup() {
16  // Set all LED pins as outputs
17  for(int i = 0; i < 6; i++) {
18    pinMode(ledPins[i], OUTPUT);
19  }
20}
21
22void loop() {
23  // Light each LED in turn for 150 ms
24  for(int i = 0; i < 6; i++) {
25    digitalWrite(ledPins[i], HIGH);
26    delay(150);
27    digitalWrite(ledPins[i], LOW);
28  }
29}
30

よくある質問

配列を使うと何が便利ですか?▾

ピン番号を配列にまとめると、forループを使って1行のコードですべてのLEDを順番に処理できます。このコードでLEDの数を変えるには、ledPins配列と、setup()およびloop()内のループの条件i < 6を両方更新してください。LEDごとに別々の行を書く必要がなくなります。

6個のLEDが同時に点灯するとArduinoが壊れますか?▾

LED1個あたり約10 mAとすると、6個では約60 mAが流れます。1本のピンの推奨上限は20 mAです。各ピンとピンのグループの両方の電流制限を守る必要があります。ATmega328PのVCC/GNDピンに規定されている200 mAの絶対最大定格は、通常動作の目標値でも、I/Oだけに使える電流の上限でもありません。

光が流れる方向を逆にするにはどうすればよいですか?▾

`for`ループを逆順にして、`for (int i = 5; i >= 0; i--)`と書きます。これで光が反対方向に進みます。2つのループを続けて実行すると、Knight Rider風の動きになります。

LEDが1個だけ点灯しません。原因は何ですか?▾

そのLEDの向きが逆になっている、足がブレッドボードにしっかり差さっていない、抵抗が別の列につながっている、といった原因が考えられます。そのLEDを正常に点灯しているLEDの位置に差し替えると、LEDの故障か接続の問題かを判断できます。