最近开始接触Arduino,利用它可以搭建一些电子系统,实现相关功能。本文所要介绍的就是利用全彩LED和蜂鸣器,搭建一个简易的多彩音乐播放器。
器材准备
- Arduino UNO R3开发板一块
- 5mm全彩LED(共阴极)一只
- 无源蜂鸣器一只
- 1k\(\Omega\)电阻×3
- 面包板一块,面包线(公公头)若干
电路连接
参照上图进行连接即可,其中R1=1k\(\Omega\)。
实现代码
首先需要定义四个引脚:
// 定义三色LED的引脚
const int redPin = 6;
const int greenPin = 9;
const int bluePin = 5;// 定义蜂鸣器引脚
const int tonePin = 8;
然后需要选取适当的音乐,进行频谱转换。这部分可以参考现有的代码,笔者参考的是《起风了》的音乐节奏。
#define C0 -1
#define B2 123
#define C3 130
#define CH3 139
#define D3 146
#define DH3 155
#define E3 164
#define F3 174
#define FH3 185
#define G3 196
#define GH3 207
#define A3 220
#define AH3 233
#define B3 246
#define C4 261
#define CH4 277
#define D4 293
#define DH4 311
#define E4 329
#define F4 349
#define FH4 370
#define G4 392
#define GH4 415
#define A4 440
#define AH4 466
#define B4 493
#define C5 523
#define CH5 554
#define D5 587
#define DH5 622
#define E5 659
#define F5 698
#define FH5 740
#define G5 784
#define GH5 831
#define A5 880
#define AH5 932
#define B5 988
#define C6 1046
#define CH6 1108
#define D6 1174
#define DH6 1244
//定义音色
int tune[]=
{C0,F4,FH4,GH4,AH4,AH3,CH4,CH5,AH4,CH3,F3,GH3,F4,FH4,GH4,AH4,AH3,CH4,CH5,AH4,GH4,AH4,FH4,GH4,F4,FH4,CH4,F4,FH4,GH4,AH4,AH3,CH4,CH5,AH4,CH3,F3,GH3,F4,FH4,GH4,AH4,AH3,CH4,CH5,AH4,GH4,AH4,FH4,GH4,F4,FH4,CH4,F5,FH5,GH5,AH5,AH3,CH5,CH6,AH5,CH3,F3,GH3,F5,FH5,GH5,AH5,AH3,CH5,CH6,AH5,GH5,AH5,FH5,GH5,F5,FH5,CH5,F5,FH5,GH5,AH5,AH3,CH5,CH6,AH5,CH3,F3,GH3,C0,GH4,G4,C0,GH4,FH4,GH4,FH4,GH4,AH4,CH5,AH4,GH4,FH4,GH4,FH4,GH4,AH4,GH4,FH4,CH4,GH4,FH4,GH4,FH4,GH4,AH4,CH5,AH4,GH4,AH4,GH4,FH4,GH4,C0,GH4,FH4,GH4,FH4,GH4,AH4,CH5,AH4,GH4,AH4,GH4,FH4,DH4,C0,AH4,GH4,FH4,GH4,FH4,FH3,AH4,GH4,FH4,GH4,FH4,CH4,AH4,GH4,FH4,GH4,FH4,CH4,FH4,CH4,FH4,GH4,AH4,FH4,DH5,CH5,DH5,FH4,F5,DH5,F5,CH4,GH3,F5,DH5,F5,AH4,FH5,GH5,FH5,F5,DH5,CH5,DH5,CH5,DH5,CH5,DH5,CH5,DH5,CH5,GH4,CH5,AH4,C0,FH4,GH4,AH4,FH4,DH5,CH5,DH5,FH4,F5,DH5,F5,C0,F5,DH5,F5,AH4,FH5,GH5,FH5,F5,DH5,CH5,DH5,AH5,AH5,CH5,DH5,AH5,AH5,CH5,DH5,C0,FH5,GH5,AH5,DH6,CH6,DH6,CH6,DH6,CH6,GH5,C0,AH5,DH6,CH6,DH6,CH6,DH6,CH6,AH5,GH5,FH5,DH5,FH5,DH5,GH5,FH5,DH5,FH5,AH5,B5,AH5,B5,AH5,GH5,FH5,GH5,AH5,DH6,CH6,DH6,CH6,DH6,CH6,GH5,AH5,DH6,CH6,DH6,CH6,DH6,CH6,AH5,GH5,FH5,DH5,AH5,GH5,FH5,DH5,FH5,FH5,AH3,DH4,AH3,FH4,C0,DH5,AH5,GH5,FH5,DH5,AH5,GH5,FH5,DH5,FH5,FH5,F5,FH5,GH5,AH5,AH3,CH5,CH6,AH5,CH3,F3,GH3,C0,F5,FH5,GH5,AH5,AH3,CH5,CH6,AH5,GH5,AH5,FH5,GH5,F5,FH5,CH5,F5,FH5,GH5,AH5,AH3,CH5,CH6,AH5,CH3,F3,GH3,C0,GH4,G4,C0
};//编译歌谱
int durt[]=
{2500,183,183,183,183,183,183,183,183,366,366,732,183,183,183,183,183,183,183,183,183,183,183,183,183,183,366,183,183,183,183,183,183,183,183,366,366,732,183,183,183,183,183,183,183,183,183,183,183,183,183,183,366,183,183,183,183,183,183,183,183,366,366,732,183,183,183,183,183,183,183,183,183,183,183,183,183,183,366,183,183,183,183,183,183,183,183,366,366,548,183,1463,1097,366,548,183,548,183,366,366,366,366,548,183,548,183,183,183,183,183,732,548,183,548,183,366,366,366,366,548,183,366,366,1097,366,548,183,548,183,366,366,366,366,548,183,366,366,548,183,183,183,183,183,548,183,183,183,183,183,548,183,183,183,183,183,366,366,366,366,366,366,366,366,366,183,548,183,366,183,183,366,366,366,183,548,366,183,183,183,183,366,366,366,183,366,183,183,183,366,183,548,366,1097,366,366,366,366,366,366,183,548,183,366,183,732,183,366,183,548,366,183,183,183,183,366,366,366,183,548,366,366,183,548,366,1097,366,366,366,366,183,548,183,548,183,366,548,183,366,183,548,183,548,183,366,732,366,183,366,366,183,366,183,366,732,732,183,366,92,92,732,366,366,366,183,548,183,548,183,366,366,366,183,548,183,548,183,366,732,366,183,548,366,366,183,366,732,366,366,366,366,366,366,183,548,366,183,548,366,366,183,366,732,183,183,183,183,183,183,183,183,183,366,366,548,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,366,183,183,183,183,183,183,183,183,366,366,548,183,1463,1097,366
};
关于LED随音乐变化的方案,笔者采取随机颜色,即播放音符时,随机合成一种颜色。这利用随机函数是很容易的。
我们首先对Arduino进行初始化:
int length; // 定义变量,表示共有多少个音符void setup()
{pinMode(tonePin, OUTPUT); // 设置蜂鸣器引脚为输出模式pinMode(redPin, OUTPUT); // 设置红色LED引脚为输出模式pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); length = sizeof(tune) / sizeof(tune[0]); // 计算音符的数量randomSeed(analogRead(0)); // 初始化随机数种子
}
最后是循环播放音乐,播放音符的同时,随机生成一种颜色并写入,实现LED彩色输出。
void loop()
{for (int x = 0; x < length; x++) // 循环播放每个音符{tone(tonePin, tune[x]); // 播放当前音符// 随机生成颜色int redValue = random(0, 256); // 红色通道随机值 (0-255)int greenValue = random(0, 256); int blueValue = random(0, 256); // 设置LED颜色analogWrite(redPin, redValue);analogWrite(greenPin, greenValue);analogWrite(bluePin, blueValue);// 每个音符持续的时间delay(durt[x]);// 停止当前音符,进入下一音符noTone(tonePin);}delay(5000); // 等待5秒,继续循环
}
以上就是简易多彩音乐播放器的实现,对于练习基础的Arduino使用是很有帮助的。
参考:
利用Arduino+无源蜂鸣器播放《起风了》