analogWrite() / Arduino
Описание
Записывает аналоговое значение (ШИМ сигнал) на вывод. Может использоваться для посветки светодиода с разной яркостью или управления двигателем на разных скоростях. После вызова analogWrite()
, вывод будет постоянно генерировать прямоугольный сигнал с заданной скважностью до следующего вызова analogWrite()
(или вызова digitalRead()
или digitalWrite()
) для этого же вывода. Частота ШИМ сигнала на большинстве выводов составляет примерно 490 Гц. На Uno и подобных платах выводы 5 и 6 имеют частоту примерно 980 Гц.
На большинстве плат Artduino (на тех, которые работают на ATmega168 или ATmega328P) эта функция работает на выходах 3, 5, 6, 9, 10 и 11. На Arduino Mega она работает на выводах 2–13 и 44–46. Старые платы Arduiino с ATmega8 поддерживают analogWrite()
только на выводах 9, 10 и 11.
Arduino Due поддерживает analogWrite()
на выводах со 2 по 13, плюс выводы DAC0 и DAC1. В отличие от ШИМ выводов, DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы.
Вам не нужно вызывать pinMode()
, чтобы настроить вывод на выход, перед вызовом analogWrite()
.
Функция analogWrite()
не имеет ничего общего с аналоговыми выводами и функцией analogRead()
.
Синтаксис
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.