analogWrite()
Описание
Выводит аналоговое значение (ШИМ-сигнал) на пин. Может использоваться для управления яркостью светодиода или скоростью двигателя. После вызова analogWrite() на пине будет генерироваться стабильная прямоугольная волна с заданным коэффициентом заполнения до следующего вызова analogWrite() (или вызова digitalRead() либо digitalWrite()) на том же пине.
Проверьте распиновку вашей платы, чтобы узнать, какие пины официально поддерживают ШИМ. Хотя некоторые платы имеют дополнительные пины с поддержкой ШИМ, их использование рекомендуется только для опытных пользователей, которые могут учесть доступность таймеров и возможные конфликты с другими функциями этих пинов.
Помимо возможностей ШИМ, некоторые платы имеют настоящий аналоговый выход при использовании analogWrite() на пинах, отмеченных DAC. Проверьте распиновку вашей платы, чтобы узнать, доступен ли ЦАП.
Предупреждение
Одновременно можно использовать только 4 разных пина. Включение ШИМ более чем на 4 пинах приведёт к остановке выполняемого скетча, и для загрузки нового потребуется сброс платы.
Вам не нужно вызывать pinMode() для установки пина как выхода перед вызовом analogWrite(). Функция analogWrite не имеет отношения к аналоговым пинам или функции analogRead.
Синтаксис
Используйте следующую функцию для генерации ШИМ-сигнала на заданном пине:
analogWrite(pin, value)
Параметры
Функция принимает следующие параметры:
pin: пин Arduino для вывода ШИМ-сигнала. Допустимые типы данных:int.value: коэффициент заполнения: от 0 (всегда выключен) до 255 (всегда включён). Допустимые типы данных:int.
Возвращаемое значение
Функция ничего не возвращает.
Пример кода
Устанавливает коэффициент заполнения ШИМ, управляющий светодиодом, пропорционально значению, считанному с потенциометра (подключённого к A3).
int ledPin = 9; // Светодиод подключён к цифровому пину 9
int analogPin = A3; // Потенциометр подключён к аналоговому пину 3 (A3)
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.