Описание
Выдает аналоговую величину (
ШИМ
волну) на порт вход/выхода. Функция может быть полезна для управления яркостью подключенного светодиода или скоростью электродвигателя. После вызова analogWrite() на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова analogWrite (или вызова digitalWrite() или digitalRead()* на том же порту вход/выхода). Частота ШИМ сигнала приблизительно 490 Hz.
На большинстве плат Arduino (на базе микроконтроллера ATmega168* или ATmega328*) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11, на плате Arduino Mega 2560 порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() работал только на портах 9, 10 и 11.
Для вызова analogWrite() нет необходимости устанавливать тип вход/выхода функцией pinMode().
Функция analogWrite никак не связана с аналоговыми входами и с функцией analogRead.
Синтаксис
analogWrite(pin, value)
Параметры
pin: порт вход/выхода на который подаем ШИМ сигнал.
value: период рабочего цикла значение между 0 (полностью выключено) and 255 (сигнал подан постоянно).
Возвращаемое значение
нет
Замечание
Период ШИМ сигнала на портах вход/выхода 5 и 6 будет несколько длиннее. Это связано с тем, что таймер для данных выходов также задействован функциями millis() и delay(). Данный эффект более заметен при установке коротких периодов ШИМ сигнала (0-10).
Пример
Задание яркости светодиода пропорционально значению, снимаемому с потенциометра
int ledPin = 9; // Светодиод подключен к выходы 9 int analogPin = 3; // потенциометр подключен к выходу 3 int val = 0; // переменная для хранения значения void setup() { pinMode(ledPin, OUTPUT); // установка порта на выход } void loop() { val = analogRead(analogPin); // считываем значение с порта, подключенному к потенциометру analogWrite(ledPin, val / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255 }