Инструкции

Справочный раздел

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

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

В сети

Пользователей: 111
Из них просматривают:
Аналоги: 46. Видео: 1. Даташиты: 39. Инструкции: 10. Новости: 5. Остальное: 1. Партнёры: 1. Теги: 1. Форум: 6. Чат: 1.
Участников: 3
Гостей: 108

an , Google , Яндекс , далее...
Рекорд 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
}

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
 Функция analogWrite()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2518
не в сети
Проверил регулировку яркости светодиода на пинах со 2-го по 13-ый. Одинаково плавная регулировка отмечается только на 3, 5, 6, 9, 10 и 11 пинах, на остальных регулировка происходит, почему-то, скачкообразно - сперва не светит вообще, потом сразу на полный накал. Так и должно быть?
 Функция analogWrite()
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7275
не в сети
Не все выводы ШИМятся.
Цитата:
На большинстве плат Arduino (на базе микроконтроллера ATmega168 или ATmega328) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11, на плате Arduino Mega — порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() работал только на портах 9, 10 и 11.
 Функция analogWrite()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2518
не в сети
Точно, а я не придал значению, а ведь, действительно это указывалось в статье. Ну хоть убедился в этом сам и запомнил.
 Функция analogWrite()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2518
не в сети
Вот ещё пример. Фотореле. Делитель из двух резисторов: фото и обычного. Фоторезистор при освещении выдаёт 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 секунд на случайное затемнение
  
}
}

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

Разное

Интересно

Не давайте детям играть с ПДУ при работающем телевизоре.
Так как, нажимая беспорядочно кнопки, можно перевести телевизор в сервисный режим и распрограммировать его микроконтроллер с ППЗУ.

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