arduino 有源蜂鸣器放歌青花瓷代码
时间: 2024-09-12 22:04:53 浏览: 88
在Arduino上使用有源蜂鸣器播放《青花瓷》这首歌曲的旋律,需要先确定每个音符对应的频率,然后通过控制蜂鸣器输出对应频率的方波信号来发出音乐。以下是一个简单的示例代码:
```cpp
// 定义音符频率(单位:赫兹Hz)
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
// ... 其他音符
// 定义《青花瓷》旋律的音符和时长(每个数字代表一个音符,对应上面定义的频率)
int melody[] = {
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4,
// ... 其他音符
};
// 定义每个音符的持续时间:4 = 四分音符,8 = 八分音符等
int noteDurations[] = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
// ... 其他音符时长
};
void setup() {
// 初始化蜂鸣器引脚为输出模式
pinMode(buzzerPin, OUTPUT); // buzzerPin是蜂鸣器连接的Arduino引脚
}
void loop() {
// 遍历旋律数组
for (int thisNote = 0; thisNote < 11; thisNote++) {
// 计算音符持续时间的一半,为了获得方波的两个阶段
int noteDuration = 1000 / noteDurations[thisNote];
tone(buzzerPin, melody[thisNote], noteDuration); // 发出音符
// 设置音符之间的间隔为音符持续时间的1.30倍
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(buzzerPin); // 停止当前音符
}
// 歌曲播放完毕,暂停一段时间
delay(2000);
}
```
注意:
- 上面的代码是一个框架,需要根据实际的《青花瓷》旋律,填充完整的音符数组`melody`和对应的持续时间数组`noteDurations`。
- 音符频率和持续时间的定义可能需要根据实际歌曲的速度进行调整。
- `tone()`函数用于产生指定频率和持续时间的方波信号,而`noTone()`用于停止当前音符的输出。
阅读全文