Arduino uno控制蜂鸣器播放音乐(以《大鱼》为例)

最近在学用arduino控制传感器,顺带着就玩儿了一下蜂鸣器。按照简谱写出了《大鱼》对应的代码。

其他音乐也可以按照这个思路编写出相对应的控制程序。

大概思路如下:
定义不同音所对应的频率,按照简谱写出音符对应的常量放在一个数组内,写控制节奏的数组
setup函数,设置蜂鸣器连接的引脚,计算乐谱的长度
loop函数,按顺序发声、停顿,整首曲子结束后停顿2s,再从头播放

硬件接线:
蜂鸣器-arduino
正-D6
负-GND

在这里插入图片描述
在这里插入图片描述
具体代码如下:

#define NTC0 -1
#define NTC1 262
#define NTC2 294
#define NTC3 330
#define NTC4 350
#define NTC5 393
#define NTC6 441
#define NTC7 495
#define NTCL5 196
#define NTCL6 221
#define NTCL7 248   
#define NTCH1 525
//音符
int tune[]=                 
{
  NTC3,NTC2,NTC3,NTC6,NTC3,NTC2,NTC3,NTC7,
  NTC3,NTC2,NTC3,NTCH1,NTC7,NTC5,
  NTC3,NTC2,NTC3,NTC6,NTC3,NTC2,NTC3,NTC7,
  NTC5,NTC2,NTCL7,
  NTC3,NTC2,NTC3,NTC6,NTC3,NTC2,NTC3,NTC7,
  NTC3,NTC2,NTC3,NTCH1,NTC7,NTC5,
  NTC2,NTC3,NTCL6,NTC2,NTC3,NTCL6,NTCL5,
  NTCL6,NTC1,NTCL7,
  
  NTCL6,NTC1,NTC1,NTC2,NTC2,NTC3,NTC3,NTC5,NTC6,
  NTC5,NTC3,NTC2,
  NTCL6,NTC1,NTC1,NTC2,NTC2,NTC3,NTC3,NTCL6,NTCL5,
  NTCL6,NTC1,NTC1,NTC2,NTC2,NTC3,NTC3,NTC5,NTC6,
  NTC5,NTC3,NTC2,
  NTC2,NTC3,NTCL6,NTC2,NTC3,NTCL6,NTCL5,NTCL6,
 
  NTCL6,NTC1,NTC2,NTC1,NTCL6,
  NTCL6,NTC1,NTC2,NTC1,NTC3,
  NTC3,NTC5,NTC6,NTC6,NTC5,NTC3,NTC2,NTC1,NTC2,NTC3,
  NTCL6,NTC1,NTC2,NTC1,NTCL6,
  NTCL6,NTC1,NTC2,NTC1,NTC3,
  NTC2,NTC3,NTCL6,NTC2,NTC3,NTCL6,NTCL5,NTCL6,
  
  NTC3,NTC5,NTCH1,NTC7,NTC3,
  NTC3,NTC2,NTC1,NTC1,NTC2,NTC3,
  NTC3,NTC2,NTC1,NTC6,NTCH1,NTC7,NTC6,NTC5,NTC2,NTC3,
  NTC3,NTC5,NTCH1,NTC7,NTC3,
  NTC3,NTC2,NTC1,NTC1,NTC2,NTC3,
  NTC2,NTC3,NTCL6,NTC2,NTC3,NTCL6,NTCL5,NTCL6,
};
//节拍
int durt[]=                   
{
250,250,250,250,250,250,250,250,
250,250,250,250,500,500,
250,250,250,250,250,250,250,250,
500,500,1000,
250,250,250,250,250,250,250,250,
250,250,250,250,500,500,
250,250,500,250,250,250,250,500,500,1000,
 
250,250,250,250,250,250,250,125,125,
750,250,1000,
250,250,250,250,250,250,500,500,1500,
250,250,250,250,250,250,250,125,125,
750,250,1000,
250,250,500,250,250,250,250,1500,

250,250,750,250,500,250,250,
750,250,500,250,250,500,250,250,250,250,500,500,1000,
250,250,875,125,500,250,250,500,500,1000,
250,250,500,250,250,250,250,1500,

250,250,750,250,500,250,250,
500,250,250,500,250,250,500,250,250,250,250,250,250,1500,
250,250,750,250,500,250,250,
500,250,250,1000,250,250,500,250,250,250,250,2000,
 
};
int length;
int tonepin=6;   

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(durt[x]);   
    noTone(tonepin);
  }
  delay(2000);
}
Arduino Uno是一款广泛用于电子制作的微控制器板,可以用来控制各种硬件设备,包括蜂鸣器。如果你想通过Arduino Uno蜂鸣器播放"一路向北"这样的歌曲,你需要编写一段程序,将歌曲转换成特定的PWM信号发送给蜂鸣器。 首先,你需要了解蜂鸣器通常只能发出简单的音调,所以不可能直接播放完整的音频文件。你需要把歌曲分解成一系列的单音符,然后通过定时器或库如`Tone()`函数来控制蜂鸣器发出对应的频率。 以下是一个简化的示代码,假设已将歌曲分解为数组或字符串,每个元素代表一个音符: ```cpp #include < Tone.h > // 引入Tone库 const int buzzerPin = 9; // 蜂鸣器连接到数字引脚9 int notes[] = {"C4", "D4", "E4", ...}; // 一路向北的音高和时长序列 void setup() { pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出模式 } void playNote(int note) { int freq = getFrequencyFromNote(note); // 根据音名获取对应频率 tone(buzzerPin, freq, durationFromNote(note)); // 发出音调 delay(durationBetweenNotes); // 等待下一个音符间隔时间 } void loop() { for (int i = 0; i < numOfNotes; i++) { playNote(notes[i]); } noTone(buzzerPin); // 结束演奏后关闭蜂鸣器 } // 辅助函数来获取频率、持续时间和音符间隔 int getFrequencyFromNote(char note); unsigned long durationFromNote(char note); unsigned long durationBetweenNotes; ``` 这个代码只是一个基本框架,实际操作中可能需要对音阶、音长以及具体的歌曲结构有更详细的处理。同时,这并不支持复杂的歌曲结构,因为蜂鸣器无法像真正的音乐播放器那样存储并播放连续的音频流。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值