прерывание через 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().