Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogWrite(): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 2: Строка 2:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


== Функция analogWrite() ==
= Функция analogWrite() =


Выдает аналоговую величину (ШИМ волну) на порт входа/выхода. Функция может быть полезна для управления яркостью подключенного светодиода или скоростью электродвигателя. После вызова '''analogWrite()''' на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова '''analogWrite''' (или вызова '''digitalWrite''' или '''digitalRead''' на том же порту входа/выхода). Частота '''ШИМ''' сигнала приблизительно '''490 Hz'''.
Выдает аналоговую величину ([[ШИМ]] волну) на порт входа/выхода. Функция может быть полезна для управления яркостью подключенного светодиода или скоростью электродвигателя. После вызова '''analogWrite()''' на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова [[Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogWrite()|analogWrite]] (или вызова [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/digitalWrite()|digitalWrite]] или [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/digitalRead()|digitalRead]] на том же порту входа/выхода). Частота [[ШИМ]] сигнала приблизительно [[490 Hz]].


На большинстве плат '''Arduino''' (на базе микроконтроллера '''ATmega168''' или '''ATmega328''') '''ШИМ''' поддерживают порты 3, 5, 6, 9, 10 и 11, на плате '''Arduino Mega''' порты с 2 по 13. На более ранних версиях плат '''Arduino''', '''analogWrite()''' работал только на портах 9, 10 и 11.
На большинстве плат [[Arduino]] (на базе [[микроконтроллер]]а [[ATmega168]] или [[ATmega328]]) [[ШИМ]] поддерживают порты 3, 5, 6, 9, 10 и 11, на плате [[Arduino Mega]] порты с 2 по 13. На более ранних версиях плат [[Arduino]], [[Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogWrite()|analogWrite()]] работал только на портах 9, 10 и 11.


Для вызова '''analogWrite()''' нет необходимости устанавливать тип входа/выхода функцией [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/pinMode()|pinMode()]].
Для вызова [[Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogWrite()|analogWrite()]] нет необходимости устанавливать тип входа/выхода функцией [[Arduino:Справочник языка Arduino/Функции/Цифровой ввод/вывод/pinMode()|pinMode()]].


Функция '''analogWrite''' никак не связана с аналоговыми входами и с функцией [[Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogRead()|analogRead]].
Функция [[Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogWrite()|analogWrite]] никак не связана с аналоговыми входами и с функцией [[Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogRead()|analogRead]].


== Синтаксис ==
== Синтаксис ==
Строка 33: Строка 33:
== Замечание ==
== Замечание ==


Период '''ШИМ''' сигнала на портах входа/выхода 5 и 6 будет несколько длиннее. Это связано с тем, что таймер для данных выходов также задействован функциями millis() и delay(). Данный эффект более заметен при установке коротких периодов '''ШИМ''' сигнала (0-10).   
Период [[ШИМ]] сигнала на портах входа/выхода 5 и 6 будет несколько длиннее. Это связано с тем, что таймер для данных выходов также задействован функциями [[Arduino:Справочник языка Arduino/Функции/Работа со временем/millis()|millis()]] и [[Arduino:Справочник языка Arduino/Функции/Работа со временем/delay()|delay()]]. Данный эффект более заметен при установке коротких периодов [[ШИМ]] сигнала (0-10).   


== Пример ==
== Пример ==


Задание яркости светодиода пропорционально значению, снимаемому с потенциометра
Задание яркости [[светодиод]]а пропорционально значению, снимаемому с [[потенциометр]]а


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
Строка 56: Строка 56:
</syntaxhighlight>
</syntaxhighlight>


==См.также==
=См.также=


==Внешние ссылки==
=Внешние ссылки=


<references />
<references />
Строка 64: Строка 64:
{{Навигационная таблица/Справочник языка Arduino}}
{{Навигационная таблица/Справочник языка Arduino}}
{{Навигационная таблица/Arduino библиотеки}}
{{Навигационная таблица/Arduino библиотеки}}
{{Навигационная таблица/Телепорт}}


[[Категория:Справочник языка Arduino]]
[[Категория:Справочник языка Arduino]]
[[Категория:Функция]]
[[Категория:Функция]]

Версия от 17:24, 25 декабря 2022

Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция analogWrite()

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

На большинстве плат 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
}

См.также

Внешние ссылки