#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#define led 0
#define ButtonA 28
#define ButtonB 27
float freq = 10.0;
typedef struct {
uint8_t led_pin;
uint32_t blink_count;
bool led_state; // Estado atual do LED
} blink_data_t;
void init();
bool blink_led_callback(repeating_timer_t *t);
void blink_led(uint led_pin, float frequency, float duration);
int main() {
stdio_init_all();
init();
uint8_t bCount = 0;
bool pressed = false;
while (true) {
if (gpio_get(ButtonA)){
if (!pressed){
pressed = true;
bCount ++;
printf("%d", bCount);
}
if (bCount >= 5){
blink_led(led, freq, 10.0f);
bCount = 0;
}
sleep_ms(200); //evitar bounce
} else if (gpio_get(ButtonB)){
freq = 1.0;
} else {
pressed = false;
}
}
}
void init(){
gpio_init(led);
gpio_set_dir(led, GPIO_OUT);
gpio_init(ButtonA);
gpio_set_dir(ButtonA, GPIO_IN);
gpio_pull_down(ButtonA);
gpio_init(ButtonB);
gpio_set_dir(ButtonB, GPIO_IN);
gpio_pull_down(ButtonB);
}
// Callback do temporizador para piscar o LED
bool blink_led_callback(repeating_timer_t *t) {
blink_data_t *data = (blink_data_t *)t->user_data;
if (data->blink_count == 0) {
gpio_put(data->led_pin, false); // Garante que o LED fique apagado no final
return false; // Para o temporizador
}
data->led_state = !data->led_state; // Alterna o estado do LED
gpio_put(data->led_pin, data->led_state);
if (!data->led_state) {
data->blink_count--; // Decrementa apenas quando o LED é apagado
}
return true; // Continua o temporizador
}
// Função para iniciar o piscar do LED
void blink_led(uint led_pin, float frequency, float duration) {
static repeating_timer_t timer;
static blink_data_t data;
data.led_pin = led_pin;
data.blink_count = (uint32_t)(frequency * duration); // Número total de piscadas
data.led_state = false; // Inicialmente apagado
// Configura o GPIO
gpio_init(led_pin);
gpio_set_dir(led_pin, GPIO_OUT);
gpio_put(led_pin, false);
// Adiciona o temporizador com base na frequência
add_repeating_timer_ms(-1000 / (frequency * 2), blink_led_callback, &data, &timer);
}
Loading
pi-pico-w
pi-pico-w