#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
class GpioInterruptHandler {
public:
GpioInterruptHandler(gpio_num pin) : pin_(pin) {
// Initialize the Pico SDK
stdio_init_all();
gpio_init(pin);
gpio_set_dir(pin, GPIO_IN);
// Set up ISR for both rising and falling edges
gpio_set_irq_enabled_with_callback(pin, GPIO_IRQ_EDGE_RISE | GPIO_IRQ_EDGE_FALL, true, &GpioInterruptHandler::interruptHandler, this);
}
static void interruptHandler(void* arg) {
GpioInterruptHandler* instance = static_cast<GpioInterruptHandler*>(arg);
instance->handleInterrupt();
}
void handleInterrupt() {
if (gpio_get_irq_status(pin_) & GPIO_IRQ_EDGE_RISE) {
printf("Rising Edge Detected on GPIO %d\n", pin_);
} else {
printf("Falling Edge Detected on GPIO %d\n", pin_);
}
// Clear the interrupt flag
gpio_acknowledge_irq(pin_, GPIO_IRQ_EDGE_RISE | GPIO_IRQ_EDGE_FALL);
}
private:
gpio_num pin_;
};
int main() {
const gpio_num interruptPin = GPIO_NUM_2; // Change this to the GPIO pin of your choice
// Create an instance of GpioInterruptHandler for the specified GPIO pin
GpioInterruptHandler gpioHandler(interruptPin);
while (true) {
// Your main program logic can go here
}
return 0;
}