#7Средний

Бегущие огни с регулируемой скоростью

4.6(72)
146 собрано
Бегущие огни с регулируемой скоростью
Шесть светодиодов загораются друг за другом, и кажется, что свет бежит от одного края к другому. Поверни ручку потенциометра, и скорость этого бега сразу меняется: в одну сторону свет мчится, в другую — каждый светодиод ждёт почти секунду. Ты своими глазами видишь, как ручка может задавать скорость чего-либо.

Видео

Схема

Бегущие огни с регулируемой скоростью - Circuit

Исходный код

C++ (Arduino IDE)
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). Если перепутать крайние выводы, изменится только направление вращения; схема не повредится.

Изменение скорости замечается с задержкой. Почему?

Если потенциометр читается только в начале цикла, новое значение применяется лишь после того, как загорятся все светодиоды. Если читать его на каждом шаге светодиода, скорость меняется сразу.