linkdfrobot 发表于 2015-4-12 09:51:15

蜂鸣器奏乐配合LED灯闪烁(韩妮)

本帖最后由 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); //计算长度
}
void loop()
{ for(int x=0;x<length;x++)
{
   tone(tonepin,tune);
   digitalWrite(led,HIGH);
   delay(400*durt);
   digitalWrite(led,LOW);
   delay(100*durt);
   noTone(tonepin);
}
delay(2000);
}
输入代码后,我们就能听到蜂鸣器奏乐,看到LED在旁边“伴舞”了。下面我们来回顾一下这段代码。代码回顾首先我们需要了解各音调的频率,可参考下表:低音
音调1234567
频率147165175196221248278
中音



音调1234567
频率294330350393441495556
高音
音调1234567
频率5896617007868829901112
我们可以根据歌曲的简谱选取相应的频率
生日快乐歌简谱
我们知道一首歌出了音调还需要有节拍,因此我们要事先定义下节拍。这里规定一拍的时间为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);

sizeof 是一种内存容量度量的函数 这句代码是在计算长度

for(int x=0;x<length;x++) //for语句
{
   tone(tonepin,tune);
   digitalWrite(led,HIGH);//LED灯亮
   delay(400*durt);   //这里用来根据节拍调节延时,数据可根据实际情况更改调试,对于蜂鸣器来说即为响的时间,对于LED即为亮的时间
   digitalWrite(led,LOW);//LED灯灭
   delay(100*durt);//同上
   noTone(tonepin);
}
实物图

硬件回顾下面介绍一下有源蜂鸣器与无源蜂鸣器的区别。

[*]将蜂鸣器引脚朝天放置,会观察到有源蜂鸣器底面有层黑色胶布,而无源蜂鸣器底面则是绿色电路板,如下图:
有源:
无源


[*]有源蜂鸣器有长短脚,即正负极,而无源蜂鸣器两个引脚长度相同
[*]无源蜂鸣器的优点是频率可控,可发出多来米发索拉西的效果,无源蜂鸣器也较有源蜂鸣器便宜。而有源蜂鸣器程序控制方便
课后作业
用无源蜂鸣器奏出歌曲《两只老虎》 简谱如下

本篇由韩妮制作,罗亮指导
页: [1]
查看完整版本: 蜂鸣器奏乐配合LED灯闪烁(韩妮)