const int buttonPin = 2; // Interrupt pin for button
volatile int risingEdges = 0;
volatile int fallingEdges = 0;
volatile unsigned long lastInterruptTime = 0; // Time of last interrupt
const unsigned long debounceDelay = 50; // Debounce delay in milliseconds
void countEdges() {
unsigned long currentTime = millis();
// Software debounce check
if (currentTime - lastInterruptTime > debounceDelay) {
if (digitalRead(buttonPin) == HIGH) {
risingEdges++;
} else {
fallingEdges++;
}
lastInterruptTime = currentTime;
}
}
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP); // Use internal pull-up resistor
// Attach interrupt to detect both RISING and FALLING edges
attachInterrupt(digitalPinToInterrupt(buttonPin), countEdges, CHANGE);
}
void loop() {
Serial.print("Rising Edges: ");
Serial.print(risingEdges);
Serial.print(" | Falling Edges: ");
Serial.println(fallingEdges);
delay(500); // Print every 500ms
}