arduino, счетчик нажатий через прерывание.
- Войдите на сайт для отправки комментариев
Чт, 14/03/2019 - 19:34
Всех приветствую.
Делаю счетчик количества нажатий на кнопку через прерывание.
01 | const byte btn_pin=2; |
02 | unsigned long cnt=0; |
03 |
04 | void setup () { |
05 | Serial .begin(9600); |
06 | pinMode(btn_pin, INPUT_PULLUP); |
07 | attachInterrupt(digitalPinToInterrupt(btn_pin), counter, RISING); |
08 | } |
09 |
10 | void loop () { |
11 | } |
12 |
13 | void counter() { |
14 | cnt++; |
15 | Serial .println(cnt); |
16 | } |
Одно нажатие считает как несколько.
Подскажите, пожалуйста, что нужно исправить?
Благодарю за ответы.
Читать за дребезг контактов
Счётчик нажатий без прерывания: http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA-%D0%BD%D0%B0%D0%B6%D0%B0%D1%82%D0%B8%D0%B9
Счётчик нажатий с прерыванием:
01
const
byte
btn_pin=2;
02
unsigned
long
cnt=0;
03
04
void
setup
() {
05
Serial
.begin(9600);
06
pinMode(btn_pin, INPUT_PULLUP);
07
attachInterrupt(digitalPinToInterrupt(btn_pin), counter, FALLING);
08
}
09
10
void
loop
() {}
11
12
void
counter() {
13
detachInterrupt(digitalPinToInterrupt(btn_pin));
14
cnt++;
15
Serial
.println(cnt);
16
while
(digitalRead(btn_pin)==LOW){}
17
attachInterrupt(digitalPinToInterrupt(btn_pin),counter,FALLING);
18
}
источник: https://www.cooking-hacks.com/documentation/tutorials/geiger-counter-radiation-sensor-board-arduino-raspberry-pi-tutorial
Благодарю всех за ответы, тема закрыта.
Запихивать в обработчик detach/attach совершенно бесмысленно.