#include <stdio.h>
#include <time.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "hardware/pwm.h"
#include "hardware/clocks.h"
#define BUZZER_PIN 21
//frequência audível humano de 20 a 20000Hz
#define BUZZER_FREQUENCY 200
#define BUTTON_PIN 12
#define LED_PIN 2
//função para inicializar PWM no buzzer
void pwm_buzzer(uint pin){
//defina a função PWM no pino pin
gpio_set_function(pin, GPIO_FUNC_PWM);
//obtem o slice do PWM associado ao pino
uint slice_num = pwm_gpio_to_slice_num(pin);
//definir a frequencia do sinal PWM
pwm_config config = pwm_get_default_config();
pwm_config_set_clkdiv(&config, clock_get_hz(clk_sys) / (BUZZER_FREQUENCY * 4096));
pwm_init(slice_num, &config, true);
//Inicia o PWM em nível baixo
pwm_set_gpio_level(pin, 0);
}
//função para emitir o beep
void beep(uint pin, uint duration_ms){
//obtem o slice do PWM associado ao pino
uint slice_num = pwm_gpio_to_slice_num(pin);
//duty cyclo em 50%. 100% seria 4096
pwm_set_gpio_level(pin, 2048);
sleep_ms(duration_ms);
// Desativar o sinal PWM (duty cycle 0)
pwm_set_gpio_level(pin,0);
sleep_ms(100); //pausa 100ms
}
int main() {
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
//inicialização do pino do botão
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
//habilitar função do resistor pull-up
gpio_pull_up(BUTTON_PIN);
//inicialização do pino de buzzer
gpio_init(BUZZER_PIN);
gpio_set_dir(BUZZER_PIN, GPIO_OUT);
//chamada de função para inicializa o buzzer
pwm_buzzer(BUZZER_PIN);
time_t tempo = time(NULL);
while(true){
//lógica para acionar o buzzer quando o botão for acionado
if (gpio_get(BUTTON_PIN) == 0){
beep(BUZZER_PIN, 1000); //função para acionar o buzzer e definir tempo de espera
gpio_put(LED_PIN, true);
} else{
gpio_put(LED_PIN, false);
//printf(ctime(&tempo));
}
}
return 0;
}