прерывание через attachInterrupt криво работает
- Войдите на сайт для отправки комментариев
Вс, 04/01/2015 - 12:55
добрый день форумчане, сделал прерывание через attachInterrupt
код
const int buttonPin = 2; volatile int buttonState = 0; volatile int program=1; attachInterrupt(0, blink, CHANGE); void loop(){ blink(); } void blink(){ buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { if(program==2) {program=1;delay(10);} else{program++;delay(10);} } else {} switch (program) { case 1: blink_one_led(); break; case 2: white(); break; } }
проблема заключается в:
при нажатии на кнопку все работает корректно, но иногда я только дотрагиваюсь к кнопке, или к корпусу кнопки, не нажимая, и функция прерывания срабатывает. бывает и такое, что срабатывает сразу 2-3 раза, и тем самым перескакивает много режимов. что можно сделать с кнопкой, чтоб она срабатывала именно от нажатия, а не от наводок?
А зачем вы читаете состояние кнопки? Если прерывание инициировано - значит кнопка уже нажата.
Да и deley() внутри прерывания - чревато...
Да и вызов других функций из прерывания чреват...
А уж все вместе...
Я уже молчу про вызов обработчика прерывания в loop().