/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
// Output buzzer sound signal on specific pin.
#include "pico/stdlib.h"
#include "hardware/pwm.h"
#include "hardware/clocks.h"
void buzzer_gpio_init(uint16_t gpio_pin){
gpio_set_function(gpio_pin, GPIO_FUNC_PWM);
}
void buzzer_play(uint16_t gpio_pin, uint16_t frequency){
uint16_t slice_num = pwm_gpio_to_slice_num(gpio_pin);
pwm_config config = pwm_get_default_config();
float div = (float)clock_get_hz(clk_sys) / (frequency * 9999);
pwm_config_set_clkdiv(&config, div);
pwm_config_set_wrap(&config, 10000);
pwm_init(slice_num, &config, true); // start the pwm running according to the config
pwm_set_gpio_level(gpio_pin, 5000); //connect the pin to the pwm engine and set the on/off level.
}
void buzzer_stop( uint16_t gpio_pin ){
uint16_t slice_num = pwm_gpio_to_slice_num(gpio_pin);
// Set the PWM stop
pwm_set_enabled(slice_num, false);
}
int main() {
const uint16_t gpio_buzzer_pin = 16;
buzzer_gpio_init(gpio_buzzer_pin);
while (true){
buzzer_play(gpio_buzzer_pin, 700);
sleep_ms(500);
buzzer_play(gpio_buzzer_pin, 560);
sleep_ms(500);
buzzer_play(gpio_buzzer_pin, 700);
sleep_ms(500);
buzzer_play(gpio_buzzer_pin, 560);
sleep_ms(500);
buzzer_stop(gpio_buzzer_pin);
sleep_ms(2000);
}
}