INPUT | INPUT_PULLUP | OUTPUT
Константы INPUT, INPUT_PULLUP и OUTPUT задают режим работы вывода в pinMode(): чтение сигнала, вход со встроенной подтяжкой или активный выход.
Полная статья
Описание
INPUT, INPUT_PULLUP и OUTPUT — три режима, которые передаются в pinMode(), чтобы сообщить микроконтроллеру, как использовать конкретный вывод. Выбор режима влияет не только на поведение программы, но и на физическое электрическое состояние контакта.
pinMode(2, INPUT);
pinMode(3, INPUT_PULLUP);
pinMode(13, OUTPUT);
INPUT
Когда вывод настроен как INPUT, он переходит в режим чтения: Arduino может определять, какой сигнал подаётся снаружи. Этот режим подходит для кнопок, цифровых датчиков и любых источников логического сигнала. Входной вывод практически не нагружает подключённую цепь.
Однако у незащищённого входа есть важная особенность: если он не подключён к чёткому источнику сигнала, его состояние становится непредсказуемым. Такой вход называют «плавающим» — digitalRead() будет возвращать то HIGH, то LOW хаотично, реагируя на наводки и помехи.
Чтобы вход всегда имел определённое состояние в отсутствие сигнала, используют резисторы:
- pull-up подтягивает вход к напряжению питания (
HIGH), пока кнопка не замкнёт его на землю; - pull-down удерживает вход у земли (
LOW), пока кнопка не подаст на него питание.
Обычно для этих целей берут резисторы около 10 кОм: они надёжно удерживают вход в заданном состоянии и не создают заметной лишней нагрузки на цепь.
INPUT_PULLUP
INPUT_PULLUP — это тот же режим входа, но с автоматически включённым внутренним подтягивающим резистором микроконтроллера. Внешний резистор в большинстве случаев уже не нужен: достаточно подключить кнопку между выводом и GND.
Важно понимать, что логика при таком подключении инвертируется по сравнению с интуитивно ожидаемой:
- Кнопка отпущена → вход читает
HIGH(вывод подтянут к питанию). - Кнопка нажата → вход читает
LOW(вывод замкнут на землю).
Это поведение поначалу кажется непривычным, но на практике INPUT_PULLUP упрощает схему и делает её надёжнее: меньше деталей, меньше ошибок при монтаже.
OUTPUT
В режиме OUTPUT вывод становится активным источником сигнала. Через digitalWrite() можно выставить на нём HIGH или LOW. Этот режим используют для управления светодиодами, реле через транзистор, передачи управляющих сигналов другим устройствам и построения простых цифровых интерфейсов.
Выводы ATmega способны отдавать или принимать ограниченный ток. В документации нередко упоминается максимум 40 мА на вывод, однако для стабильной работы лучше держаться заметно ниже этого предела и уточнять ограничения для конкретной платы.
Если нагрузка потребляет значительный ток — мотор, светодиодная лента, реле — подключайте её через транзистор, MOSFET, специализированный драйвер или готовый модуль реле. Прямое подключение мощной нагрузки к выводу Arduino может повредить микроконтроллер.
Практические замечания
- Никогда не соединяйте вывод, установленный в
HIGH, напрямую сGND— это короткое замыкание, которое может вывести плату из строя. - Не подавайте на вход напряжение ниже
GNDили выше напряжения питания платы: это выходит за допустимые пределы и может повредить микроконтроллер. - Для кнопок
INPUT_PULLUPудобнееINPUTс внешним резистором: схема проще, деталей меньше, а надёжность не страдает. - Всегда явно задавайте режим вывода в
setup()— не полагайтесь на состояние по умолчанию: это делает код понятнее и поведение схемы предсказуемым. - Если
digitalRead()возвращает нестабильные значения без видимой причины, первым делом проверьте, не оказался ли вход «плавающим» из-за отсутствия подтяжки.