#include "pico/stdlib.h"
//#include "Timer.h"
#define BUTTON_PIN 5 //15 // Pino do botão A (GPIO 15)
#define LED_PIN 11 //14 // Pino do LED (GPIO 14)
volatile int button_press_count = 0; // Contador de pressões do botão
volatile bool led_on = false; // Estado do LED
absolute_time_t led_end_time; // Tempo para desligar o LED após 10 segundos
//Timer timer; // Temporizador para contar as pressões
// Função para acionar o LED com frequência de 10 Hz
void blink_led_10hz() {
static bool led_state = false;
if (time_reached(led_end_time)) {
// Desliga o LED após 10 segundos
gpio_put(LED_PIN, 0);
led_on = false;
} else {
// Pisca o LED com 10 Hz
if (led_state) {
gpio_put(LED_PIN, 0); // Apaga o LED
} else {
gpio_put(LED_PIN, 1); // Acende o LED
}
led_state = !led_state;
}
sleep_ms(100);
}
// Função de interrupção para detectar pressões do botão
// (Você precisa considerar o "quicar" do botão)
void button_isr(uint gpio, uint32_t events) {
if (gpio == BUTTON_PIN) {
button_press_count++; // Incrementa o contador de pressões do botão
if (button_press_count == 5) {
// Quando o botão for pressionado 5 vezes, começa a piscar o LED
led_on = true;
led_end_time = make_timeout_time_ms(10000); // Tempo para desligar após 10 segundos
button_press_count = 0; // Reinicia o contador de pressões
}
}
}
int main() {
// Inicializa o Raspberry Pi Pico W
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_up(BUTTON_PIN); // Resistor de pull-down no botão
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT); // Configura o pino do LED como saída
// Configura a interrupção para o botão
gpio_set_irq_enabled_with_callback(BUTTON_PIN, GPIO_IRQ_EDGE_FALL, true, &button_isr);
// Loop principal
while (true) {
if (led_on) {
blink_led_10hz(); // Chama a função para piscar o LED
}
sleep_ms(50); // Atraso para não sobrecarregar o processador
}
return 0;
}