#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/time.h"
const uint pino_led = 12;
const uint botao = 6;
static volatile int a = 0;
static void gpio_irq_handler(uint gpio, uint32_t events);
bool debounccing() {
static uint64_t ultimo_tempo = 0;
uint64_t agora = time_us_64();
if (agora - ultimo_tempo < 300000)
return false;
ultimo_tempo = agora;
return true;
}
void gpio_irq_handler(uint gpio, uint32_t events) {
if (!debounccing())
return;
a++;
printf("Contador: %d\n", a);
}
void piscar_led() {
printf("10 segundos...\n");
uint64_t tempo_final = time_us_64() + 10 * 1000000;
while (time_us_64() < tempo_final) {
gpio_put(pino_led, true);
sleep_ms(100);
gpio_put(pino_led, false);
sleep_ms(100);
}
printf("Fim.\n");
a = 0;
}
int main() {
stdio_init_all();
gpio_init(pino_led);
gpio_set_dir(pino_led, GPIO_OUT);
gpio_put(pino_led, false);
gpio_init(botao);
gpio_set_dir(botao, GPIO_IN);
gpio_pull_up(botao);
gpio_set_irq_enabled_with_callback(botao, GPIO_IRQ_EDGE_FALL, true, &gpio_irq_handler);
while (true) {
if (a >= 5) {
piscar_led();
}
sleep_ms(100);
}
}