arduino 嗡鸣器 音乐_Arduino教程——蜂鸣器发声

这篇Arduino教程介绍了如何利用代码定义音符频率,结合不同的音符和拍子,让蜂鸣器演奏出音乐。通过调整音符持续时间和拍子,可以改变曲子的速度。示例代码中包含了一段简单的旋律演奏。
摘要由CSDN通过智能技术生成

更强的代码

#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

{

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

{

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

delay(DURATION*d2[x]);

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

if(val==LOW) break;

}

}

}

}

}

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值