analogWrite()

Функция передает аналоговое значение (cигнал ШИМ ) на вывод. Может использоваться для регулировки яркости светодиодов или для управления двигателем с различной скоростью. После вызова analogWrite() на соответствующем выводе (пине) будет генерироваться устойчивый прямоугольный сигнал указанного рабочего цикла до следующего вызова analogWrite() (или вызова  digitalRead() либо digitalWrite() ) для того же контакта. Частота ШИМ-сигнала на большинстве контактов составляет приблизительно 490 Гц. На платах Uno и аналогичных платах контакты 5 и 6 имеют частоту приблизительно 980 Гц.

На большинстве плат Arduino (с платами ATmega168 или ATmega328P) эта функция работает на контактах 3, 5, 6, 9, 10 и 11. На плате Arduino Mega она работает на контактах 2-13 и 44-46. Старая версия Arduino Платы с ATmega8 поддерживают только analogWrite() контакты 9, 10 и 11.
Arduino DUE поддерживает analogWrite() контакты 2-13, а также контакты DAC0 и DAC1. В отличие от выводов PWM, DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы.
Вам не нужно звонить, pinMode() чтобы установить вывод в качестве выхода перед вызовом analogWrite(). Функция не имеет ничего общего с аналоговыми штифтами или функции.

Синтаксис

analogWrite(pin, value)

Параметры

pin: пин для записи. Разрешенные типы данных: int.
value: рабочий цикл: от 0 (всегда выключен) до 255 (всегда включен). Разрешенные типы данных: int

Возвращаемое значение

нет

Пример кода

Устанавливает выходной сигнал светодиода пропорционально значению, считанному с потенциометра.

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.
}

Примечания и предупреждения

Выходы ШИМ, генерируемые на контактах 5 и 6, будут иметь более высокие, чем ожидалось, рабочие циклы. Это происходит из - за взаимодействия с функциями millis()и delay(), которые совместно используют один и тот же внутренний таймер, используемый для генерации ШИМ. Это заметно в основном при низких настройках рабочего цикла (например, 0 - 10) и может привести к тому, что значение 0 не полностью отключит выход на контактах 5 и 6.