arduino有源蜂鸣器播放音乐
时间: 2025-02-09 22:10:29 AIGC 浏览: 115
### Arduino 控制有源蜂鸣器播放音乐
要使Arduino控制有源蜂鸣器播放音乐,可以采用`tone()`函数来实现不同频率的声音输出。对于有源蜂鸣器而言,其内部已经包含了振荡电路,在使用过程中只需要提供直流电压就能发出固定频率的声音;但是为了演奏不同的音符,则仍然需要借助于Arduino改变输入信号的时间长短即占空比模拟出高低变化的效果[^2]。
下面给出一段基于Arduino平台利用有源蜂鸣器播放简单旋律——《Twinkle Twinkle Little Star》的小程序:
```cpp
// 定义常量与变量
#define SPEAKER_PIN 8 // 将蜂鸣器连接至数字引脚8
int length = 16; // 歌曲长度(十六分之一拍)
char notes[] = "ccggaagffeeddc "; // 音符数组,“ ”代表休止符
int beats[] = {1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4, 0}; // 对应各音符持续时间的比例因子
int tempo = 300;
void setup() {
pinMode(SPEAKER_PIN, OUTPUT); // 设置扬声器为输出模式
}
void loop() {
for (int i = 0; i < length; ++i) {
int noteDuration = tempo / beats[i]; // 计算当前音符的实际时长
if (notes[i] == ' ') {
delay(noteDuration);
} else {
playTone(notes[i], noteDuration);
}
// 添加间隔静默期
int pauseBetweenNotes = noteDuration * 1.3;
delay(pauseBetweenNotes);
}
delay(1000); // 结束后等待一秒重播
}
void playTone(char note, int duration) {
char names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b'};
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014};
// 查找对应的频率并发声
for (int j = 0; j < sizeof(names)/sizeof(char); j++) {
if (names[j] == note) {
tone(SPEAKER_PIN, tones[j]);
break;
}
}
}
```
此段代码定义了一系列参数用于描述歌曲的信息,并通过循环遍历这些数据结构以顺序执行每一个音符的发音操作。当遇到空白字符时表示短暂停顿而不产生声音。此外还实现了辅助方法playTone(),负责接收单个字母形式表示的一个具体音高及其应该维持多长时间作为输入参数,进而调用内置API `tone()` 来驱动硬件完成实际发声动作[^3]。
阅读全文
相关推荐

















