#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/timer.h"
const uint LED_PIN = 13; //Pino do LED
const uint BUTTON_PIN = 5; //Pino do botao
volatile int button_press_count = 0; //Contador de pressões do botão
volatile bool led_on = false; //Estado do LED
volatile bool led_active = false; //Indica seo LED está aceso
volatile int counter = 0;
volatile bool LED_ON_OFF = false;
bool repeating_timer_callback(struct repeating_timer *t){
static absolute_time_t last_press_time = 0;
static bool button_last_state = false;
bool button_pressed = !gpio_get(BUTTON_PIN); //Pressionado = LOW
if(button_pressed && !button_last_state &&
absolute_time_diff_us(last_press_time, get_absolute_time()) > 200000){//200 ms
printf("Contagem do botao: %d \n", button_press_count);
last_press_time = get_absolute_time();
button_last_state = true;
button_press_count++;
if(button_press_count==2){
printf("button_press_count==2\n");
led_active = true;
button_press_count = 0; //Resetar contador
button_last_state = false;
}
}else if(!button_pressed){
button_last_state = false;//Resetar estado quando o botão é liberado
}
return true; //Continuar o temporizador de repetição
}
void pisca_10_Hz(){
printf("LED piscando em 10 Hz\n");//Exibir mensagem quando o LED for ligado
for(int i=0;i<100;i++){
gpio_put(LED_PIN,true);
sleep_ms(20);
gpio_put(LED_PIN,false);
sleep_ms(80);
}
led_active = false;
printf("LED desligado\n"); //Exibir mensagem quando o LED for desligado
}
void setup(){
//Configurar o pino do LED como saída
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_put(LED_PIN, 0); //LED começa apagado
//Configurar o pno do botão como entrada com pull-up interno
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_up(BUTTON_PIN);
}
int main(){
stdio_init_all();
setup();
//Configurar o temporizador para verificar o estado do botão a cada 100 ms
struct repeating_timer timer;
add_repeating_timer_ms(100, repeating_timer_callback, NULL, &timer);
while(true){//O loop principal fica livre para outras tarefas
//Chama a funçao para piscar o LED em 10 Hz
if(led_active == true){
printf("button_press_count==2 do if()\n");
pisca_10_Hz();
}
//O temporizador cuida do controle do botão e do LED
tight_loop_contents();
}
}