arduino+蜂鸣器制作生日快乐歌

1. 接线图


图片来自https://create.arduino.cc/projecthub/SURYATEJA/use-a-buzzer-module-piezo-speaker-using-arduino-uno-89df45

2. 找到do rui mi

在网上搜索一番,找到了,把它们存到数组里,后面七个是升一个八度的do ri mi,如果需要更高或者更低的音的频率,可以参考Arduino音乐代码《卡农》这篇文章;

int doremi[] = {262, 294, 330, 370, 392, 440, 494,         523, 587, 659, 698, 784, 880, 988} ; 

3. 简谱

然后找一张简谱,把音调和节拍都存起来,比如 1 记成 1, 升1记成8,八分音符记成1,四分音符记成2,以此类推。。不太懂简谱的同学可以参考这篇文章 https://bbs.huaweicloud.com/blogs/241123

4. 打完收工

int pinBuzzer = 9; //管脚D9连接到蜂鸣器模块的信号脚
// do(哆)、re(来)、mi(咪)、fa(发)、sol(唆)、la(拉)、si(西)
int doremi[] = {262, 294, 330, 370, 392, 440, 494, 523,587,659,698,784,880,988} ; 

int i = 0;
// 歌曲的音调
int happybirthday[] = {5,5,6,5,8,7,5,5,6,5,9,8,5,5,12,10,1,7,6,11,11,10,8,9,8};
// 节拍
int meter[] = {1,1,2,2,2,4, 1,1,2,2,2,4, 1,1,2,2,2,2,2, 1,1,2,2,2,4};
int len = sizeof(happybirthday) / sizeof(int);

void setup() {
  Serial.begin(9600);
  Serial.print("len ");
    Serial.println(len);
  pinMode(pinBuzzer, OUTPUT); //设置pinBuzzer脚为输出状态
}



void loop() {

  //用tone()函数发出频率为frequency的波形
  tone(pinBuzzer, doremi[happybirthday[i] - 1]);
  delay(meter[i] * 200); //等待1000毫秒
  noTone(pinBuzzer);//停止发声
  
  if(i == len - 1) {
    i = 0;
  } else {
    i += 1;
  }
}
posted @ 2022-06-26 18:21  饭特稠  阅读(2943)  评论(0编辑  收藏  举报