Разделы инструкций

В сети

Пользователей: 112
Из них просматривают:
Аналоги: 39. Видео: 1. Даташиты: 33. Инструкции: 2. Новости: 9. Остальное: 6. Ошибки: 1. Программы: 1. Производители: 1. Профиль пользователя: 2. Расчёты: 1. Теги: 1. Торрент: 2. Форум: 11. Чат: 2.
Участников: 5
Гостей: 107

an , Google , Serzh-19 , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

Функция 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).

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

 

Функция analogWrite
 

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
}

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити
Kosmonavt
Отправлено: 17.02.2019 0:34  Обновлено: 17.02.2019 0:35
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1457
 Функция analogWrite()
Проверил регулировку яркости светодиода на пинах со 2-го по 13-ый. Одинаково плавная регулировка отмечается только на 3, 5, 6, 9, 10 и 11 пинах, на остальных регулировка происходит, почему-то, скачкообразно - сперва не светит вообще, потом сразу на полный накал. Так и должно быть?
MACTEP
Отправлено: 17.02.2019 1:02  Обновлено: 17.02.2019 1:04
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6599
 Функция analogWrite()
Не все выводы ШИМятся.
Цитата:
На большинстве плат Arduino (на базе микроконтроллера ATmega168 или ATmega328) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11, на плате Arduino Mega — порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() работал только на портах 9, 10 и 11.
Kosmonavt
Отправлено: 17.02.2019 2:25  Обновлено: 17.02.2019 2:25
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1457
 Функция analogWrite()
Точно, а я не придал значению, а ведь, действительно это указывалось в статье. Ну хоть убедился в этом сам и запомнил.
Kosmonavt
Отправлено: 17.02.2019 16:07  Обновлено: 08.03.2019 2:21
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1457
 Функция analogWrite()
Вот ещё пример. Фотореле. Делитель из двух резисторов: фото и обычного. Фоторезистор при освещении выдаёт 200 кОм. По монитору порта взято значение 500, по условию всё что меньше 500 даёт команду на включение светодиода. И сделана задержка на 5 секунд, как по засветке, так и по затемнению фоторезистора.
Открыть изображение в новом окне
int analogPin 3// номер порта, к которому подключен делитель напряжения (LDR1 и R1)
int val 0// переменная для хранения считываемого значения
int ledPin 9// светодиод, подключенный к вход/выходу 9
int brightness 0// устанавливаем начальное значение яркости
void setup()
{
  
Serial.begin(9600); // установка связи по serial
}
void loop()
{
  
analogWrite(9brightness);
  
val analogRead(analogPin); // считываем значение
  
Serial.println(val); // выводим полученное значение
  
if (val 500// вводим нужное нам значение (порог срабатывания) из монитора порта
  
{
    
digitalWrite(ledPinHIGH); // включает светодиод
    
delay(5000); // 5 секунд на случайную засветку
  
}
  else
  {
    
digitalWrite(ledPinLOW); // выключает светодиод
    
delay(5000); // 5 секунд на случайное затемнение
  
}
}

Serega2300
Отправлено: 17.02.2019 18:05  Обновлено: 17.02.2019 18:05
Технолог
Дата регистрации: 27.03.2010
Откуда: Тирасполь
Сообщений: 244
 Функция analogWrite()
надо и мне поиграться как то с ардуинкой, а то лежит  без дела)

Разное

Если на шприц отсоса припоя надеть отрезок силиконовой трубки.

Интересно

Семь раз отмерь, один раз отрежь. И не перепутай!

Похожие инструкции