Функция analogWrite() в Arduino используется для генерации ШИМ‑сигнала (широтно‑импульсной модуляции, PWM) на пинах, поддерживающих эту функцию. Она имитирует аналоговое напряжение за счёт изменения скважности импульсов.
Важно: несмотря на название, функция не выдаёт истинное аналоговое напряжение — она генерирует цифровой ШИМ‑сигнал с регулируемой шириной импульса.
Синтаксис
analogWrite(pin, value);
Параметры:
pin— номер пина с поддержкой ШИМ (на Arduino Nano отмечены символом~на плате);value— значение ШИМ от 0 до 255, моделирующее напряжение от 0 В до 5 В:- 0 — сигнал всегда выключен (0 В);
- 255 — сигнал всегда включён (5 В).
Пины с поддержкой ШИМ на Arduino Nano
На Arduino Nano (на базе микроконтроллера ATmega328P) ШИМ поддерживают пины:
- 3, 5, 6, 9, 10, 11 (отмечены символом
~).
Частота ШИМ
Частота ШИМ‑сигнала на большинстве пинов Arduino Nano — около 490 Гц. На пинах 5 и 6 частота может отличаться, поскольку их таймер задействован функциями millis() и delay().
Примеры использования
1. Плавное включение и затухание светодиода
void setup() {
pinMode(10, OUTPUT); // инициализируем пин 10 как выход
}
void loop() {
// Плавное включение
for (int i = 0; i <= 255; i++) {
analogWrite(10, i);
delay(5); // задержка для эффекта
}
// Плавное затухание
for (int i = 255; i >= 0; i--) {
analogWrite(10, i);
delay(5);
}
}
2. Управление яркостью светодиода с помощью потенциометра
int ledPin = 9; // светодиод подключён к пину 9
int potPin = A0; // потенциометр подключён к аналоговому входу A0
int val = 0; // переменная для хранения значения
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
val = analogRead(potPin); // считываем значение с потенциометра (0–1023)
analogWrite(ledPin, val / 4); // преобразуем в диапазон 0–255
delay(10); // небольшая задержка
}
Важные нюансы
- Не путать с аналоговыми входами. Аналоговые входы (A0–A5) не могут генерировать ШИМ‑сигнал. Они предназначены для подключения аналоговых датчиков и работают с функцией
analogRead(). - Настройка режима пина. Хотя
analogWrite()автоматически устанавливает пин в режимOUTPUT, рекомендуется явно указать это черезpinMode()для ясности кода. - Конфликты таймеров. Некоторые пины ШИМ используют общие таймеры с другими функциями (например,
tone()), что может вызвать конфликты при одновременном использовании. - Напряжение. Максимальное напряжение на пине — 5 В (при питании от USB или внешнего источника до 5 В). Для работы с более высокими напряжениями используйте драйверы.
- Токи. Максимальный ток на один пин — 40 мА. При подключении мощных нагрузок (моторов, реле) используйте транзисторы или драйверы.
Типичные применения
- регулировка яркости светодиодов;
- управление скоростью вращения двигателей постоянного тока;
- настройка интенсивности подсветки LCD‑дисплеев;
- генерация аналоговых сигналов для простых схем (с фильтрацией ШИМ).
