For Loop Iteration: управление несколькими светодиодами (эффект «Рыцаря дорог»)
Используйте цикл for() для последовательного управления шестью светодиодами на цифровых выводах 2–7 — классический «бегущий огонь» в стиле машины KITT.
Часто возникает задача пройтись по набору пинов и выполнить с каждым из них одно и то же действие. Именно для этого существует цикл for() — он позволяет не писать однотипный код шесть раз, а описать действие один раз и повторить его нужное количество раз.
В этом уроке мы подключим 6 LEDs к Arduino и заставим их мигать по очереди, создавая эффект «бегущего огня». Для управления используются функции digitalWrite() и delay(), а сам перебор пинов организован через два цикла for() — один идёт от пина 2 к пину 7, второй возвращается обратно.
Этот пример также называют «Knight Rider» — в память о телесериале 80-х, где Дэвид Хассельхофф ездил на Pontiac с искусственным интеллектом по имени KITT. Автомобиль был буквально увешан LEDs, а на его панели красовался сканирующий дисплей, луч которого плавно скользил туда-обратно — как показано в этом культовом fight between KITT and KARR. Наш скетч воспроизводит именно этот эффект.
Необходимое оборудование
- Arduino Board
- 6 резисторов по 220 Ом
- 6 LEDs
- соединительные провода
- макетная плата (breadboard)
Схема подключения
Подключите шесть светодиодов через резисторы 220 Ом к цифровым выводам 2–7 Arduino. Резистор включается последовательно с каждым светодиодом — это обязательно, иначе через светодиод пойдёт слишком большой ток и он быстро выйдет из строя.

Схема подключения: Arduino UNO соединён с макетной платой, на которой установлены шесть красных светодиодов с резисторами, подключённых к цифровым выводам 2–7.
Принципиальная схема

Принципиальная схема: Arduino UNO подключён к шести светодиодам через резисторы 220 Ом (220 Ω RESISTORS). Светодиоды (LEDs) соединены с цифровыми выводами 2–7.
Как это работает
В блоке setup() цикл for() проходит по пинам 2–7 и настраивает каждый из них как выход (OUTPUT). Это избавляет от необходимости писать шесть отдельных вызовов pinMode().
В loop() работают два цикла for():
- первый увеличивает счётчик от 2 до 7 — светодиоды загораются по одному слева направо;
- второй уменьшает счётчик от 7 до 2 — огонь «возвращается» обратно.
Каждый активный светодиод включается, выдерживается небольшая пауза, затем выключается — и управление переходит к следующему пину. Именно так создаётся плавный эффект бегущего огня.
Код
В начале скетча цикл for() задаёт цифровые пины 2–7 как выходы для шести LEDs.
В основном цикле два вложенных for() последовательно обходят LEDs: сначала от пина 2 к пину 7, затем в обратном направлении — от 7 к 2.
/*
For Loop Iteration
Демонстрация использования цикла for().
Последовательно зажигает несколько светодиодов, затем в обратном порядке.
Схема:
- Светодиоды подключены от пинов 2–7 к GND
создан в 2006 году
автор David A. Mellis
изменён 30 Aug 2011
автор Tom Igoe
Этот пример кода находится в общественном достоянии.
https://www.arduino.cc/built-in-examples/ForLoopIteration
*/
int timer = 100; // Чем больше число, тем медленнее темп.
void setup() {
// Используем цикл for для инициализации каждого пина как выход:
for (int thisPin = 2; thisPin < 8; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// Цикл от младшего пина к старшему:
for (int thisPin = 2; thisPin < 8; thisPin++) {
// Включаем пин:
digitalWrite(thisPin, HIGH);
delay(timer);
// Выключаем пин:
digitalWrite(thisPin, LOW);
}
// Цикл от старшего пина к младшему:
for (int thisPin = 7; thisPin >= 2; thisPin--) {
// Включаем пин:
digitalWrite(thisPin, HIGH);
delay(timer);
// Выключаем пин:
digitalWrite(thisPin, LOW);
}
}
Типичные ошибки
- Светодиод не светится — скорее всего, он вставлен в обратной полярности. Длинная ножка (анод) должна идти к пину Arduino через резистор, короткая (катод) — к GND.
- Все светодиоды горят одновременно — проверьте, что в цикле вы выключаете (
LOW) текущий светодиод перед тем, как включить следующий. - Забыт резистор — светодиод может работать, но перегреваться и быстро деградировать. Всегда используйте токоограничивающий резистор.
- Пины перепутаны — убедитесь, что светодиоды подключены именно к пинам 2–7, а не, например, к 0 и 1 (они используются для UART и могут конфликтовать с загрузкой скетча).
Как проверить результат
После загрузки скетча светодиоды должны загораться по одному: сначала от первого к последнему, затем в обратном порядке — бесконечно. Если эффект выглядит именно так, всё работает правильно. Попробуйте изменить задержку в коде, чтобы ускорить или замедлить «бегущий огонь».
Где пригодится
Этот паттерн используется везде, где нужно управлять несколькими однотипными устройствами: RGB-лентами, сегментами дисплея, реле или моторами. Принцип одинаков — цикл for() и массив пинов.
Дополнительные материалы
Больше базовых примеров вы найдёте в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 29.07.2015, SM