Как подключить к Arduino кнопку
Кнопку к Arduino можно подключить двумя способами. Первый способ описан в комментарии к скетчу Button в меню Examples->Digital.
Схема:
В данном случае, когда кнопка не нажата, то её контакты разомкнуты, и на входе Digital 2
логический ноль. Если кнопку нажать, контакты замкнутся, и на входе Digital 2
появится напряжение +5В
, соответствующее логической единице.
Второй способ подключения отличается от первого тем, что кнопка подключается к земле, а резистор к источнику напряжения +5В
:
В данном случае резистор выполняет функцию подтягивающего (pull-up) резистора, "подтягивающего" напряжение на входе Digital 2
до уровня +5В
(логическая единица). При замыкании контактов кнопки потенциал на выводе Digital 2
становится равным потенциалу земли (0 Вольт), и таким образом на входе Digital 2
единицу сменяет логический ноль.
Можно заметить, что в первом случае резистор также выполняет функцию подтягивающего резистора, только подтягивает он напряжение на входе микроконтроллера не вверх (pull-up), а к земле (pull-down). Если бы резистора не было, то напряжение на входе "гуляло" бы, ловя статическое напряжение в атмосфере, как это происходит, если оставить вход Gate полевого транзистора не подключенным.
В коде скетча Button вызовом функцим pinMode()
с аргументом INPUT
вывод Digital 2
переводится в режим ввода, и вызовом функции digitalRead()
производится опрос текущего состояния кнопки.
Надо заметить, что в скетче Button не учитывается так называемый дребезг контактов, который проявляется в том, что при нажатии на кнопку контакты физически приближаются друг к другу, и на некотором расстоянии разность потенциалов на контактах начинает пробивать электрическое сопротивление воздуха. Происходит это очень быстро - кнопку вполне достаточно опрашивать с частотой в 32 Гц, в то время как функция loop()
без задержки вызывается возможно в тысячу, а то и в десятки тысяч раз чаще. Для сравнения - микроконтроллер Arduino, работая на частоте 16 МГц, может выполнить 32 раза в секунду по 500000 команд.
Несложно добавить в конце функции loop()
вызов функции delay()
для организации задержки в 31 мс
:
void loop() {
... // Код функции
delay(31);
}
Если использовать большое время задержки, например 3000 мс (3 сек.), то нажимая на кнопку можно заметить, как микроконтроллер не сразу реагирует на нажатия - кнопку приходится нажимать и ждать, пока сработает, потому что иначе он просто не замечает нажатия, будучи занят ожиданием окончания выполнения функции delay()
.
- Как подключить к Arduino светодиод
- Как управлять яркостью светодиода
- Как подключить к Arduino кнопку
- Как подключить к Arduino 8-омный динамик
- Как подключить к Arduino устройство с Android
- Как подключить к Arduino FPGA
- Как подключить к Arduino матричную клавиатуру
- Как подключить к Arduino семисегментный LED-индикатор
- Как подключить к Arduino LCD-дисплей