室友非说不会,我能怎么办,肝它
此次实现的功能是(音乐是我们当时在禹州的时候扒的乐谱,歌唱祖国),按一下音乐播放,再按一下暂停,再按一下从刚才暂停的位置播放,
需要一个按键,一个蜂鸣器
按键接开发板2口,蜂鸣器接开发板1口
程序还是简单的
//音乐歌唱祖国
#define NTF0 -1
#define NTF1 350
#define NTF2 393
#define NTF3 441
#define NTF4 495
#define NTF5 556
#define NTF6 624
#define NTF7 661
#define NTFL1 175
#define NTFL2 196
#define NTFL3 221
#define NTFL4 234
#define NTFL5 262
#define NTFL6 294
#define NTFL7 330
#define NTFH1 700
#define NTFH2 786
#define NTFH3 882
#define NTFH4 935
#define NTFH5 1049
#define NTFH6 1178
#define NTFH7 1322
//列出全部D调的频率
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625
//列出所有节拍
int tune1[] =
{
NTF1, NTF1, NTF1, NTFL5,
NTF3, NTF1, NTF5, NTF6,
NTF5, NTF5, NTF5, NTF6, NTF6,
NTF6, NTF5, NTF4, NTF6, NTF5,
NTF5, NTF5, NTF5, NTF6, NTF6,
NTF2, NTF2, NTF2, NTF5, NTF4,
NTF3, NTFL5, NTFL5, NTF5, NTF5, NTF6,
NTF5, NTF4, NTF3, NTF2, NTF1,
NTF1, NTF5, NTF5, NTFH1, NTFH1,
NTF6, NTF6, NTF5, NTF4, NTF5,
NTF6, NTF2, NTF2, NTF5, NTF5, NTF6,
NTF5, NTF4, NTF3, NTF2, NTF1,
NTF1, NTF0,
NTF1, NTFL5, NTF3, NTF3, NTF0,
NTF3, NTF1, NTF6, NTF6, NTF0,
NTFL6, NTFL6, NTF2, NTF2, NTF3,
NTF2, NTF1, NTFL7, NTFL6, NTFL5,
NTF1, NTFL5, NTFL6, NTFL6, NTFL5,
NTF1, NTF2, NTF3, NTF0,
NTF2, NTF6, NTF6, NTF5, NTF5, NTF3,
NTF2, NTF6, NTF5, NTF0, NTFH1,
NTFH1, NTFH1, NTFH1, NTF5, NTF6, NTF1,
NTF6, NTF5, NTF4, NTF6, NTF5, NTF0,
NTFH1, NTFH1, NTFH1, NTFH1, NTF5, NTF5, NTF6,
NTF5, NTF4, NTF3, NTF2, NTF1, NTFL5, NTFL5,
};
float durt1[] =
{
0.5 + 0.25, 0.25, 1, 1,
1, 1, 1 + 0.5, 0.5,
1, 0.5 + 0.25, 0.25, 1, 1,
0.5 + 0.25, 0.25, 0.5, 0.5, 1 + 1,
1, 0.5 + 0.25, 0.25, 1, 1,
1, 0.5 + 0.25, 0.25, 1 + 0.5, 0.5,
1, 0.5 + 0.25, 0.25, 1, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 1 + 1,
1, 0.5 + 0.25, 0.25, 1, 1,
1, 0.5 + 0.25, 0.25, 1 + 0.5, 0.5,
1, 0.5 + 0.25, 0.25, 1, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 1 + 1,
1 + 0.5, 0.5,
0.5 + 0.25, 0.25, 1, 1 + 0.5, 0.5,
0.5 + 0.25, 0.25, 1, 1 + 0.5, 0.5,
1 + 0.5, 0.5, 1, 0.5 + 0.25, 0.25,
0.5, 0.5, 0.5, 0.5, 1 + 1,
1, 1, 0.5, 1, 0.5,
1, 1, 1, 1,
1, 0.5, 0.5, 0.5, 1, 0.5,
1, 1, 1, 0.5, 0.5,
0.5 + 0.25, 0.25, 0.5, 0.5, 1 + 0.5, 0.5,
0.5 + 0.25, 0.25, 0.5, 0.5, 1, 1,
0.5 + 0.25, 0.25, 0.5, 0.5, 1, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 1, 0.5 + 0.25, 0.25,
};
int length;
int buttonPin = 2;//按键
boolean ledState = false;
int tonepin = 1; //蜂鸣器
void setup()
{
pinMode(tonepin, OUTPUT);
length = sizeof(tune1) / sizeof(tune1[0]); //计算长度
pinMode(buttonPin, INPUT_PULLUP);
}
int p;
void loop()
{
for (int x = 0; x < length; x++)
{
if (digitalRead(buttonPin) == LOW) {//如果读取到按键被按压改变ledStart
ledState = !ledState;
delay(500);//这个延迟是你按压按键的大概时间
p = x;//记录当前播放的音乐的位置
}
if (ledState == true) {//如果ledState是这个状态就播放
tone(tonepin, tune1[x]); //音调
delay(400 * durt1[x]); //节拍进行延时
delay(100 * durt1[x]); //这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
noTone(tonepin);
}else{
x = p;//如果是暂停状态记录此时音乐的位置
}
}
}