Arduino 蜂鸣器播放音乐LED灯闪烁

一、实验所需组件:

led灯
三脚蜂鸣器
面包板
Arduino开发板
杜邦线
开发板

二、实验原理

蜂鸣器实现音乐播放:

控制好频率和节拍,就能演奏出好听的音乐。因此,在实验之前要先弄清楚各音调的频率。可参考各音频的频率表。
之后,控制好音符的演奏时间。音符节奏分为一拍、半拍、1/4拍、1/8拍,可规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,以此设计。本实验音乐以《欢乐颂》为例。

led灯闪烁:

led灯根据音乐频率和节拍进行闪烁。

三、 实验过程

组件连接

接线方式:
3脚蜂鸣器:
GND—开发板的GND
VCC线—5V开发板5v电源
I/O—06接口

LED灯:
LED接入面包板并在对应接口下方接出两条线,
分别接入面包板的窄条以及开发板的01接口
接导线到开发板的GND
连接实例图如下:
在这里插入图片描述

连接主机编译器,编译上传代码

使用arduino编译器
在这里插入图片描述
这样,就可以实现Arduino 蜂鸣器播放音乐LED灯闪烁啦!

实现效果的代码如下:

#define NTD0 -1
#define NTD1 294
#define NTD2 330
#define NTD3 350
#define NTD4 393
#define NTD5 441
#define NTD6 495
#define NTD7 556

#define NTDL1 147
#define NTDL2 165
#define NTDL3 175
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278

#define NTDH1 589
#define NTDH2 661
#define NTDH3 700
#define NTDH4 786
#define NTDH5 882
#define NTDH6 990
#define NTDH7 112

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//选取音乐《欢乐颂》
int tune[]=
{
  NTD3,NTD3,NTD4,NTD5,
  NTD5,NTD4,NTD3,NTD2,
  NTD1,NTD1,NTD2,NTD3,
  NTD3,NTD2,NTD2,
  NTD3,NTD3,NTD4,NTD5,
  NTD5,NTD4,NTD3,NTD2,
  NTD1,NTD1,NTD2,NTD3,
  NTD2,NTD1,NTD1,
  NTD2,NTD2,NTD3,NTD1,
  NTD2,NTD3,NTD4,NTD3,NTD1,
  NTD2,NTD3,NTD4,NTD3,NTD2,
  NTD1,NTD2,NTDL5,NTD0,
  NTD3,NTD3,NTD4,NTD5,
  NTD5,NTD4,NTD3,NTD4,NTD2,
  NTD1,NTD1,NTD2,NTD3,
  NTD2,NTD1,NTD1
};
float durt[]=
{
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,0.5,0.5,1,1,
  1,0.5,0.5,1,1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,0.5,0.5,
  1,1,1,1,
  1+0.5,0.5,1+1,
};
int length;
int tonepin=6;
int ledp=1;
void setup()
{
  pinMode(tonepin,OUTPUT);
  pinMode(ledp,OUTPUT);
  length=sizeof(tune)/sizeof(tune[0]);
}
void loop()
{
  for(int x=0;x<length;x++)
  {
    tone(tonepin,tune[x]);
    digitalWrite(ledp, HIGH); 
    delay(400*durt[x]);
    digitalWrite(ledp, LOW);
    delay(100*durt[x]);
    noTone(tonepin);
  }
  delay(2000);
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值