какая команда используется для считывания значений с цифрового входа

Способы чтения и управления портами ввода-вывода Arduino

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

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Способ первый – стандартный язык для Arduino IDE

Всем известно, что Ардуино программируется на C++ с некоторой адаптацией и упрощениями для новичков. Он называется Wiring. Изначально все порты ардуино определяются как входы, и нет нужды задавать это в коде.

Порты обычно прописываются в функции инициализации переменных:

Для этого используется команда pinMode, у неё достаточно простой синтаксис, сначала указывается номер порта, затем его роль через запятую.

pinMode (nomer_porta, naznachenie)

С помощью этой команды внутренняя схема микроконтроллера конфигурируется определенным образом.

Есть три режима в которых может работать порт: INPUT – вход, в этом режиме происходит считывание данных с датчиков, состояния кнопок, аналогового и цифрового сигнала. Порт находится в т.н. высокоимпедансном состоянии, простыми словами – у входа высокое сопротивление. Устанавливается это значение, на примере 13 пина платы, при необходимости так:

OUTPUT – выход, в зависимости от команды прописанной в коде порт принимает значение единицы или нуля. Выход становится своего рода управляемым источником питания и выдаёт максимальный ток (в нашем случае 20 мА и 40 мА в пике) в нагрузку к нему подключенную. Чтобы назначить порт как выход на Arduino нужно ввести:

INPUT_PULLUP – порт работает как вход, но к нему подключается т.н. подтягивающий резистор в 20 кОм.

Условную внутреннюю схему порта в таком состоянии вы видите ниже. Особенностью этого входа является то, что входной сигнал воспринимается как проинвертированный («единица» на входе воспринимается микроконтроллером как «ноль»). В таком режиме вы можете не использовать внешние подтягивающие резисторы при работе с кнопками.

pinMode (13, INPUT_PULLUP);

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Данные принимаются с портов и передают на них командами:

digitalWrite(пин, значение) – переводит выходной пин в логическую 1 или 0, соответственно на выходе появляется или исчезает напряжение 5В, например digitalWrite (13, HIGH) – подаёт 5 вольт (логическую единицу) на 13 пин, а digitalWrite (13, low) – переводит 13 пин в состояние логического ноля (0 вольт);

digitalRead(пин) – считывает значение со входа, пример digitalRead (10), считывает сигнал с 10 пина;

analogRead(пин) – считывает аналоговый сигнал с аналогового порта, вы получаете значение в диапазоне от 0 до 1023 (в пределах 10-битного АЦП), пример analogRead (3).

Способ два – управление портами через регистры Atmega и ускорение работы кода

Такое управление конечно простое, но в этом случае есть два недостатка – большее потребление памяти и низкое быстродействие при работе с портами. Но вспомните что такое Arduino независимо от варианта платы (uno, micro, nano)? В первую очередь, это микроконтроллер AVR семейства ATMEGA, в последнее время используется МК atmega328.

В Arduino IDE вы можете программировать на родном для этого семейства языке C AVR, так, как если бы вы работали с отдельным микроконтроллером. Но обо всем по порядку. Чтобы управлять портами Ардуино таким образом вам нужно сначала внимательно рассмотреть следующую иллюстрацию.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Возможно кому-то будет нагляднее изучать порты в таком виде (на рисунке тоже самое, но в другом оформлении):

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Здесь вы видите соответствие выводов Ардуино и названий портов атмеги. Итак, у нас есть 3 порта:

Исходя из изображенного на рисунках, я составил таблицу соответствия портов Ардуино и Атмеги, она пригодится вам в дальнейшем.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

У Atmega есть три регистра длиной в 8 бит, которые управляют состоянием портов, например, порта B разберемся в их назначении проведя аналогии со стандартными средствами wiring описанными в начале статьи:

PORTB – Управление состоянием вывода. Если пин находится в режиме «Выхода», то 1 и 0 определяют наличие этих же сигналов на выходе. Если же пин находится в режиме «Входа», то 1 подключает подтягивающий резистор (тоже что и INPUT_PULLUP рассмотренный выше), если 0 – высокоимпедансное состояние (аналог INPUT);

PINB – регистр чтения. Соответственно в нём находится информация о текущем состоянии выводов порта (логическая единица или ноль).

Вместо буквы «В» может быть любая другая согласно названиям портов, например, PORTD или PORTC аналогично работают и другие команды.

Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

Помигаем светодиодом, заменим стандартную функцию digitalWrite(). Для начала вспомним как выглядит исходный пример из библиотеки Arduino IDE.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Это код всем известного «blink», который демонстрирует мигание светодиодом, встроенным в плату.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

В комментариях даны пояснения к коду. Логика такой работы заключается в следующем.

Команда PORTB B00100000 переводит PB5 в состояние логической единицы, смотрим, а те картинки и таблицу что расположены ниже и видим, что PB5 соответствует 13 пину Ардуины.

Буква «В» перед цифрами говорит о том, что мы в записываем значения в двоичном виде. Нумерация в двоичном коде идёт справа налево, т.е. здесь единица стоит в шестом с правого края бите, что говорит микроконтроллеру о взаимодействии с состоянием шестого бита регистра порта B (PB5). В таблице ниже изображена структура порта D, она аналогична и приведена для примера.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Вы можете задавать значение не в двоичном, а в шестнадцатеричном виде, например, для этого открываем калькулятор windows и в режиме «ВИД», выбираем вариант «Программист».

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Вводим желаемое число:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

В таком случае переносим это всё в Arduino IDE, но уже вместо приставки «В» будет «0х».

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Но при таком вводе возникает проблема. Если у вас к другим пинам подключено что-либо, то внося команду типа B00010000 – вы все выводы кроме 13 (PB5) обнулите. Вы можете вносить данные на каждый пин по отдельности. Это будет выглядеть следующим образом:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Такая запись может показаться непонятной, давайте разберемся.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Это операция логического сложения, |= значит прибавить к содержимому порту что-либо.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

А это значит, что нужно сложить слово из 8 бит в регистре с единицей, смещенной на 5 бит – в результате, если было 11000010 получается 11010010. На этом примере видно, что изменился только PB5, остальные биты этого регистра остались без изменений, как и остались неизменными состояния выводов микроконтроллера.

Но при логическом сложении возникает проблема – вы не можете превратить единицу в ноль, потому что:

Нам на помощь придёт логическое умножение и инвертирование:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

&= значит умножить содержимое порта на определенное число.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

А это число, на которое мы умножает. Знак «

» обозначает инвертирование. В нашем случае проинвертированная единица является нулем. То есть мы умножаем содержимое порта на ноль, сдвинутый на 5 бит. Например, было 10110001, стало 10100001. Остальные биты остались без изменений.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Тоже самое можно сделать с помощью операции инвертирования (^):

Чтение с портов, аналог digitalRead() выполняют с помощью регистра PIN, на практике это выглядит так:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Здесь мы проверяем равно ли выражение в скобках реальному состоянию портов, т.е. аналогично тому, если бы мы написали if (digitalRead(12) == 1).

Пошаговое обучение программированию и созданию устройств на микроконтроллерах AVR: Программирование микроконтроллеров для начинающих

Заключение

Для чего такие сложности с управлением портами, если можно использовать стандартные удобные функции? Всё дело в быстродействии и размерах кода. При использовании второго способа, рассмотренного в статье размер кода, значительно снижается, а быстродействие увеличивается на несколько порядков. Стандартный digitalWrite() выполнялся за 1800 мкс, а запись прямо в порт за 0,2 мкс, а digitalRead() за 1900 мкс, а стал также за 0,2 мкс. Этот способ управления был найден на просторах сети и часто встречается в коде готовых проектов.

Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!

Записывайтесь в онлайн-университет от GeekBrains:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Изучить C, механизмы отладки и программирования микроконтроллеров;

Получить опыт работы с реальными проектами, в команде и самостоятельно;

Получить удостоверение и сертификат, подтверждающие полученные знания.

Starter box для первых экспериментов в подарок!

После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.

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

Источник

ВВОД-ВЫВОД на Arduino

Рассмотрены различные режимы работы выводов платы Arduino и функции языка C++ для работы с этими выводами (пинами)

ВВОД-ВЫВОД

По умолчанию цифровые выводы в Arduino предустановлены на вход, так что их нет нужды явно объявлять как INPUT с помощью pinMode().

Выводы, сконфигурированные как INPUT, подразумеваются в состоянии с высоким импедансом (сопротивлением).

Если на порт ввода не поступает сигнал, то рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к питанию +5 В, либо к земле.

Микроконтроллер ATmega имеет программируемые встроенные подтягивающие резисторы 20 кОм. Программирование данных резисторов осуществляется так:

Выводы, сконфигурированные как порты вывода находятся в низкоимпедансном состоянии. Данные выводы могут пропускать через себя достаточно большой ток. Выводы микросхемы ATmega могут быть источником тока до 40 мА.

Аналоговые входы

Аналоговые выводы не похожи на цифровые, и нет необходимости предварительно объявлять их как INPUT или OUTPUT (если только вы не планируете использовать их в качестве цифровых портов 14-18).

Аналоговые пины как цифровые

Аналоговые входы (номера от 14 до 19) также могут использоваться как цифровые выводы портов ввода/вывода:

Выводы аналоговые входов имеют подтягивающие резисторы работающие как на цифровых выводах. Включение резисторов производится командой

digitalWrite(14, HIGH); // включить резистор на выводе аналогового входа 0

пока вывод работает как порт ввода.

После работы аналогового входа в цифровом режиме может потребоваться настроить паузу между чтением функцией analogRead() других входов.

Питание Arduino:

1) VIN. Вход используется для подачи питания от внешнего источника (в отсутствие 5 В от разъема USB или другого регулируемого источника питания). Подача напряжения питания происходит через данный вывод.

Входное напряжение (рекомендуемое): 7-12 В.

Входное напряжение (предельное): 6-20 В.

2) 5V. Регулируемый источник напряжения, используемый для питания микроконтроллера и компонентов на плате. Питание может подаваться от вывода VIN через регулятор напряжения, или от разъема USB, или другого регулируемого источника напряжения 5 В.

Источник

Arduino — функции — цифровой вход/выход

Arduino IDE имеет набор стандартных функций для управления входом/выходом. Вы можете легко обрабатывать как цифровые сигналы, так и аналоговые. Ниже приведен список функций с кратким описанием и примерами использования.

Цифровой вход/выход

Цифровые выводы Arduino могут быть использованы как входы или как выходы. Поэтому необходимы функции, которые позволят установить (настроить) выводы на запись или чтение данных.

Функция pinMode()

Функция pinMode() позволяет определить работу отдельных контактов. Ее синтаксис выглядит следующим образом:

pin — код — это указать номера контакта системы Arduino

mode — это одна из предопределенных констант: INPUT, OUTPUT или INPUT_PULLUP

Предназначение данных констант описано в другой статье. Примеры режим работы выводов:

Как вы можете видеть, конфигурирование контактов не такой уж сложный процесс. Стоит обратить внимание на тот факт, что тот же эффект можно получить несколькими способами.

Первые два примера основаны на непосредственном вводе номера контакта и определении режима его работы. Это правильная декларация, однако, она не рекомендуется для использования. Стоит использовать один из последующих способов.

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Прямое обращение к номерам выводов может привести к путанице и ошибкам, поскольку во время написания и тестирования программы постоянно необходимо держать в голове какой номер за что отвечает. Лучшее решение — использовать определение, константу или переменную.

Определение — название для конкретного контакта (имя), которое определяет его использование. Безусловно, легче запомнить, что ledPin это вывод, к которому подключен светодиод, чем просто светодиод подключен к контакту 10.

Стоит помнить, что при объявлении соответствующего имени, мы так же будем ссылаться на него и в программе, а не только при определении режима работы вывода. Определение имен с помощью директивы define или const совпадает с практической точки зрения. Компилятор заменит данное имя на присвоенное ему значение.

Разработчики Arduino IDE рекомендуют использовать const. Мы в отношении контактов рекомендуем использовать define как четкое отличительное назначение контактов для имени.

Дополнительным преимуществом использования define является то, что он обычно размещается в начале кода, что облегчает модификацию электронной схемы в будущем. При изменении выводов в электронной схеме, в скетче нам необходимо будет только изменить номера контактов в определении выводов.

В последнем примере показано использование переменной в качестве имени контакт. Такое определение приведено на официальном сайте документации Arduino. На наш взгляд, это не лучший вариант, так как переменная займет ценное место в памяти. Единственно оправданным случаем использования переменной может быть ситуация, когда мы хотим в цикле выполнять операции над несколькими выводами. Это, однако, особый случай.

Иногда в каком-либо проекте нет необходимости в аналоговых входах, тогда эти выводы можно использовать в качестве цифрового входа или выхода. В этом случае с помощью функции pinMode() можно установить необходимый режим для контактов A0 — A5.

Использование одного или нескольких контактов из A0… A5 как цифровых не приведет к невозможности использования оставшихся в качестве аналоговых входов. Можно использовать, например, 2 аналоговых входа и 4 цифровых выходов из A0… A5.

Функция digitalWrite()

Функция digitalWrite() позволяет установить состояние вывода как цифровой выход. Ее синтаксис (как и в pinMode()) требует двух параметров: первый — это номер контакта, второй — логическое значение LOW или HIGH.

Установка значения LOW приведет к тому, что напряжение на выходе будет 0В (короткое замыкание на массу), значение HIGH около 3,3В или 5В в зависимости от напряжения питания Arduino. Ниже приведен пример использования функции digitalWrite():

В примере видно как можно установить соответствующее состояние вывода. Использованная в примере функция delay() позволяет выполнять задержку исполнения кода. Подробнее об этом будет обсуждаться далее.

При использование функции digitalWrite() в случае, когда вывод настроен как вход, необходимо включить или выключить режим PULLUP, то есть подключить подтягивающий резистор. В более поздних версиях Arduino IDE, безусловно, лучше использовать pinMode() с параметром INPUT_PULLUP.

Функция digitalRead()

Функция digitalRead() позволяет считывать состояние с вывода, определенного как цифровой вход. Эта функция возвращает значение LOW или HIGH. Необходимо указать номер контакта, с которого мы хотим прочитать состояние.

Если вывод, с которого мы считываем состояние в данный момент не подключен к схеме («висит в воздухе»), то функция может возвратить случайное значение — LOW или HIGH. Следует помнить об этом во время проектирования электронного оборудования. Для предотвращения такой ситуации необходимо использовать подтягивающий резистор. Ниже приведены примеры чтения состояния цифрового входа:

Приведенный выше пример показывает, как считывать состояние входа, и использовать эту информацию для управления выходом.

Переменная val может содержать значение LOW или HIGH, в зависимости от состояния входа. Функция digitalWrite() задает состояние выхода в зависимости от переменной val.

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

Приведенный выше пример программы также зажигает и гасит светодиод в зависимости от состояния подключенной кнопки. Действия те же самые, но синтаксис программы немного другой. Можно использовать оба вышеупомянутых решения, в некоторых случаях проще применить первый пример, в других — второй.

Источник

Цифровые входы/выходы

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Нумерация пинов

Пины пронумерованы на плате как “цифровые” D* пины и аналоговые A* пины. К цифровым пинам мы будем обращаться просто по их номеру, т.е. D3 это просто 3. С аналоговыми пинами чуть сложнее:

Режимы работы пинов

Если со входом/выходом всё понятно, то с подтяжкой давайте разберёмся. В режиме входа пин микроконтроллера не подключен никуда и ловит из воздуха всякие наводки, получая практически случайное значение. Для задания пину “состояния по умолчанию” используют подтяжку резистором к земле или питанию. Вот режим INPUT_PULLUP включает встроенную в микроконтроллер подтяжку пина к питанию. Подробнее об этом, со схемами и примерами я рассказывал в начале вот этого видео урока.

Вывод цифрового сигнала

Цифровой пин в режиме выхода ( OUTPUT ) может генерировать цифровой сигнал, т.е. выдавать напряжение. Так как понятие “цифровой” обычно связано с двумя состояниями, 0 и 1, цифровой пин может выдать 0 или 1, точнее: сигнал низкого или высокого уровня. Сигнал низкого уровня это 0 Вольт, грубо говоря в этом состоянии пин подключается к GND микроконтроллера. Сигнал высокого уровня подключает пин к VCC микроконтроллера, то есть к питанию. Если вы вспомните урок по питанию платы, то поймёте, что сигнал высокого уровня на цифровом пине будет варьироваться в зависимости от того, как питается плата Arduino. При питании от источника 5V на пине будет 5V, при питании от USB с потерей на защитном диоде мы получим около 4.7 Вольт на цифровом пине в режиме выхода с высоким сигналом. Самый главный момент касательно цифровых пинов: микроконтроллер – это логическое устройство, которое создано для управления другими устройствами при помощи логических (цифровых) сигналов. Под словом логическое я подразумеваю не силовое, то есть питать что-то от микроконтроллера нельзя, за редким исключением. На картинке с распиновкой выше вы можете найти надпись “Absolute MAX per pin 40mA, recommended 20mA“. Это означает, что максимум можно снять с пина 40 миллиампер, а рекомендуется не больше 20 миллиампер. Поверьте, для микроконтроллера это очень много. В других микроконтроллерах ограничение по току на пин может составлять 5-10 мА. Также есть общее ограничение на ток с цифровых пинов – 200 мА: “Absolute MAX 200mA for entire package“. Эту информацию можно найти в любом официальном источнике информации об Arduino и микроконтроллере в целом, в том числе в даташите на микроконтроллер. Что произойдёт, если снять с пина больше, чем он может отдать? Всё очень просто – он сломается. Что будет, если снять с нескольких пинов больше, чем может отдать микроконтроллер в целом? Правильно – сгорит микроконтроллер. Поэтому ничего мощнее светодиода и маленькой пищалки к микроконтроллеру подключать нельзя. Никаких моторчиков, лампочек, нагревателей, мощных радио-модулей и прочего питать от цифровых пинов нельзя. Цифровые пины служат для подачи команд другим устройствам, например реле/транзисторам для коммутации нагрузок. Но об этом мы поговорим отдельно. Сейчас вернёмся к вопросу подачи цифрового сигнала: для этого у нас есть функция digitalWrite(pin, value) :

Пример, в котором пины инициализируются как выходы, и на них подаётся сигнал:

Перейдём к чтению цифрового сигнала в режиме INPUT

Чтение цифрового сигнала

Цифровой пин может “измерять” напряжение, но сообщить он может только о его отсутствии (сигнал низкого уровня, LOW ) или наличии (сигнал высокого уровня, HIGH ), причём отсутствием напряжения считается промежуток от 0 до

2.1V. Соответственно от

2.1V до VCC (до 5V) микроконтроллер считает за наличие сигнала высокого уровня. Таким образом микроконтроллер спокойно может работать с логическими устройствами, которые шлют ему высокий сигнал с напряжением 3.3V, он такой сигнал примет как HIGH.

Данный код будет выводить в порт сигнал на пине D5. Если подключить его проводом к VCC – получим 1, если к GND – получим 0.

Источник

Чтение цифрового входа и вывод результатов на монитор

Аппаратное обеспечение:

Электрическая цепь:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Соедините три провода с Arduino. Первые два (красный и черный) присоедините к двум длинным вертикальным рядам на краю макетной платы для получения доступа к 5 вольтам питания и земли. Третий вывод идет от цифрового вывода 2 к одному из выводов кнопки. Этот же вывод кнопки подсоединен через стягивающий резистор (10кОм) к земле. Второй вывод кнопки подсоединен к 5 вольтам питания.
При нажатии кнопки соединяются две точки цепи. Когда кнопка не нажата нет никакой связи между двумя ее выводами, так что вывод подключен к земле через стягивающий резистор и находится в состоянии LOW. При нажатии на кнопку устанавливается соединение между двумя выводами, подключается 5 вольт и вывод 2 переходит в состояние HIGH, или 1.
Если не использовать резистор и оставить вывод 2 неподключенным, то напряжение на нем будет изменяться хаотично. Это приведет к случайному формированию на выводе 2 напряжения высокого или низкого уровня. Поэтому необходим стягивающий резистор.

Схема:

какая команда используется для считывания значений с цифрового входа. Смотреть фото какая команда используется для считывания значений с цифрового входа. Смотреть картинку какая команда используется для считывания значений с цифрового входа. Картинка про какая команда используется для считывания значений с цифрового входа. Фото какая команда используется для считывания значений с цифрового входа

Первым делом нужно в функции настройки включить последовательную передачу данных между ПК и Arduino со скоростью 9600 бит в секунду следующей строкой:
Serial.begin(9600);

Далее инициализируем вывод 2. Он должен читать состояние кнопки, тобто быть настроенным как вход:
pinMode(2,INPUT);

Теперь, когда установки завершены, переходим к основному циклу вашего кода. Когда кнопка нажата, 5 вольт будут свободно проходить через цепь, а когда она не нажата вход будет соединен с землей через резистор 10 кОм. Это цифровой вход, а значит он может быть только во включенном состоянии (читается вашим Arduino как 1 или HIGH) или в выключенном состоянии (читается вашим Arduino как 0 или LOW). Промежуточных состояний не существует.
Первое что нужно сделать в основном цикле это создать переменную для хранения информации поступающей от кнопки. Поскольку сигнал, приходящий от кнопки может иметь только значения «1» или «0», вы можете использовать целочисленный тип данных int. Назовем эту переменную sensorValue и присвоим ей значение, равное значению считанному с входа 2. Вы можете сделать это с помощью следующей строки:
int sensorValue = digitalRead(2);

Как только Arduino считает значение на входе мы передадим его в ПК и выведем на экран как десятичное значение. Вы можете сделать это используя команду Serial.println(), как показано в следующей строке:
Serial.println(sensorValue);

Теперь, когда вы откроете ваш монитор последовательной передачи (Serial Monitor в среде Arduino), вы сможете увидеть последовательность нулей, когда кнопка разомкнута и последовательность единиц, когда кнопка замкнута.

Полный текст программы:

Читает состояние цифрового входа 2, выводит результат на монитор

// цифровой вход 2 присоединен к кнопке. Назовем его:

int pushButton = 2;

// проведем необходимые установки:

void setup() <

// инициализируем последовательную передачу данных со скоростью 9600 бит в секунду:

Serial.begin (9600);

// назначим вывод 2 входом:

pinMode (pushButton, INPUT);

void loop() <

// читаем значение на входе:

int buttonState = digitalRead(pushButton);

Serial.println (buttonState);

delay (1); // задержка для стабильного считывания

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *