← Все вопросы

Зачем нужны pull-up и pull-down резисторы для кнопки?

Задан 17 месяцев назад1.1к просмотров2 ответа
8

Подключил кнопку к Arduino, а пин выдаёт случайные значения, пока кнопку не нажму. Все пишут про подтягивающий резистор (pull-up/pull-down). Зачем он нужен для кнопки и как работает?

2 ответа

11
✓ Принятый ответ — помог автору

Проблема в том, что цифровой вход не любит оставаться «висящим в воздухе». Когда кнопка не нажата, пин ни к чему не подключён, и он ловит наводки и помехи — отсюда случайные 0 и 1. Это называется «плавающий вход».

Подтягивающий резистор задаёт пину чёткое состояние, когда кнопка отпущена:

  • Pull-up (подтяжка к плюсу). Резистор соединяет пин с +5В. Пока кнопка не нажата, пин читается как HIGH (1). Кнопка соединяет пин с GND, при нажатии пин становится LOW (0).
  • Pull-down (подтяжка к земле). Резистор соединяет пин с GND. Отпущена → пин LOW (0), нажата (соединяет с +5В) → HIGH (1).

Значение резистора обычно 10 кОм: достаточно большое, чтобы не было лишнего тока, но достаточно «сильное», чтобы задать уровень.

Хорошая новость: в Arduino есть встроенные подтягивающие резисторы. Не нужен внешний — просто напиши pinMode(пин, INPUT_PULLUP). Тогда отпущенная кнопка даёт HIGH, нажатая — LOW (логика инвертируется, это нормально).

Ещё момент: механические кнопки «дребезжат» — при нажатии дают несколько быстрых ложных срабатываний. Это лечат программно (задержка после нажатия) или конденсатором, но это уже отдельная тема — debounce.

4

Если коротко: без подтяжки вход «болтается» и ловит помехи, поэтому показания случайные. Резистор (или встроенный INPUT_PULLUP) держит чёткий уровень, когда кнопка не нажата.

Самый простой путь на Arduino: pinMode(2, INPUT_PULLUP), кнопку между пином 2 и GND. Тогда digitalRead вернёт HIGH в покое и LOW при нажатии. Никаких внешних резисторов паять не надо.

Ваш ответ

, чтобы ответить на вопрос.