標題:
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 所以拍子只能是正整數(shù)
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,將音符轉(zhuǎn)換成信號
playNote(speakerPin,notes[i], beats[i] * tempo);
}
delay(tempo/10); // 每個音符之間的間隔
}
}
void playNote(int OutputPin, char note, unsigned long duration) {
// 音符字元與對應的頻率由兩個數(shù)組表示
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 () 頻率後會馬上接著執(zhí)行下個指令,不會等聲音播完,導致?lián)艹龅穆曇艋旌隙鴣y掉
delay(duration);
noTone(OutputPin);
}
}
}
復制代碼
所有資料51hei提供下載:
PWM_with_buzzer.rar
(3 KB, 下載次數(shù): 19)
2018-8-27 23:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
佐天淚子
時間:
2021-5-15 11:57
所以這是pwm控制的嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1