arduino, счетчик нажатий через прерывание.

Electronik
Offline
Зарегистрирован: 14.03.2019

Всех приветствую.
Делаю счетчик количества нажатий на кнопку через прерывание.

01const byte btn_pin=2;
02unsigned long cnt=0;
03 
04void setup() {
05  Serial.begin(9600);
06  pinMode(btn_pin, INPUT_PULLUP);
07  attachInterrupt(digitalPinToInterrupt(btn_pin), counter, RISING);
08}
09 
10void loop() {
11}
12 
13void counter() {
14  cnt++;
15  Serial.println(cnt);
16}

Одно нажатие считает как несколько.
Подскажите, пожалуйста, что нужно исправить?
Благодарю за ответы.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Читать за дребезг контактов

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Electronik пишет:
Подскажите, пожалуйста, что нужно исправить?
Поставить задержку 0,05 секунды в обработчик прерывания. И это ни вк оем случае не delay. 

Electronik
Offline
Зарегистрирован: 14.03.2019

Счётчик нажатий без прерывания: 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
Счётчик нажатий с прерыванием:

01const byte btn_pin=2;
02unsigned long cnt=0;
03 
04void setup() {
05  Serial.begin(9600);
06  pinMode(btn_pin, INPUT_PULLUP);
07  attachInterrupt(digitalPinToInterrupt(btn_pin), counter, FALLING);
08}
09 
10void loop() {}
11 
12void 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
Благодарю всех за ответы, тема закрыта.

sadman41
Offline
Зарегистрирован: 19.10.2016

Запихивать в обработчик detach/attach совершенно бесмысленно.