本帖最后由 linkdfrobot 于 2015-4-12 10:26 编辑
经过报警器项目的学习,我们对蜂鸣器有了初步认识。那么我们能不能通过改变蜂鸣器的频率,奏出好听的歌曲呢。下面我以生日快乐歌为例,介绍怎样让蜂鸣器奏出歌曲,且用一个LED灯闪烁表现节奏。 所需元件: 1一个蜂鸣器 一个LED灯 一个220欧姆电阻 导线若干 硬件连接 输入代码
- #define L5 441
- #define L6 495
- #define L7 556
-
- #define M1 589
- #define M2 661
- #define M3 700
- #define M4 786
- #define M5 882
- //列出所需音调的频率
-
- #define WHOLE 1
- #define HALF 0.5
- #define QUARTER 0.25
- //列出所有节拍
-
- int tune[]= // 根据简谱列出各频率
- {
- L5,L5,L6,L5,
- M1,L7,
- L5,L5,L6,L5,
- M2,M1,
- L5,L5,M5,M3,
- M1,L7,L6,
- M4,M4,M3,M1,
- M2,M1
- };
- float durt[]= //根据简谱列出各节拍
- {
- 0.5,0.5,1,1,
- 1,1+1,
- 0.5,0.5,1,1,
- 1,1+1,
- 0.5,0.5,1,1,
- 1,1,1,
- 0.5,0.5,1,1,
- 1,1+1,
- } ;
- int length;
- int tonepin=5;//用五号接口
- int led=1;
- void setup()
- {
- pinMode(led,OUTPUT);
- pinMode(tonepin,OUTPUT);
- length=sizeof(tune)/sizeof(tune[0]); //计算长度
- }
- void loop()
- { for(int x=0;x<length;x++)
- {
- tone(tonepin,tune[x]);
- digitalWrite(led,HIGH);
- delay(400*durt[x]);
- digitalWrite(led,LOW);
- delay(100*durt[x]);
- noTone(tonepin);
- }
- delay(2000);
- }
复制代码
输入代码后,我们就能听到蜂鸣器奏乐,看到LED在旁边“伴舞”了。下面我们来回顾一下这段代码。 代码回顾 首先我们需要了解各音调的频率,可参考下表: 低音 中音
高音 我们可以根据歌曲的简谱选取相应的频率
生日快乐歌简谱 我们知道一首歌出了音调还需要有节拍,因此我们要事先定义下节拍。 这里规定一拍的时间为1,半拍为0.5,以此类推。
接下来,我们用定义好的内容列出频率和节拍- #define L5 441
- #define L6 495
- #define L7 556
-
- #define M1 589
- #define M2 661
- #define M3 700
- #define M4 786
- #define M5 882
- //列出所需音调的频率
-
- #define WHOLE 1
- #define HALF 0.5
- #define QUARTER 0.25
- //列出所有节拍
-
- int tune[]= // 根据简谱列出各频率
- {
- L5,L5,L6,L5,
- M1,L7,
- L5,L5,L6,L5,
- M2,M1,
- L5,L5,M5,M3,
- M1,L7,L6,
- M4,M4,M3,M1,
- M2,M1
- };
- float durt[]= //根据简谱列出各节拍
- {
- 0.5,0.5,1,1,
- 1,1+1,
- 0.5,0.5,1,1,
- 1,1+1,
- 0.5,0.5,1,1,
- 1,1,1,
- 0.5,0.5,1,1,
- 1,1+1,
- } ;
复制代码
以上代码做的就是这些准备工作,下面进入我们的主题。 我们看到有一句代码
- length=sizeof(tune)/sizeof(tune[0]);
-
- sizeof 是一种内存容量度量的函数 这句代码是在计算长度
-
- for(int x=0;x<length;x++) //for语句
- {
- tone(tonepin,tune[x]);
- digitalWrite(led,HIGH);//LED灯亮
- delay(400*durt[x]); //这里用来根据节拍调节延时,数据可根据实际情况更改调试,对于蜂鸣器来说即为响的时间,对于LED即为亮的时间
- digitalWrite(led,LOW);//LED灯灭
- delay(100*durt[x]);//同上
- noTone(tonepin);
- }
复制代码
实物图 硬件回顾 下面介绍一下有源蜂鸣器与无源蜂鸣器的区别。
- 将蜂鸣器引脚朝天放置,会观察到有源蜂鸣器底面有层黑色胶布,而无源蜂鸣器底面则是绿色电路板,如下图:
有源: 无源
- 有源蜂鸣器有长短脚,即正负极,而无源蜂鸣器两个引脚长度相同
- 无源蜂鸣器的优点是频率可控,可发出多来米发索拉西的效果,无源蜂鸣器也较有源蜂鸣器便宜。而有源蜂鸣器程序控制方便
课后作业
用无源蜂鸣器奏出歌曲《两只老虎》 简谱如下
本篇由韩妮制作,罗亮指导
|