На этот раз мы будем включать и выключать несколько светодиодов последовательно — бегущий огонёк на Ардуино. Научившись управлять несколькими светодиодами в предыдущих обзорах, не составит труда понять, как последовательно зажигать светодиоды на Arduino. Мы также рассмотрим знакомый цикл for, который используется для повторения инструкций (команд) в скетче и действует, как своего рода цикл внутри цикла.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- светодиоды
- резисторы
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Обратите внимание, что задействованные пины со 2 по 11 мы используем в режиме OUTPUT, как выходы. Для этого использовали единственный цикл for в процедуре setup — с командой pinMode(i, OUTPUT); Отметим, что нерационально использовать все выходы платы для последовательного переключения светодиодов или подключения светодиодной шкалы. На практике для этих целей лучше использовать сдвиговый регистр 74HC595.
Последовательное включение и выключение светодиодов

Соберите цепь из десяти светодиодов на макетной плате или подключите светодиодную шкалу к плате Arduino. Обратите внимание, что светодиодная шкала не имеет встроенных резисторов, поэтому не забудьте подключить их к каждому сегменту, чтобы светодиоды не сгорели. Когда схема будет собрана, скопируйте программу для последовательного зажигания светодиодов от платы Ардуино и загрузите следующий код в микроконтроллер.
Скетч последовательного выключения светодиодов
byte LedMin = 2;
byte LedMax = 11;
void setup() {
for (byte i = LedMin; i <= LedMax; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
for (byte i = LedMin; i <= LedMax; i++) {
digitalWrite(i, HIGH);
delay(50);
}
for (byte i = LedMax; i >= LedMin; i--) {
digitalWrite(i, LOW);
delay(50);
}
}
Последовательное мигание светодиодами (бегущий огонек)

В следующем примере будет происходить последовательное мерцание светодиодами — скетч бегущий огонёк на Arduino. Схема сборки остается прежней, а в программе добавится команда в цикле for для выключения светодиода. Таким образом получится эффект мерцающего огонька на Ардуино. Направление включения светодиодов можно изменить в условии цикла for, а количество светодиодов можно увеличить при необходимости.
Скетч для последовательного мигания светодиодами
byte LedMin = 2;
byte LedMax = 11;
void setup() {
for (byte i = LedMin; i <= LedMax; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
for (byte i = LedMin; i <= LedMax; i++) {
digitalWrite(i, HIGH);
delay(50);
digitalWrite(i, LOW);
}
for (byte i = LedMax; i >= LedMin; i--) {
digitalWrite(i, HIGH);
delay(50);
digitalWrite(i, LOW);
}
}
Последовательное и плавное мигание светодиодами

В следующем примере будет использоваться команда analogWrite, чтобы происходило последовательное мигание с плавным розжигом светодиодов. Поэтому в схеме используется только 6 пинов микроконтроллера Arduino Uno (Nano), поддерживающих ШИМ модуляцию. Если у вас плата Arduino Mega 2560, то вы можете также использовать в схеме 10 светодиодов, так как на этой плате все пины со 2 по 13 поддерживают ШИМ.
Скетч поочередного плавного розжига светодиодов
// перечисляем пины с ШИМ модуляцией
byte LedPin[] = {0, 3, 5, 6, 9, 10, 11};
void setup() {
for (byte i = 0; i < 6; i++) {
pinMode(LedPin[i], OUTPUT);
}
}
void loop() {
for (byte i = 0; i < 6; i++) {
for (byte x = 0; x <= 250; x++) {
analogWrite(LedPin[i], x);
analogWrite(LedPin[i - 1], 250 - x);
delay(2);
}
delay(50);
}
for (byte i = 6; i > 0; i--) {
for (byte x = 0; x <= 250; x++) {
analogWrite(LedPin[i], x);
analogWrite(LedPin[i + 1], 250 - x);
delay(2);
}
delay(50);
}
}
Заключение. Во всех представленных примерах с поочередным миганием лампочек используются глобальные переменные типа byte, которые могут быть вызваны в любом месте программы, в отличие от локальных переменных в языке микроконтроллера Arduino. Что этот тип переменных может хранить целое число от 0 до 255. Если у вас есть вопросы по рассмотренной теме, оставляйте их в комментариях к этой записи.

Благодарю!
Всё предельно ясно и информативно.
Дальше всё зависит только от собственного воображения .