Цифровые порты

## Что такое цифровые порты в Arduino?

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

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

Количество цифровых портов в:

- Arduino Uno - 14

- Arduino Nano - 14

- Arduino Mega - 54

## Порты ввода/вывода

### Свойства порта вводы/вывода (pin), сконфигурированного как порт ввода

Сконфигурированные порты ввода-вывода в качестве порта вывода характеризуются состоянием с низким импедансом. Они могут пропускать большой ток, быть его источником и потребителем.

Сила тока достигает 40 мА, что вполне достаточно для питания светодиода с последовательным резистором. С другой стороны этого явно мало для подключения реле, компактных двигателей или соленоидов.

Другой особенностью портов является необходимость избегать коротких замыканий. В подобной ситуации отключается цифровой вывод, несмотря на то, что сама схема продолжит функционировать. Если не используются датчики или реле с высоким потреблением энергии, лучше подключать их к платформе через резисторы 470 Ом или 1 кОм..

### Подтягивающие (нагрузочные) резисторы

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

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

Подтягивающий резистор пропускает ток достаточный для того, чтобы слегка светился светодиод подключенный к выводу, работающему как порт ввода. Также легкое свечение светодиодов означает то, что при программировании вывод не был настроен как порт вывода в функции pinMode().Особенностью 13-ого вывода микросхемы  является подключение к нему резистора и светодиода.

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

## Функции работы с цифровыми портами Arduino

Функции Arduino, связанные с цифровыми линиями, следующие: pinMode(), digitalRead(), digitalWrite().

### Функция pinMode()

Функция pinMode (pin\_number, mode): Поскольку цифровые линии Arduino могут использоваться для ввода или вывода, вы должны сначала сконфигурировать контакты, которые вы собираетесь использовать для цифрового ввода-вывода. Здесь pin\_number это номер контакта, который вы хотите настроить. Режим mode должен принимать одно из трех значений: INPUT, OUTPUT, INPUT\_PULLUP.

-Режим pinNPUT определяет высокоимпедансное состояние пина для работы с внешними источниками сигналов. Другими словами, в этом состоянии вы можете подключить практически любую нагрузку, потому что к входу неявным образом подключается высокоомный резистор.

-В режиме pinOUTPUT Arduino поддерживает пин в низкоимпедансном состоянии, при котором на внешнее устройство выдается максимально возможный ток (плата, по сути, становится  источником тока). В этом режиме обычно работают пины Arduino с подключенными светодиодами, сервоприводами (маломощными), реле, драйверами двигателей и другими внешними устройствами, являющимися для Arduino внешними.  Для установки пина в режим OUTPUT нужно использовать следующую команду: pinMode(<номер порта>, OUTPUT).

-В режиме INPUT\_PULLUP пин работает в режиме входа, но Arduino неявно для нас подключает к входной цепи внутренний подтягивающий резистор. При этом поступление сигнала с датчика будет «инвертироваться», т.е. высокий уровень будет приводить к нулю на входе, низкий, наоборот, оставит на пине высокое напряжение.

Режим INPUT\_PULLUP широко используется при работе с кнопками в Arduino. В ненажатом состоянии, подключенная к пину, кнопка создает неопределенное состояние (а провод, ведущий к Arduino выступает в роли своеобразной антены, усиливающей все наводки). Для исправления ситуации в схему добавляют подтягивающий резистор. Использование команды pinMode с параметром INPUT\_PULLUP позволяет обойтись без дополнительного внешнего сопротивления, используя внутренний резистор Arduino.

### Функция digitalWrite()

Функция digitalWrite(pin\_number,value): Эта функция записывает цифровое значение в регистр линии. Аргумент pin\_number определяет номер этой линии, а value это выходное значение, то есть HIGH или LOW.

### Функция digitalRead()

Функция digitalRead(pin\_number): Эта функция считывает цифровое значение с линии под номером pin\_number. Она возвращает одно из двух значений: HIGH или LOW.

.

###