/*Toggling an led on each button press*/
#include <stdio.h>
#include <stdbool.h>
#include <pico/stdlib.h>
#include <hardware/gpio.h>
#include <pico/time.h>
#define BUTTON_PIN 14 // Define the input pin (button)
#define LED_PIN 25 // led pin
volatile bool led_state = false;
absolute_time_t last_interrupt_time;
// Interrupt handler function
void gpio_callback(uint gpio, uint32_t events) {
absolute_time_t now = get_absolute_time();
if (absolute_time_diff_us(last_interrupt_time, now) > 20000) { // 20ms debounce
if (gpio == BUTTON_PIN && (events & GPIO_IRQ_EDGE_FALL)) {
led_state = !led_state;
gpio_put(LED_PIN, led_state);
printf("pressed");
}
last_interrupt_time = now;
}
}
int main(){
stdio_init_all(); // Initialize stdio for printf output (via USB)
//Initilize GPIO button pin
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_up(BUTTON_PIN); //pushbutton is connected to GND
//Initialize GPIO Led pin
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_put(LED_PIN, led_state);
// Enable interrupt on falling edge
gpio_set_irq_enabled_with_callback(BUTTON_PIN, GPIO_IRQ_EDGE_FALL, true, &gpio_callback );
// Main loop can do other tasks
while (1) {
tight_loop_contents(); // low power idle
}
}