#6Средний

Светодиодный эффект Knight Rider

4.8(106)
202 собрано
Светодиодный эффект Knight Rider
Классический бегущий огонь-сканер: светящаяся точка скользит от одного края шести светодиодов к другому и возвращается обратно. Arduino зажигает каждый светодиод на десятую долю секунды и переходит к следующему, на краях разворачивается и без остановки бегает туда-обратно. Хорошая отправная точка для декоративной подсветки и предупреждающих огней.

Видео

Схема

Светодиодный эффект Knight Rider - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Светодиодный эффект Knight Rider
4// ─────────────────────────────────────────
5// 6 светодиодов загораются по одному вперёд, затем назад (эффект Knight
6// Rider). Показывает логику цикла for в обе стороны.
7//
8// Пины:
9//   D2, D3, D4, D5, D6, D7 -> 6 светодиодов (по порядку)
10//   Каждый светодиод с резистором 330 ohm
11
12int ledPins[] = {2, 3, 4, 5, 6, 7};   // Пины светодиодов в порядке зажигания
13
14void setup() {
15  // Все пины светодиодов как выходы
16  for(int i = 0; i < 6; i++) {
17    pinMode(ledPins[i], OUTPUT);
18  }
19}
20
21void loop() {
22  // Вперёд: от D2 до D7, 100 мс на светодиод
23  for(int i = 0; i < 6; i++) {
24    digitalWrite(ledPins[i], HIGH);
25    delay(100);
26    digitalWrite(ledPins[i], LOW);
27  }
28
29  // Назад: от D6 до D3. Крайние светодиоды пропускаются, чтобы отскок выглядел плавно
30  for(int i = 4; i > 0; i--) {
31    digitalWrite(ledPins[i], HIGH);
32    delay(100);
33    digitalWrite(ledPins[i], LOW);
34  }
35}
36

Частые вопросы

Как создаётся эффект Knight Rider?

Светодиоды загораются по очереди сначала слева направо, затем справа налево. Два цикла for выполняются один за другим; второй цикл считает в обратную сторону, поэтому свет бегает туда-обратно.

Крайние светодиоды будто мигают дважды. Как это исправить?

Если цикл снова зажигает крайний светодиод, этот светодиод горит два шага подряд. Повтор на краях можно убрать, если начинать цикл на один индекс раньше или позже (например, от 4 до 1).

Как регулировать скорость?

Измени значение delay() между шагами. Значение от 30 до 80 ms даёт плавный эффект. Если хочешь регулировать скорость во время работы программы, можно добавить потенциометр, как в следующем проекте «Светодиодный эффект Knight Rider с регулируемой скоростью».

Можно ли добавить больше светодиодов?

Да, достаточно добавить новые пины в массив пинов и обновить границы цикла. У Uno 12 свободных цифровых пинов; для большего числа можно управлять 8 и более светодиодами всего через 3 пина с помощью сдвигового регистра 74HC595.