Estou tentando entender como funciona a interrupção e o tratamento do bounce no arduino.
escrevi este sketch
cpp code
volatile int state = HIGH;
const int BUTTON_PIN = 0;
const int LED_PIN = 13;
void setup() {
// init the serial
Serial.begin(300);
// init the led and button
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
attachInterrupt(0, ledOnOff, CHANGE);
//Define quando a interrupção será acionada.
//Abaixo segue as constantes predefinidas:
//1. LOW : aciona a interrupção sempre que o pino estiver baixo
//2. CHANGE: aciona a interrupção sempre que o pino muda de estado
//3. RISING: aciona a interrupção quando o pino vai de baixo para alto (LOW HIGH)
//4. FALLING: para acionar a interrupção quando o pino vai de alto para baixo (HIGH LOW)
//5. HIGH : aciona a interrupção sempre que o pino estiver alto
}
void ledOnOff(){
Serial.println(" estou dentro da interrupção");
static unsigned long lastMillis = 0;
unsigned long newMillis = millis();
if(newMillis - lastMillis < 50){
}
else{
state = !state;
lastMillis = newMillis;
digitalWrite(LED_PIN, state);
Serial.println(" estou saindo da interrupção");
}
}
void printone() {
Serial.println("print one.....");
}
void printtwo() {
Serial.println("print two.....");
}
void loop() {
Serial.println(" estou fora da interrupção");
delay(2);
printone();
printtwo();
}
o problema aqui, é que mesmo com a rotina de debounce , quando eu aperto e/ou solto um botão, a rotina de interrupção é chamada mais de uma vez. O certo seria a rotina de interrupção ser chamada uma únida vez. uma vez quando aperto o botão e outra quando solto o mesmo botão. O que estou fazendo de errado?