Arduino 无源蜂鸣器 音乐播放实验

上两次实验做了有源蜂鸣器的按键响声控制和无源蜂鸣器的报警声控制,这次尝试做Mid音乐播放,还好有点乐理知识,吹拉弹类的乐器都会点,最要做好音符对应的频率,节拍对应的间隔时间,就能做Mid音乐了。


无源蜂鸣器:一种一体化结构的电子讯响器,分为有源蜂鸣器与无源蜂鸣器。这里的“源”不是指电源,而是指震荡源,有源蜂鸣器内部带震荡源,所以只要一通电就会响,而无源内部不带震荡源,所以如果仅用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。从外观上看,两种蜂鸣器区别不大,但将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。


电路及原理图都非常简单,这里用《欢乐颂》做测试。




#define D0 -1
#define D1 262
#define D2 293
#define D3 329
#define D4 349
#define D5 392
#define D6 440
#define D7 494

#define M1 523
#define M2 586
#define M3 658
#define M4 697
#define M5 783
#define M6 879
#define M7 987

#define H1 1045
#define H2 1171
#define H3 1316
#define H4 1393
#define H5 1563
#define H6 1755
#define H7 1971
//列出全部D调的频率
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//列出所有节拍
int tune[]=        //根据简谱列出各频率
{
  M3,M3,M4,M5,
  M5,M4,M3,M2,
  M1,M1,M2,M3,
  M3,M2,M2,
  M3,M3,M4,M5,
  M5,M4,M3,M2,
  M1,M1,M2,M3,
  M2,M1,M1,
  M2,M2,M3,M1,
  M2,M3,M4,M3,M1,
  M2,M3,M4,M3,M2,
  M1,M2,D5,D0,
  M3,M3,M4,M5,
  M5,M4,M3,M4,M2,
  M1,M1,M2,M3,
  M2,M1,M1
};
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=5;   //得用5号接口
void setup()
{
  pinMode(tonepin,OUTPUT);
  length=sizeof(tune)/sizeof(tune[0]);   //计算长度
}
void loop()
{
  for(int x=0;x<length;x++)
  {
    tone(tonepin,tune[x]);
    delay(500*durt[x]);   //这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
    noTone(tonepin);
  }
  delay(2000);
}

下次再尝试用64和弦的喇叭,演奏更精彩的音乐。


  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Arduino无源蜂鸣器播放音乐,可以通过编写代码来实现。下面是一个简单的示例代码,用于播放一首简单的音乐。 ```cpp // 音符频率定义 #define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_B4 494 #define NOTE_C5 523 // 音符持续时间定义 #define DUR_QUARTER_NOTE 250 #define DUR_HALF_NOTE 500 #define DUR_WHOLE_NOTE 1000 // 定义播放音乐的数组 int melody[] = { NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, 0, NOTE_B4, NOTE_C5 }; int noteDurations[] = { DUR_QUARTER_NOTE, DUR_QUARTER_NOTE, DUR_HALF_NOTE, DUR_QUARTER_NOTE, DUR_QUARTER_NOTE, DUR_HALF_NOTE, DUR_HALF_NOTE, DUR_WHOLE_NOTE }; void setup() { } void loop() { // 遍历音符数组并逐个播放 for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) { int noteDuration = 1000 / noteDurations[i]; tone(8, melody[i], noteDuration); delay(noteDuration * 1.3); noTone(8); delay(50); } } ``` 在这个示例代码中,我们定义了一些常用的音符频率和音符持续时间。然后,我们使用一个简单的循环来遍历音符数组,并使用 `tone()` 函数播放每个音符。`tone()` 函数接受两个参数,第一个参数是蜂鸣器连接的引脚(在这里是8号引脚),第二个参数是要播放的音符频率,第三个参数是音符持续时间。使用 `delay()` 函数控制每个音符之间的延迟时间。 你可以根据自己的需要修改音符数组和音符持续时间数组,以实现不同的音乐效果。同时,请确保将无源蜂鸣器正确连接到Arduino的引脚,并根据需要调整代码中的引脚编号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值