Arduino IDE имеет набор предопределенных констант, которые определяют состояния ввода/вывода и логические значения. Они облегчают написание программ и анализ написанного кода.
Каждая предопределенная константа имеет свой цифровой аналог, и при этом они могут взаимозаменять друг друга. Преимуществом использования констант заключается в их удобочитаемости и уникальности в коде.
Ноль можно определить как значение (число) или состояние вход/выход вывода. Термин «LOW» четко указывает, что это состояние входа/выхода.
Константа true и false
- true — истина. Аналогом может быть любое число, отличное от нуля.
- false — ложь. Аналогом может быть ноль.
Константа HIGH и LOW
HIGH и LOW определяют состояния цифровых выводов системы.
- HIGH – высокое состояние.
- LOW – низкое состояние.
В случае, когда вывод определен как выход, то при установке HIGH — на выходе мы получим сигнал логической единицы (напряжение близкое к напряжению питания), а при установке LOW – на выходе у нас будет логический ноль (напряжение близкое к нулю).
В случае, когда вывод определен как вход — при чтении входного сигнала, все что выше ~3В (при питании от 5В) будет HIGH, все что ниже LOW.
Константа INPUT, INPUT_PULLUP и OUTPUT
Константы INPUT, INPUT_PULLUP и OUTPUT позволяют настраивать системные выводы в качестве входов или выходов.
- INPUT устанавливает вывод в качестве входа.
- OUTPUT устанавливает вывод в качестве выхода.
Перед чтением данных с контакта его необходимо определить в качестве входа. В ситуации, когда к определенному контакту подключена система вывода (например, светодиод), прежде чем устанавливать на нем высокий или низкий уровень, необходимо такой контакт определить как выход.
В основном системные выводы определяются как входы или выходы в функции setup(). В особых случаях определение выполняется в функции loop(). Если определенный вывод постоянно должен быть входом (выходом), то мы определяем его в функции setup().
Иногда бывает так, что один и тот же вывод необходимо попеременно переводить из состояния входа в состояние выхода и наоборот, в этом случае определение вывода происходит (перед чтением/записью данных) в конкретной функции. Примером этому может служить двунаправленная связь с термометром DS1820 по шине 1-Wire.
Особый случай представляет собой константа INPUT_PULLUP. Данная константа позволяет подключить к входу подтягивающий резистор.
Для чего это нужно? Читая данные входа мы получим логический ноль при замыкании контакта на «землю» и логическую единицу при замыкании его с плюсом питания (5В).

Когда контакт не подключен ни к «земле» и ни к источнику питания, возникает переходное состояние, которое чаще всего интерпретируется как логический ноль (но не всегда).
И если вы хотите прочитать состояние кнопки, которая замыкается на «землю» (обычная электронная практика), то может возникнуть проблема интерпретации данных. Так как при не замкнутой кнопке мы имеем переходное состояние — скорее логический ноль.
Поэтому подключение подтягивающего резистора к плюсу питания приводит к тому, что при разомкнутых контактах кнопки на входе будет четкая логическая единица.
Дополнительные сведения об использовании предопределенных констант смотрите в следующих статьях по описанию digitalWrite() и pinMode().
