![]() Пришло время поработать с портами ввода вывода.
Напомню, в Arduino UNO 6 аналоговых входов, и 13 цифровых входов/выходов (6 из них могут управляться ШИМ сигналом). Аналоговые входы A0 - Аналоговый вход 0 A1 - Аналоговый вход 1 A2 - Аналоговый вход 2 A3 - Аналоговый вход 3 A4 - Аналоговый вход 4 A5 - Аналоговый вход 5 Цифровые входы/выходы (ШИМ) 0 - Цифровой вход/выход 0 1 - Цифровой вход/выход 1 2 - Цифровой вход/выход 2 3 - Цифровой вход/выход 3 (ШИМ) 4 - Цифровой вход/выход 4 5 - Цифровой вход/выход 5 (ШИМ) 6 - Цифровой вход/выход 6 (ШИМ) 7 - Цифровой вход/выход 7 8 - Цифровой вход/выход 8 9 - Цифровой вход/выход 9 (ШИМ) 10 - Цифровой вход/выход 10 (ШИМ) 11 - Цифровой вход/выход 11 (ШИМ) 12 - Цифровой вход/выход 12 13 - Цифровой вход/выход 13 Режим работы пина (вход или выход) Начиная с Arduino 1.0.1, можно включить внутренние подтягивающие резисторы в режиме INPUT_PULLUP. Кроме того, режим INPUT явно отключает внутренние подтягивающие резисторы. void setup() { INPUT Порты Arduino установленные в режим INPUT находятся в высокоимпедансном состоянии. Это означает то, что порт ввода дает слишком малую нагрузки на схему, в которую он включен. Эквивалентом внутреннему сопротивлению будет резистор 100 МОм подключенный к выводу микросхемы. Таким образом, для перевода порта ввода из одного состояния в другое требуется маленькое значение тока. Это позволяет применять выводы микросхемы для подключения различных датчиков, но не питания. INPUT_PULLUP Микроконтроллер ATmega на Arduino имеет внутренние подтягивающие резисторы (резисторы, которые подключаются к источнику питания внутри), к которым вы можете получить доступ. Если вы предпочитаете использовать их вместо внешних подтягивающих резисторов, вы можете использовать аргумент INPUT_PULLUP в pinMode (). OUTPUT Порт установленный в режим выхода — OUTPUT, находится в низкоимпедансном состояние. Он может пропускать через себя довольно большой ток, до 40 mA, достаточный для запитывание внешней цепи, например, светодиода. В этом состоянии порт может быть поврежден как замыкании на землю так и на питание 5В. Тока с порта микроконтроллера не достаточно для питания моторов и сервоприводов напрямую. Функции digitalRead() и digitalWrite() Функция digitalRead() считывает значение с заданного входа - 1 или 0. Функция digitalWrite() при включении пина на выход, подает лог. 1 или 0 на указанный пин
При включении пина на вход, то данная функция подключает и отключает подтягивающий резистор pinMode(11, INPUT); // 11 пин вход digitalWrite(11, HIGH); // подключить подтягивающий резистор digitalWrite(11, LOW); // отключить подтягивающий резистор Примечание: Аналоговые входы (0-6) могут быть использованы как цифровые входы/выходы. Обращение идет по номерам 14-19 Функция analogRead() Функция считывает значение с указанного аналогового входа. Большинство плат Arduino имеют 6 каналов (8 каналов у платы Mini и Nano, 16 — у Mega) c 10-битным аналого-цифровым преобразователем (АЦП). Напряжение, поданное на аналоговый вход (обычно от 0 до 5 вольт), будет преобразовано в значение от 0 до 1023 — это 1024 шага с разрешением 0,0049 вольт. Разброс напряжения и шаг может быть изменен функцией analogReference(). Считывание значения с аналогового входа занимает примерно 100 микросекунд (0,0001 сек), т. е. максимальная частота считывания приблизительно 10 000 раз в секунду. Если аналоговый вход не подключен, то значения, возвращаемые функцией analogRead(), могут принимать случайные значения. int analogPin = 3; // номер порта, к которому подключен потенциометр Функция 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().
int ledPin = 9; // Светодиод подключен к выходу 9 RGB лента от ArduinoЗадался целью преобразовать некое напряжение в цветовую гамму. Низкое напряжение - синий цвет, среднее значение зеленый, и высокое значение - красный. К примеру, датчик температуры, подключенный на аналоговый вход.Вот примерная зависимость света от напряжения. Рис. 2
И схема Рис. 3
Плавное изменение цвета RGB ленты в зависимосчти от некоего датчика, подключенного к аналоговому входу 3 Цвет переходит с синего к красному, через зеленый цвет, Промежуточные цвета смешиваются. В зависимости от датчика, начальное и конечное напряжение, а точнее, цифровой код напряжения можно указать в переменных Скетч: // Плавное изменение цвета RGB ленты в зависимосчти от некоего датчика, У меня выставлено valbeg = 200 и valend = 800, что означает, что напряжение замеряется примерно от 1В до 3.9В. Это означает, что до 1В лента светит только синим, и после 3.9В лента светит только красным. Если выставить valbeg = 0 и valend = 1023, то лента будет плавно изменять цвет от 0 до 5В. Чем меньше измеряемый диапазон, тем больше ступеньки переключения цвета. Оптимально, если разность начального и конечного значения больше 255 (если значения больше, они все равно приводятся к значению 255, так как ШИМ у Ардуины имеет 256 значений 0-255).
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
|
Похожие новости |