#5Средний

Бегущие огни на светодиодах

4.6(85)
207 собрано
Бегущие огни на светодиодах
Огни, которые загораются друг за другом, будто бегут. Arduino зажигает шесть светодиодов по одному; каждый светится короткое мгновение и гаснет, так что свет проходит от начала до конца и начинает снова. Этот простой проект показывает, как управлять несколькими огнями по одному простому узору.

Видео

Схема

Бегущие огни на светодиодах - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Бегущие огни на светодиодах
4// ─────────────────────────────────────────
5// 6 светодиодов загораются один за другим по 150 мс, и огонёк бежит вдоль
6// ряда. Показывает управление несколькими пинами через массив и цикл 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  // Зажечь каждый светодиод по очереди на 150 мс
23  for(int i = 0; i < 6; i++) {
24    digitalWrite(ledPins[i], HIGH);
25    delay(150);
26    digitalWrite(ledPins[i], LOW);
27  }
28}
29

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

Почему лучше использовать массив?

Если хранить номера пинов в массиве, циклом for можно обойти все светодиоды одной строкой кода. Чтобы изменить число светодиодов в этом коде, нужно обновить и массив ledPins, и границы цикла i < 6 в setup() и loop(); писать отдельную строку для каждого светодиода не придётся.

Не повредится ли Arduino, если одновременно загорятся 6 светодиодов?

Если считать около 10 mA на светодиод, шесть светодиодов потребляют около 60 mA. Рекомендуемый предел для одного пина — 20 mA; соблюдать нужно и предел для отдельного пина, и предел для группы пинов. Абсолютный максимум 200 mA, указанный для выводов VCC/GND у ATmega328P, — не рабочая цель и не бюджет тока только для портов ввода-вывода.

Как развернуть направление бега?

Запусти цикл `for` в обратном порядке: `for (int i = 5; i >= 0; i--)`. Так свет побежит в обратную сторону. Если поставить два цикла один за другим, получится эффект Knight Rider.

Один из светодиодов не горит. В чём может быть причина?

Светодиод может быть вставлен наоборот, его ножка может плохо сидеть в макетной плате, или резистор может стоять в другом ряду. Заменив его рабочим светодиодом, можно понять, неисправен ли светодиод или проблема в подключении.