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

В сети

Пользователей: 111
Из них просматривают:
Аналоги: 41. Видео: 1. Даташиты: 16. Инструкции: 5. Новости: 15. Остальное: 5. Партнёры: 2. Профиль пользователя: 3. Теги: 1. Торрент: 4. Форум: 14. Чат: 4.
Участников: 6
Гостей: 105

an , KT315 , alex01981 , Google , 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
Откуда: Днестровск
Сообщений: 1412
 Функция analogWrite()
Проверил регулировку яркости светодиода на пинах со 2-го по 13-ый. Одинаково плавная регулировка отмечается только на 3, 5, 6, 9, 10 и 11 пинах, на остальных регулировка происходит, почему-то, скачкообразно - сперва не светит вообще, потом сразу на полный накал. Так и должно быть?
MACTEP
Отправлено: 17.02.2019 1:02  Обновлено: 17.02.2019 1:04
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6530
 Функция 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
Откуда: Днестровск
Сообщений: 1412
 Функция analogWrite()
Точно, а я не придал значению, а ведь, действительно это указывалось в статье. Ну хоть убедился в этом сам и запомнил.
Kosmonavt
Отправлено: 17.02.2019 16:07  Обновлено: 08.03.2019 2:21
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1412
 Функция 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
Откуда: Тирасполь
Сообщений: 242
 Функция analogWrite()
надо и мне поиграться как то с ардуинкой, а то лежит  без дела)

Разное

Если у вас нет жидкого канифольного флюса, его легко изготовить самостоятельно.

Интересно

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

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