AnalogWrite

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

analogWrite()

Описание

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

В большинстве плат Arduino (на базе МК ATmega168/328) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11. На плате Arduino Mega - порты с 2 по 13. На более ранних версиях плат Arduino с МК ATmega8, analogWrite() работал только на цифровых пинах 9, 10 и 11. Для вызова analogWrite() не требуется предварительно конфигурировать пин в качестве выхода через pinMode().

Обратите внимание, что несмотря на некоторую похожесть в названии, функция analogWrite не имеет никакого отношения к аналоговым пинам, с которыми работает analogRead().

Синтаксис

analogWrite(pin,value)

Параметры

pin: номер цифрового универсального пина, который будет генерировать ШИМ.

value: относительная ширина импульса (или длительность присутствия высокого уровня) в виде числа от 0 (всегда выключен) до 255 (всегда включен).

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

отсутствует

Замечание

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

Пример

 
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
}

Пример работает следующим образом: уровень яркости светодиода постоянно устанавливается в соответствии с текущим положением потенциометра.

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.