- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Функция analogWrite()
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
Функция analogWrite()
Выдает аналоговую величину (ШИМ-волну) на порт входа/выхода. Функция может быть полезна для управления яркостью подключенного светодиода или скоростью вращения электродвигателя. После вызова analogWrite() на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова analogWrite (или вызова digitalWrite или digitalRead на том же порту входа/выхода). Частота ШИМ-сигнала приблизительно 490 Гц.
На большинстве плат Arduino (на базе микроконтроллера ATmega168 или ATmega328) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11, на плате Arduino Mega — порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() ра- ботал только на портах 9, 10 и 11.
Для вызова analogWrite() нет необходимости устанавливать тип входа/выхода функцией pinMode(). Функция analogWrite() никак не связана с аналоговыми входами и с функцией analogRead().
Синтаксис:
analogWrite(pin, value);
Параметры:
- pin — порт входа/выхода, на который подается ШИМ-сигнал;
- value — период рабочего цикла: значение между 0 (полностью выключено) и 255 (сигнал подан постоянно).
Примечание
Период ШИМ-сигнала на портах входа/выхода 5 и 6 будет несколько длиннее. Это связано с тем, что таймер для данных выходов также задействован функциями millis() и delay(). Данный эффект более заметен при установке коротких периодов ШИМ-сигнала (0–10).
Пример задания яркости светодиода пропорционально значению, снимаемому с потенциометра, представлен
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
}
Цитата:
int analogPin = 3; // номер порта, к которому подключен делитель напряжения (LDR1 и R1)
int val = 0; // переменная для хранения считываемого значения
int ledPin = 9; // светодиод, подключенный к вход/выходу 9
int brightness = 0; // устанавливаем начальное значение яркости
void setup()
{
Serial.begin(9600); // установка связи по serial
}
void loop()
{
analogWrite(9, brightness);
val = analogRead(analogPin); // считываем значение
Serial.println(val); // выводим полученное значение
if (val < 500) // вводим нужное нам значение (порог срабатывания) из монитора порта
{
digitalWrite(ledPin, HIGH); // включает светодиод
delay(5000); // 5 секунд на случайную засветку
}
else
{
digitalWrite(ledPin, LOW); // выключает светодиод
delay(5000); // 5 секунд на случайное затемнение
}
}