const byte ledPin=6;
const byte interruptPin=2;
volatile bool buttonFlag=false;
volatile bool buttonStable=false;
const long debounceTime=100; //debouncing time, ms
volatile unsigned long prevMillis;
void setup() {
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
pinMode(interruptPin,INPUT_PULLUP);
digitalWrite(ledPin,LOW);
attachInterrupt(digitalPinToInterrupt(interruptPin),buttonISR,CHANGE);
}
void loop() {
delay(500);
if (buttonFlag) {
digitalWrite(ledPin,HIGH);
delay(10);
digitalWrite(ledPin,LOW);
buttonFlag=false;
}
}
void buttonISR() {
if((long)(millis()-prevMillis)>=debounceTime) {
prevMillis=millis(); //same value; millis does not advance during interrupts
buttonFlag=true;
}
}