看[mw_shl_code=cpp,true]#define NOTE_0 -1
#define NOTE_A1 441
#define NOTE_A2 495
#define NOTE_A3 556
#define NOTE_A4 589
#define NOTE_A5 661
#define NOTE_A6 742
#define NOTE_A7 833
#define NOTE_AL1 221
#define NOTE_AL2 248
#define NOTE_AL3 278
#define NOTE_AL4 294
#define NOTE_AL5 330
#define NOTE_AL6 371
#define NOTE_AL7 416
#define NOTE_AH1 882
#define NOTE_AH2 990
#define NOTE_AH3 1112
#define NOTE_AH4 1178
#define NOTE_AH5 1322
#define NOTE_AH6 1484
#define NOTE_AH7 1665
#define NOTE_B1 495
#define NOTE_B2 556
#define NOTE_B3 589
#define NOTE_B4 661
#define NOTE_B5 742
#define NOTE_B6 833
#define NOTE_B7 935
#define NOTE_BL1 248
#define NOTE_BL2 278
#define NOTE_BL3 294
#define NOTE_BL4 330
#define NOTE_BL5 371
#define NOTE_BL6 416
#define NOTE_BL7 467
#define NOTE_BH1 990
#define NOTE_BH2 1112
#define NOTE_BH3 1178
#define NOTE_BH4 1322
#define NOTE_BH5 1484
#define NOTE_BH6 1665
#define NOTE_BH7 1869
#define NOTE_C1 262
#define NOTE_C2 294
#define NOTE_C3 330
#define NOTE_C4 350
#define NOTE_C5 393
#define NOTE_C6 441
#define NOTE_C7 495
#define NOTE_CL1 131
#define NOTE_CL2 147
#define NOTE_CL3 165
#define NOTE_CL4 175
#define NOTE_CL5 196
#define NOTE_CL6 221
#define NOTE_CL7 248
#define NOTE_CH1 525
#define NOTE_CH2 589
#define NOTE_CH3 661
#define NOTE_CH4 700
#define NOTE_CH5 786
#define NOTE_CH6 882
#define NOTE_CH7 990
#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 1112
#define NOTE_E1 330
#define NOTE_E2 350
#define NOTE_E3 393
#define NOTE_E4 441
#define NOTE_E5 495
#define NOTE_E6 556
#define NOTE_E7 624
#define NOTE_EL1 165
#define NOTE_EL2 175
#define NOTE_EL3 196
#define NOTE_EL4 221
#define NOTE_EL5 248
#define NOTE_EL6 278
#define NOTE_EL7 312
#define NOTE_EH1 661
#define NOTE_EH2 700
#define NOTE_EH3 786
#define NOTE_EH4 882
#define NOTE_EH5 990
#define NOTE_EH6 1112
#define NOTE_EH7 1248
#define NOTE_F1 350
#define NOTE_F2 393
#define NOTE_F3 441
#define NOTE_F4 495
#define NOTE_F5 556
#define NOTE_F6 624
#define NOTE_F7 661
#define NOTE_FL1 175
#define NOTE_FL2 196
#define NOTE_FL3 221
#define NOTE_FL4 234
#define NOTE_FL5 262
#define NOTE_FL6 294
#define NOTE_FL7 330
#define NOTE_FH1 700
#define NOTE_FH2 786
#define NOTE_FH3 882
#define NOTE_FH4 935
#define NOTE_FH5 1049
#define NOTE_FH6 1178
#define NOTE_FH7 1322
#define NOTE_G1 393
#define NOTE_G2 441
#define NOTE_G3 495
#define NOTE_G4 556
#define NOTE_G5 624
#define NOTE_G6 661
#define NOTE_G7 742
#define NOTE_GL1 196
#define NOTE_GL2 221
#define NOTE_GL3 234
#define NOTE_GL4 262
#define NOTE_GL5 294
#define NOTE_GL6 330
#define NOTE_GL7 371
#define NOTE_GH1 786
#define NOTE_GH2 882
#define NOTE_GH3 990
#define NOTE_GH4 1049
#define NOTE_GH5 1178
#define NOTE_GH6 1322
#define NOTE_GH7 1484
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看
#define DURATION 400//每个音符持续的时间,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
int t1[] =
{
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_0,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_0,NOTE_D6,
NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_0,NOTE_D6,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_0,
NOTE_D1,NOTE_D1,NOTE_D3,
NOTE_D1,NOTE_D1,NOTE_D3,NOTE_0,
NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D3,NOTE_0,
NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D2,NOTE_0,
NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,
NOTE_D5,
NOTE_DH1,NOTE_0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_0,
NOTE_DH1,NOTE_0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_0,
NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,
NOTE_D1,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_DH1,NOTE_0,NOTE_D7,NOTE_D5,
NOTE_D6
};
//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
float d1[]=
{
1,1,0.5,0.5,1,
0.5,0.5,0.5,0.5,1,0.5,0.5,
0.5,1,0.5,1,0.5,0.5,
0.5,0.5,0.5,0.5,1,1,
1,1,1+1,
0.5,1,1+0.5,1,
1,1,0.5,0.5,1,
0.5,1,1+0.5,1,
0.5,0.5,0.5,0.5,1+1,
0.5,1,1+0.5,1,
1+1,0.5,0.5,1,
1+1+1+1,
0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
0.5,1,0.5,1,1,
0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
0.5,1,0.5,1,1,
1+1,0.5,0.5,1,
1+1+1+1,
0.5,1,0.5,1+1,
0.5,1,0.5,1+1,
1+1,0.5,0.5,1,
1+1+1+1
};
//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)(+代表连音)
int t2[] =
{
NOTE_CL6, NOTE_CL6, NOTE_C1, NOTE_C2,
NOTE_C3, NOTE_C5,
NOTE_C6, NOTE_CL6, NOTE_C1, NOTE_C2,
NOTE_C3,
NOTE_C2, NOTE_C2, NOTE_C2, NOTE_C3,
NOTE_C5 , NOTE_C5, NOTE_C5, NOTE_C6,
NOTE_C3,
NOTE_CL6, NOTE_CL6, NOTE_C1, NOTE_C2,
NOTE_C3, NOTE_C5,
NOTE_C6, NOTE_CL6, NOTE_C1, NOTE_C2,
NOTE_C3,
NOTE_C2, NOTE_C2, NOTE_C2, NOTE_C3,
NOTE_C5,NOTE_C5,NOTE_0,NOTE_CL5,
NOTE_CL6
};
float d2[]=
{
1,1,1,1,3,1,1,1,1,1,4,1,1,1,1,1,1,1+1,4,1,1,1,1,3,1,1,1,1,1,4,1,1,1,1,1,1,1,1,4
};
//同上
int tonePin =6;//定义数字11 接口
int potpin=0; //定义模拟接口0
int inpin =13 ;//定义数字7 接口
int val;//定义变量val
int gal=0;
int length;//这里定义一个变量,后面用来表示共有多少个音符
void setup()
{
pinMode(tonePin,OUTPUT);//定义小灯接口为输出接口
pinMode(inpin,INPUT);//定义按键接口为输入接口
length = sizeof(t1)/sizeof(t1[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
lcd.begin(16, 2); //初始化LCD
}
void loop()
{
while(1)
gal=analogRead(potpin);
val=digitalRead(inpin);//读取数字7 口电平值赋给val
{
if(val==HIGH)//检测按键是否按下
{
if (gal<=30)
{
for(int x=0;x<length;x++)//循环音符的次数
{
tone(tonePin,t1[x]);//此函数依次播放tune序列里的数组,即每个音符
delay(400*d1[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
noTone(tonePin);//停止当前音符,进入下一音符
if(val==LOW) break;//加上这一句就行了
}
}
else
{
if(gal<=60 and gal>=30)
{
for(int x=0;x<length;x++)//循环音符的次数
{
tone(tonePin,t2[x]);//此函数依次播放tune序列里的数组,即每个音符
delay(DURATION*d2[x]);
noTone(tonePin);//停止当前音符,进入下一音符
if(val==LOW) break;
}
}
}
}
}
}
[/mw_shl_code] |