Урок 5: Эффект «погони» за светодиодами

1. О чём эксперимент?

Классический приём, когда несколько светодиодов «бегут» по ряду — часто встречается в бегущих строках и рекламных вывесках. Мы запрограммируем 6 LED, подключённых к выводам 2–7, чтобы получить этот эффект.

2. Компоненты

Кол-во

Деталь

1

Плата Arduino UNO

6

LED 5 мм (красный)

6

Резистор 220 Ω

1

Макетная плата (breadboard)

7

Перемычки «папа–папа»

1

USB-кабель A-B

3. Схема подключения

Подключение 6 LED к пинам 2–7
  • 2–7 → аноды LED (через резисторы 220 Ω)

  • Катоды всех светодиодов → GND

4. Скетч

led_chase_effect.ino
// Эффект «погони» за светодиодами
int BASE = 2;        // первый пин
int NUM  = 6;        // количество светодиодов

void setup() {
  for (int i = BASE; i < BASE + NUM; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  // пробегаем вперёд
  for (int i = BASE; i < BASE + NUM; i++) {
    digitalWrite(i, LOW);  // гасим светодиод
    delay(200);
  }
  // пробегаем назад
  for (int i = BASE; i < BASE + NUM; i++) {
    digitalWrite(i, HIGH); // зажигаем светодиод
    delay(200);
  }
}

Как работает код

  • Массив пинов не нужен — используем арифметику (BASE + NUM).

  • Первый цикл гасит светодиоды по очереди, второй — зажигает.

  • Задержка 200 мс задаёт скорость «бега». Уменьшите её для более быстрого эффекта.

5. Пошаговый запуск

  1. Соберите схему, как на рисунке выше.

  2. Запустите Arduino IDE, выберите плату и COM-порт.

  3. Вставьте код, нажмите Upload.

  4. Наблюдайте бегущий огонёк на LED-линию.

6. Что может пойти не так

Симптом

Возможная причина

Решение

Некоторые LED не горят

Разорвана цепь или нет резистора

Проверьте соединения, замените LED

«Погоня» идёт в другую сторону

Светодиоды вставлены наоборот

Переориентируйте LED или поменяйте порядок пинов

Слишком быстро/медленно

Неподходящее значение delay()

Подберите задержку 50-300 мс под нужный эффект

7. Эксперименты

  • Уменьшите задержку до 50 мс — получите эффект «бега» рекламной строки.

  • Подключите потенциометр к A0 и изменяйте задержку delay() «на лету» через analogRead(A0).