快捷搜索:  汽车  科技

arduino蜂鸣器音乐起风了代码:蚁哥和你一起玩ARDUINO

arduino蜂鸣器音乐起风了代码:蚁哥和你一起玩ARDUINO#define NOTE_DL1 147 #define NOTE_DL2 165 #define NOTE_DL3 175 #define NOTE_DL4 196 #define NOTE_DL5 221 #define NOTE_DL6 248 #define NOTE_DL7 278#define NOTE_D0 -1 #define NOTE_D1 294 #define NOTE_D2 330 #define NOTE_D3 350 #define NOTE_D4 393 #define NOTE_D5 441 #define NOTE_D6 495 #define NOTE_D7 556来个既简单又经典的例子吧,看下面这个简谱:小星星简谱是不是很脍炙人口?我们就用ARDUINO 蜂鸣器来演奏它,来看代码:

改动tone()函数中的参数后会发现,蜂鸣器发出的声音会有不同的变化,声音的高低长短都会随着参数的变化而变化,这就意味着,我们可以用它来演奏一首乐曲了!

改变频率,就会改变声音的高低,改变延时参数,也就改变了音符的节拍。有个表供大家参考:

arduino蜂鸣器音乐起风了代码:蚁哥和你一起玩ARDUINO(1)

音符频率表

表里就是低、中、高音的1234567所对应的频率,我们再规定一拍音符的时间为1*T(T表示演奏一个音符持续的时间);半拍为0.5*T;1/4拍为0.25*T;1/8拍为0.125*T……,把每个音符按照规律的节拍播放出来,就是一首歌曲了。

来个既简单又经典的例子吧,看下面这个简谱:

arduino蜂鸣器音乐起风了代码:蚁哥和你一起玩ARDUINO(2)

小星星简谱

是不是很脍炙人口?我们就用ARDUINO 蜂鸣器来演奏它,来看代码:

#define NOTE_D0 -1 #define NOTE_D1 294 #define NOTE_D2 330 #define NOTE_D3 350 #define NOTE_D4 393 #define NOTE_D5 441 #define NOTE_D6 495 #define NOTE_D7 556

#define NOTE_DL1 147 #define NOTE_DL2 165 #define NOTE_DL3 175 #define NOTE_DL4 196 #define NOTE_DL5 221 #define NOTE_DL6 248 #define NOTE_DL7 278

#define NOTE_DH1 589 #define NOTE_DH2 661 #define NOTE_DH3 700 #define NOTE_DH4 786 #define NOTE_DH5 882 #define NOTE_DH6 990 #define NOTE_DH7 112 //以上部分是定义是把D调的每个音符和频率值对应起来

int tune[] = { NOTE_D1 NOTE_D1 NOTE_D5 NOTE_D5 NOTE_D6 NOTE_D6 NOTE_D5 NOTE_D4 NOTE_D4 NOTE_D3 NOTE_D3 NOTE_D2 NOTE_D2 NOTE_D1 NOTE_D5 NOTE_D5 NOTE_D4 NOTE_D4 NOTE_D3 NOTE_D3 NOTE_D2 NOTE_D5 NOTE_D5 NOTE_D4 NOTE_D4 NOTE_D3 NOTE_D3 NOTE_D2 NOTE_D1 NOTE_D1 NOTE_D5 NOTE_D5 NOTE_D6 NOTE_D6 NOTE_D5 NOTE_D4 NOTE_D4 NOTE_D3 NOTE_D3 NOTE_D2 NOTE_D2 NOTE_D1 };//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

float duration[]= {

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

};//这部分是整首曲子的接拍,也定义成数组(数组的个数和前面音符的个数是一样的,一一对应) int length;//这里定义一个变量,后面用来表示共有多少个音符

inttonePin=4;//蜂鸣器的控制管脚为D4

void setup()

{

pinMode(tonePin OUTPUT);//设置D4为输出模式

length = sizeof(tune)/sizeof(tune[0]);//得出tone数组里有多少个音符

}

void loop()

{

for(int x=0;x<length;x )//循环音符的次数

{

tone(tonePin tune[x]);//此函数依次播放tune序列里的数组,即每个音符

delay(400*duration[x]);//每个音符持续的时间,400就是前面提到的T

noTone(tonePin);//停止当前音符,进入下一音符

}

delay(5000);//等待5秒后,循环重新开始

}

把程序上传到主板,来听一下效果吧!

猜您喜欢: