analogWrite()
Описание
Формирует заданное аналоговое напряжение на выводе в виде ШИМ-сигнала. Может использоваться для варьирования яркости свечения светодиода или управления скоростью вращения двигателя. После вызова analogWrite(), на выводе будет непрерывно генерироваться ШИМ-сигнал с заданным коэффициентом заполнения до следующего вызова функции analogWrite() (либо до момента вызова digitalRead() или digitalWrite(), взаимодействующих с этим же выводом). Частота ШИМ составляет приблизительно 490 Гц.
На большинстве плат Arduino (на базе микроконтроллеров ATmega168 или ATmega328) функция analogWrite() работает с выводами 3, 5, 6, 9, 10 и 11. На Arduino Mega функция работает с выводами со 2 по 13. На более старых версиях Arduino (на базе микроконтроллера ATmega8) функция analogWrite() работает только с выводами 9, 10 и 11.
Arduino Due поддерживает функцию analogWrite() для выводов со 2 по 13, а также для выводов DAC0 и DAC1. В отличие от ШИМ-выводов, DAC0 и DAC1 являются выводам цифро-аналоговых преобразователей, поэтому при вызове analogWrite() ведут себя как обычные аналоговые выходы.
При работе с analogWrite() предварительный вызов функции pinMode() для переключения выводов в режим «выход» не требуется.
Функция analogWrite() не имеет ничего общего с аналоговыми выводами и функцией analogRead().
Синтаксис
analogWrite(pin, value)
Параметры
pin: вывод, на котором будет формироваться напряжение.
value: коэффициент заполнения – лежит в пределах от 0 (всегда выключен) до 255 (всегда включен).
Возвращаемые значения
нет
Примечания и известные проблемы
На выводах 5 и 6 генерируется ШИМ-сигнал с коэффициентом заполнения большим, чем заданное ожидаемое значение. Это происходит в результате взаимодействия с функциями millis() и delay(), которые используют тот же внутренний таймер, что применяется для генерирования ШИМ-сигнала. Данный эффект более ярко выражен при малых значениях задаваемого коэффициента заполнения (0 - 10) и может проявляться в неполном выключении выводов 5 и 6 при коэффициенте равном 0.
Пример
Формирование на выводе, управляющим светодиодом, напряжения пропорционального напряжению на потенциометре.
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 to 255*/ }