Mbed平台基于stm32让蜂鸣器循环播放小星星的函数
时间: 2024-01-06 09:07:00 浏览: 96
STM32驱动蜂鸣器播放歌曲
可以使用以下代码在Mbed平台上实现基于STM32让蜂鸣器循环播放小星星的函数:
```c++
#include "mbed.h"
// 定义蜂鸣器引脚
DigitalOut buzzer(PB_10);
// 定义小星星歌曲的音符频率和时长
const int notes[] = {262, 262, 392, 392, 440, 440, 392, 0, 349, 349, 330, 330, 294, 294, 262, 0, 392, 392, 349, 349, 330, 330, 294, 0, 392, 392, 349, 349, 330, 330, 294, 0, 262, 262, 392, 392, 440, 440, 392, 0, 349, 349, 330, 330, 294, 294, 262, 0};
const int durations[] = {4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2};
// 播放小星星
void playTwinkle() {
for (int i = 0; i < sizeof(notes)/sizeof(notes[0]); i++) {
if (notes[i] == 0) { // 休止符
buzzer = 0;
} else {
buzzer.period_us(1000000 / notes[i]); // 设置频率
buzzer = 0.5; // 设置占空比
}
wait(durations[i] * 0.25); // 等待
buzzer = 0; // 停止播放
wait(0.05); // 延时
}
}
int main() {
while (1) {
playTwinkle(); // 循环播放小星星
wait(1); // 停顿一秒钟
}
}
```
在上面的代码中,我们使用了`DigitalOut`类来定义了蜂鸣器的引脚,并通过`period_us()`方法设置了蜂鸣器的频率,通过设置`buzzer`的值实现了蜂鸣器的占空比。我们定义了两个数组`notes`和`durations`来存储小星星歌曲的音符频率和时长,然后在`playTwinkle()`函数中,用一个循环遍历这两个数组,实现了小星星歌曲的播放。最后,在`main()`函数中,我们通过`while(1)`循环和`wait()`方法实现了小星星歌曲的循环播放。
阅读全文