#include "pico/stdlib.h"
#include "stdio.h"
#include "hardware/gpio.h"
#define button_pin 9
int pressCount = 0; // Contador de pressionamentos de botão
uint32_t ciclo;
static uint64_t now = 0;
static uint64_t time_last_press_btn = 0;
// Configura o LED para piscar em uma frequência específica usando contador
void led_hertz(int state_changes_per_second )
{
int start_time = to_ms_since_boot(get_absolute_time()); // pega o tempo em ms desde o inicio
state_changes_per_second = state_changes_per_second * 2; // considerar todas transiçoes do led
while (to_ms_since_boot(get_absolute_time()) - start_time < 1000)//enquanto dentro de 1s
{
ciclo = 1000 / state_changes_per_second ; // tempo de cada estado
gpio_put(3, 1);//liga led
sleep_ms(ciclo);// tempo do estado
gpio_put(3, 0); // desliga
sleep_ms(ciclo); // tempo do estado
}
}
bool debounce() {
uint64_t now = to_ms_since_boot(get_absolute_time());
if ((now - time_last_press_btn) >= 2) // se o tempo de agora menos ultima leitura maior que 2ms
{
time_last_press_btn = now;
return true;
}
return false;
}
void count()
{
if (!gpio_get(button_pin)) //recebe o oposto do estado do pino, se pressionado=0,logo, recebe 1
{
if (debounce())
{
pressCount++;
printf("Botão A pressionado. Contagem: %d\n", pressCount);
}
while (!gpio_get(button_pin))
{
sleep_ms(100);
}
}
if ( pressCount == 5 )
{
for (int i = 0; i <= 9; i++) //pisca 10s
{
printf("Luz vermelha apaga apaga em %d\n", 10-i);
led_hertz(10); //Pisca o LED a 10 Hz por 1s
}
pressCount = 0;// Reseta o contador
}
}
int main()
{
stdio_init_all();
time_last_press_btn = to_us_since_boot(get_absolute_time());
gpio_init(3); // inicia pino 3
gpio_set_dir(3, GPIO_OUT); // define como saida
gpio_init(button_pin); // inicia o pino def na linha 5
gpio_set_dir(button_pin, GPIO_IN); //setar o pino como entrada
gpio_pull_up(button_pin); //resistor interno de pullup(para nao confundir variaçoes na leitura)
while (1)
{
count();
sleep_ms(1);
}
}