Шановні друзі! Сайт знаходиться в процесі перекладу на солов'їну мову. Все буде Україна!

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*/
}

Смотрите также