Analog Write с 12 светодиодами на Arduino Mega
Плавное поочерёдное включение и выключение 12 светодиодов с помощью ШИМ-выходов Arduino Mega.
Этот урок показывает, как плавно зажигать и гасить 12 LEDs поочерёдно на плате Arduino Mega, используя увеличенное количество PWM-совместимых цифровых пинов этой платы.
Arduino Mega отличается от стандартного Arduino Uno именно тем, что предоставляет значительно больше ШИМ-выходов. Это позволяет управлять большим количеством светодиодов или сервоприводов без дополнительных микросхем.
Необходимые компоненты
- 12 красных LEDs
- 12 резисторов 220 Ом
- соединительные провода
- макетная плата
Схема подключения

Схема подключения 12 светодиодов к Arduino Mega на макетной плате. Длинные ноги (аноды) светодиодов подключены к пинам 2–13 через резисторы 220 Ом, короткие ноги (катоды) — к GND.
Подключите длинные положительные ноги (аноды) 12 LEDs к цифровым пинам 2–13 через ограничивающие ток резисторы 220 Ом. Короткие отрицательные ноги (катоды) соедините с землёй.
Важно: не забывайте про резисторы! Без них светодиоды получат слишком большой ток и могут сгореть или повредить пин микроконтроллера.
Принципиальная схема

Принципиальная схема подключения 12 светодиодов через резисторы 220 Ом к Arduino Mega. На схеме обозначены: резисторы 220 Ом и светодиоды (LEDs).
Как это работает
Программа использует analogWrite() — функцию, которая управляет яркостью светодиода через ШИМ (PWM). Значение яркости меняется от 0 (полностью выключен) до 255 (максимальная яркость). Светодиоды перебираются поочерёдно: каждый сначала плавно разгорается, а затем плавно гаснет, после чего программа переходит к следующему.
Код
В функции setup() цикл for() настраивает цифровые пины 2–13 платы Mega как выходы (OUTPUT).
В функции loop() используются три вложенных цикла for().
Внешний цикл:
for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++)
последовательно перебирает все светодиоды — от пина с наименьшим номером до наибольшего. Прежде чем перейти к следующему пину, программа выполняет два действия.
Первое — плавное увеличение яркости через следующие строки:
for (int brightness = 0; brightness < 255; brightness++) { analogWrite(thisPin, brightness); delay(2); }
С каждой итерацией переменная brightness увеличивается на единицу, и это значение передаётся в analogWrite() для текущего пина. Когда яркость достигает максимума (255), включается второй цикл:
for (int brightness = 255; brightness >= 0; brightness--) { analogWrite(thisPin, brightness); delay(2); }
Второе — плавное уменьшение яркости: переменная brightness уменьшается на единицу с каждым шагом, пока не достигнет нуля. После этого внешний цикл for() переходит к следующему светодиоду, и весь процесс повторяется.
/*
Тест analogWrite() на Mega
Этот скетч поочерёдно плавно включает и выключает светодиоды на цифровых пинах со 2 по 13.
Скетч написан для Arduino Mega и не будет работать на других платах.
Схема:
- Светодиоды подключены от пинов 2–13 к земле.
Создан 8 февраля 2009 г.
Автор: Tom Igoe
Код примера находится в открытом доступе.
https://www.arduino.cc/en/Tutorial/AnalogWriteMega
*/
// Эти константы не изменяются. Они задают имена используемых пинов:
const int lowestPin = 2;
const int highestPin = 13;
void setup() {
// Настроить пины со 2 по 13 как выходы:
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// Перебираем пины:
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
// Плавно увеличиваем яркость светодиода на thisPin от нуля до максимума:
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(thisPin, brightness);
delay(2);
}
// Плавно уменьшаем яркость светодиода на thisPin от максимума до нуля:
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(thisPin, brightness);
delay(2);
}
// Пауза между переключением светодиодов:
delay(100);
}
}
Типичные ошибки
- Светодиод не светится — проверьте полярность: анод (длинная нога) должен быть подключён к пину, катод (короткая нога) — к GND.
- Светодиод светит, но не меняет яркость — убедитесь, что используете пины с поддержкой PWM. На Arduino Mega это пины 2–13 и ряд других.
- Все светодиоды мигают одновременно — скорее всего, перепутаны пины в коде или схеме. Проверьте соответствие физических соединений и переменных
lowestPin/highestPin. - Резистор пропущен — светодиод может работать, но долго не проживёт. Всегда используйте токоограничивающий резистор.
Как проверить результат
После загрузки скетча светодиоды должны поочерёдно плавно разгораться и гаснуть, создавая эффект «бегущей волны». Если все 12 светодиодов работают корректно — урок выполнен успешно.
Дополнительные материалы
Больше базовых примеров вы найдёте в разделе built-in examples.
Также изучите language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 28.07.2015, SM