该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
送一首歌,张雨生的《大海》。
#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 373
#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
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625
int tune[] =
{
NOTE_D1, NOTE_D2, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,
NOTE_D2, NOTE_D1, NOTE_D4, NOTE_D4, NOTE_D5, NOTE_D4,
NOTE_D2, NOTE_D4, NOTE_D5, NOTE_D5, NOTE_D4, NOTE_D5,
NOTE_D4, NOTE_D2, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D5,
NOTE_D6, NOTE_DH1, NOTE_DH2,NOTE_DH2, NOTE_DH1, NOTE_DH2,
NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D5, NOTE_D4,NOTE_D2,
NOTE_D1, NOTE_D2, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D5, NOTE_D4, NOTE_D0,
NOTE_D1, NOTE_D2, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,
NOTE_D2, NOTE_D1, NOTE_D4, NOTE_D4, NOTE_D5, NOTE_D4,
NOTE_D2, NOTE_D4, NOTE_D5, NOTE_D5, NOTE_D4, NOTE_D5,
NOTE_D4, NOTE_D2, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D5,
NOTE_D6, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH1, NOTE_DH2,
NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D5, NOTE_D4, NOTE_D2,
NOTE_D1, NOTE_D2, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D5, NOTE_D4
};
//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
float duration[] =
{
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 1, 1, 1, 2,
1, 1, 1, 2, 1, 2, 2, 3, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 2, 1, 2,
1, 1, 1, 1, 1, 1, 2,
1, 1, 1, 2, 1, 2, 2, 4,
};
int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin = 10; //蜂鸣器的pin
void setup()
{
pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式
length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数,
//可以查出tone序列里有多少个音符
}
void loop()
{
for (int x = 0; x < length; x++) //循环音符的次数
{
tone(tonePin, tune[x]); //此函数依次播放tune序列里的数组,即每个音符
delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,
//400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
noTone(tonePin);//停止当前音符,进入下一音符
}
delay(5000);//等待5秒后,循环重新开始
}