← Все вопросы

Как подключить кнопку к Arduino и зачем нужен подтягивающий резистор?

Задан 23 месяца назад263 просмотров2 ответа
9

Подключил кнопку к Arduino, читаю её через digitalRead, но значение скачет случайно даже когда я не нажимаю — то 1, то 0. В чём дело? И что за подтягивающий резистор, про который все говорят?

2 ответа

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

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

Решение — подтягивающий резистор, который «прижимает» пин к известному уровню. Проще всего использовать встроенный в Arduino:

void setup() {
  pinMode(2, INPUT_PULLUP); // включили внутренний подтягивающий резистор
}

void loop() {
  if (digitalRead(2) == LOW) {  // ВНИМАНИЕ: нажата = LOW!
    // кнопка нажата
  }
}

Важный момент: с INPUT_PULLUP логика переворачивается. Кнопку подключаешь между пином и GND. Когда НЕ нажата — читается HIGH (1). Когда нажата — LOW (0). Это сбивает новичков, но так делать удобнее всего (не нужен внешний резистор).

5

Если используешь не INPUT_PULLUP, а обычный INPUT, то подтягивающий резистор (обычно 10 кОм) надо ставить руками на макетке. Но честно — INPUT_PULLUP для кнопок почти всегда удобнее, на одну деталь меньше.

Ваш ответ

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