
Видео
Схема

Исходный код
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.
