
Видео
Схема

Исходный код
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Бегущие огни с регулируемой скоростью
4// ─────────────────────────────────────────
5// Потенциометр задаёт скорость бегущего огонька. A0 читается на каждом
6// шаге, и его значение 0-1023 становится временем задержки (мс).
7//
8// Пины:
9// D2, D3, D4, D5, D6, D7 -> 6 светодиодов (по порядку)
10// Каждый светодиод с резистором 330 ohm
11// A0 -> Средний вывод потенциометра
12// (крайние выводы к 5V и GND)
13
14int ledPins[] = {2, 3, 4, 5, 6, 7}; // Пины светодиодов в порядке зажигания
15int potValue; // Значение потенциометра = задержка (мс)
16
17void setup() {
18 // Все пины светодиодов как выходы
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); // Прочитать скорость (0-1023)
27 digitalWrite(ledPins[i], HIGH);
28 delay(potValue); // Ждать столько мс, каково значение потенциометра
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()`, скорость меняется сразу.
Как подключить выводы потенциометра?
Два крайних вывода подключаются к 5 V и GND, а средний (движок) — к аналоговому входу (например, A0). Если перепутать крайние выводы, изменится только направление вращения; схема не повредится.
Изменение скорости замечается с задержкой. Почему?
Если потенциометр читается только в начале цикла, новое значение применяется лишь после того, как загорятся все светодиоды. Если читать его на каждом шаге светодиода, скорость меняется сразу.
