
6個のLEDが順番に点滅し、光が端から端へ走るように見えます。ポテンショメーターのつまみを回すと、その速さがすぐに変わります。一方に回すと光が素早く進み、反対に回すと各LEDが1秒近く点灯します。つまみで動きの速さを調整する仕組みを目で確かめられます。
動画
回路図

ソースコード
Arduino (C++)
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// LED Chaser with Adjustable Speed
4// ─────────────────────────────────────────
5// A potentiometer sets the speed of the walking LED effect. A0 is read at
6// every step and its 0-1023 value becomes the delay time (ms).
7//
8// Pins:
9// D2, D3, D4, D5, D6, D7 -> 6 LEDs (in order)
10// Each LED with a 330 ohm resistor
11// A0 -> Potentiometer wiper
12// (outer legs to 5V and GND)
13
14int ledPins[] = {2, 3, 4, 5, 6, 7}; // LED pins in lighting order
15int potValue; // Pot value = delay (ms)
16
17void setup() {
18 // Set all LED pins as outputs
19 for(int i = 0; i < 6; i++) {
20 pinMode(ledPins[i], OUTPUT);
21 }
22}
23
24void loop() {
25 for(int i = 0; i < 6; i++) {
26 potValue = analogRead(A0); // Read the speed (0-1023)
27 digitalWrite(ledPins[i], HIGH);
28 delay(potValue); // Wait as many ms as the pot value
29 digitalWrite(ledPins[i], LOW);
30 }
31}
32
よくある質問
`analogRead`はどのような値を返しますか?▾
Unoのアナログ入力は0–5 Vを10ビットの分解能で読み取り、0〜1023の値を返します。ポテンショメーターを一方の端から反対の端まで回すと、値が0から1023まで変化します。
ポテンショメーターの値を速さに変えるにはどうしますか?▾
`map()`関数を使うと、0〜1023の範囲を任意の待ち時間の範囲(例:20–500 ms)に変換できます。`map(value, 0, 1023, 20, 500)`で変換した値を`delay()`に渡すと、速さがすぐに変わります。
ポテンショメーターの足はどうつなぎますか?▾
外側の2本の足を5 VとGNDに、中央の足(ワイパー)をアナログ入力(例:A0)につなぎます。外側の足を逆につないでも、回す方向と値の変化が逆になるだけで、回路が壊れることはありません。
速さの変更が遅れて反映されるのはなぜですか?▾
ポテンショメーターの値をループの最初でしか読み取っていない場合、すべてのLEDが順番に点灯し終わるまで新しい値は反映されません。LEDを切り替える各ステップで読み取るようにすると、速さがすぐに変わります。
