标题:
Arduino使用pwm控制蜂鸣器的源程序
[打印本页]
作者:
perfectlove
时间:
2018-8-27 23:12
标题:
Arduino使用pwm控制蜂鸣器的源程序
arduino使用pwm控制蜂鸣器,分别播放1234567和小星星
Arduino源程序:
int speakerPin = 2;
char notes[] = "cdefgabC ";// 依照简谱的順序,填入代表的音符,空白代表休止符
unsigned long beats[] = {1,1,1,1,1,1,1,1}; // 決定每個音阶的拍子,注意这里用 unsigned long 所以拍子只能是正整數
int length = sizeof(notes); // 利用 sizeof(),算出总共要多少音符
int tempo = 300;// 決定一拍多长,這里一拍 300 ms
void setup() {
pinMode(speakerPin, OUTPUT);
}
void loop() {
for (int i = 0; i < length; i++) { // 利用 for 來播放我們设定的歌曲,一個音一個音播放
// 如果是空白的話,不播放音乐
if (notes[i] == ' ') {
delay(beats[i] * tempo); // rest
} else {
// 呼叫 palyNote() 這个 function,将音符转换成信号
playNote(speakerPin,notes[i], beats[i] * tempo);
}
delay(tempo/10); // 每個音符之間的间隔
}
}
void playNote(int OutputPin, char note, unsigned long duration) {
// 音符字元与对应的频率由两个数组表示
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 261, 294, 330, 349, 392, 440, 494, 523 };
// 播放音符對應的頻率
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
tone(OutputPin,tones[i], duration);
//下方的 delay() 及 noTone (),測試過後一定要有這兩行,整體的撥放出來的東西才不會亂掉,可能是因為 Arduino 送出tone () 頻率後會馬上接著執行下個指令,不會等聲音播完,導致撥出的聲音混合而亂掉
delay(duration);
noTone(OutputPin);
}
}
}
复制代码
所有资料51hei提供下载:
PWM_with_buzzer.rar
(3 KB, 下载次数: 19)
2018-8-27 23:12 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
佐天泪子
时间:
2021-5-15 11:57
所以这是pwm控制的吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1