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)
|