Как подключить кнопку к Arduino и зачем нужен подтягивающий резистор?
Подключил кнопку к Arduino, читаю её через digitalRead, но значение скачет случайно даже когда я не нажимаю — то 1, то 0. В чём дело? И что за подтягивающий резистор, про который все говорят?
2 ответа
Это классическая проблема «висящего» (плавающего) входа. Когда кнопка не нажата, пин ни к чему не подключён, и на нём ловятся наводки — отсюда случайные 0 и 1.
Решение — подтягивающий резистор, который «прижимает» пин к известному уровню. Проще всего использовать встроенный в Arduino:
void setup() {
pinMode(2, INPUT_PULLUP); // включили внутренний подтягивающий резистор
}
void loop() {
if (digitalRead(2) == LOW) { // ВНИМАНИЕ: нажата = LOW!
// кнопка нажата
}
}
Важный момент: с INPUT_PULLUP логика переворачивается. Кнопку подключаешь между пином и GND. Когда НЕ нажата — читается HIGH (1). Когда нажата — LOW (0). Это сбивает новичков, но так делать удобнее всего (не нужен внешний резистор).
Если используешь не INPUT_PULLUP, а обычный INPUT, то подтягивающий резистор (обычно 10 кОм) надо ставить руками на макетке. Но честно — INPUT_PULLUP для кнопок почти всегда удобнее, на одну деталь меньше.