#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/timer.h"
#define BUTTON_PIN 15 // GPIO para o botão
#define LED_PIN 10 // GPIO para o LED interno do Pico
volatile bool is_blinking = false;
volatile bool led_state = false;
repeating_timer_t timer;
// Callback do temporizador
bool timer_callback(repeating_timer_t *rt) {
if (is_blinking) {
led_state = !led_state;
gpio_put(LED_PIN, led_state);
}
return true; // Repetir o timer
}
// Função de callback para o botão
void button_isr(uint gpio, uint32_t events) {
is_blinking = !is_blinking; // Alterna o estado do piscar
if (!is_blinking) {
gpio_put(LED_PIN, false); // Desliga o LED se parar de piscar
}
}
config_button_led() {
// Configuração do LED
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_put(LED_PIN, false);
// Configuração do botão
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_up(BUTTON_PIN);
}
int main() {
stdio_init_all();
// Configuração do botão e do led
void config_button_led();
// Configuração da interrupção GPIO
gpio_set_irq_enabled_with_callback(BUTTON_PIN, GPIO_IRQ_EDGE_FALL, true, button_isr);
// Configuração do temporizador
add_repeating_timer_ms(500, timer_callback, NULL, &timer); // Callback a cada 500 ms
printf("Pressione o botão para alternar o piscar do LED!\n");
// Loop principal vazio
while (true) {
tight_loop_contents();
}
}
Loading
pi-pico-w
pi-pico-w