InputPullupSerial — внутренний подтягивающий резистор и Serial
Как использовать режим INPUT_PULLUP с функцией pinMode() для считывания кнопки через внутренний подтягивающий резистор Arduino.
InputPullupSerial — внутренний подтягивающий резистор и Serial
Этот урок показывает, как применять режим INPUT_PULLUP совместно с функцией pinMode(). Мы будем отслеживать состояние кнопки и передавать результаты через USB, устанавливая serial communication между Arduino и компьютером.
Дополнительно: когда на входе читается HIGH, встроенный светодиод на пине 13 загорается; когда LOW — гаснет.
Как это работает
Обычно при подключении кнопки к цифровому входу Arduino требуется внешний резистор, чтобы пин не «висел в воздухе» и не давал случайных значений. Однако в Arduino есть встроенные подтягивающие резисторы (pull-up), которые можно включить программно — режимом INPUT_PULLUP. В этом случае пин через внутренний резистор подтянут к 5 В и по умолчанию читает HIGH. Когда кнопка нажата и замыкает пин на GND, Arduino читает LOW.
Логика инвертирована относительно привычной: кнопка не нажата → 1, кнопка нажата → 0. Это важно учитывать в коде.
Необходимые компоненты
- Arduino Board
- Тактовая кнопка (momentary switch) или переключатель
- Макетная плата (breadboard)
- Соединительные провода
Схема подключения

Схема подключения: кнопка соединена с пином 2 и GND платы Arduino UNO на макетной плате.
Подключите два провода к плате Arduino. Чёрный провод соединяет GND с одной ногой кнопки. Второй провод идёт от цифрового пина 2 ко второй ноге кнопки.
Когда кнопка не нажата, цепь разомкнута. Внутренний подтягивающий резистор пина 2 удерживает его на уровне 5 В, поэтому Arduino читает HIGH. При нажатии кнопка замыкает пин на GND, и Arduino читает LOW.
Обратите внимание: внешний резистор здесь не нужен — всё обеспечивает внутренний pull-up. Это упрощает схему и уменьшает количество деталей.
Принципиальная схема

Принципиальная схема: кнопка (SWITCH / КНОПКА) подключена между пином 2 и GND платы Arduino UNO.
Код
В функции setup() первым делом запускаем последовательную связь на скорости 9600 бод:
Serial.begin(9600);
Затем настраиваем цифровой пин 2 как вход с включённым внутренним подтягивающим резистором:
pinMode(2,INPUT_PULLUP);
Пин 13 со встроенным светодиодом объявляем как выход:
pinMode(13, OUTPUT);
В основном цикле loop() объявляем переменную типа intdatatype с именем sensorValue и сразу присваиваем ей значение, считанное с пина 2:
int sensorValue = digitalRead(2);
Переменная sensorValue будет равна 1 (HIGH), если кнопка не нажата, и 0 (LOW), если нажата.
Печатаем это значение в Serial Monitor в десятичном формате (DEC):
Serial.println(sensorValue, DEC);
Когда вы откроете Serial Monitor в среде Arduino IDE, вы увидите поток значений: «1» — кнопка отпущена, «0» — кнопка нажата.
Светодиод на пине 13 будет гореть, когда переключатель HIGH, и гаснуть, когда LOW.
Типичные ошибки
- Перепутана логика. Помните:
INPUT_PULLUPинвертирует привычную логику. Кнопка нажата →LOW, отпущена →HIGH. Если светодиод ведёт себя «наоборот» — проверьте условие в коде. - Кнопка подключена к 5 В вместо GND. При
INPUT_PULLUPвторая нога кнопки должна идти именно наGND, иначе при нажатии вы получите конфликт напряжений. - Serial Monitor не открывается или показывает мусор. Убедитесь, что скорость в мониторе выставлена 9600 бод — такая же, как в
Serial.begin(9600). - Дребезг контактов. Механические кнопки могут давать несколько переключений за одно нажатие. Для простых демонстраций это не критично, но в реальных проектах стоит добавить программный или аппаратный антидребезг.
Как проверить результат
- Загрузите скетч на плату.
- Откройте Serial Monitor (Ctrl+Shift+M) и установите скорость 9600 бод.
- Не нажимая кнопку, убедитесь, что в мониторе идут
«1», а светодиод на пине 13 горит. - Нажмите и удерживайте кнопку — значения должны смениться на
«0», светодиод погаснет.
Где пригодится
Режим INPUT_PULLUP — стандартный приём в большинстве Arduino-проектов с кнопками и переключателями. Он избавляет от необходимости паять внешние резисторы и делает схему компактнее. Используется в клавиатурах, энкодерах, концевых выключателях и других устройствах, где нужно надёжно определять замыкание на землю.
Дополнительные материалы
Больше базовых уроков вы найдёте в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник языка программирования Arduino.