Arduino-多彩音乐蜂鸣器

news/2025/3/15 13:15:44/文章来源:https://www.cnblogs.com/duraadream/p/18773470

最近开始接触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+无源蜂鸣器播放《起风了》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899150.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

82.7K star!大气炫酷UI开源项目,超级火!

shadcn/ui 是一款基于 Radix UI 和 Tailwind CSS 构建的现代化 UI 组件库,专为追求设计品质与开发效率的开发者打造。不同于传统组件库,它提供完全可定制的组件代码模板,让开发者既能享受开箱即用的便利,又能保持对设计系统的完全掌控。嗨,大家好,我是小华同学,关注我们…

20241415 实验一 《Python程序设计》实验报告

20241415 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2414 姓名: 赵邵宁 学号:20241415 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

前后端分离开发:如何高效调试API?有工具 vs 无工具全解析

在前后端分离的开发模式中,API 的调试是非常重要的一部分。特别是使用 Java 作为后端开发时,保证接口的功能正确性、性能稳定性,以及响应数据的准确性,都是前端和后端高效协作的关键。本文将结合接口调试的实际开发场景,探讨在有调试工具和没有调试工具两种情况下,如何实…

服务器SSH 仅密钥登录

前言 随着我服务器上Alist资源的增多,服务器【本身】这个存放着Alist内所有密码(虽然都是随机生成的)的存在就显得非常的脆弱。 尽管我的ssh密码选择了随机生成并交给电脑记住,但是服务器被攻破导致全部密码我都得改一遍的后果我承担不起。 另注:因为上传到云盘的重要资料…

JDK7-日历类--java进阶day07

1.Calendar类 用于获取或者修改时间,之前学的Date类,获取和修改时间的方法已经过时2.Calendar对象的创建 Calendar类里面有很多抽象方法,如果创建对象就要全部重写,所以不能直接创建 我们可以使用多态解决创建对象的问题,由于其子类对象也较难创建,所以我们使用下图中的方…

Vue3-DeepSeek-Chat流式AI对话|vite6+vant4+deepseek智能ai聊天助手

原创新作vue3.5+deepseek+vant4+vant4仿DeepSeek-R1流式输出ai聊天对话。 deepseek-vue3-chat : 实战2025智能大模型ai会话,基于Vue3+Vite6+OpenAI集成接入DeepSeek聊天小助手模板,支持流式打字输出效果、浅色/暗黑主题模式、代码高亮显示、针对移动端+PC端适配处理。🐬使用…

Sections 多列混排

学习点@Reusable 装饰器 WaterFlow瀑布流容器 模块组件 代码讲解效果图@Reusable 装饰器使用场景 @Reusable 是一个在 HarmonyOS ArkTS 中使用的装饰器,主要用于自定义组件的复用。从 API version 10 开始,@Reusable 装饰器得到了支持。它的主要功能是当一个标记为 @Reusable…

后缀数组(SA)学习笔记(倍增算法)

倍增求SA后缀数组是一个非常好的东西。一开始看不出来这个东西有什么用,但是它非常的有用。(以下 \(N\) 为字符串长度) 有了后缀数组,我们就可以在 \(O(N \log N)\) 的时间内:得到所有后缀的字典序关系。(最基本的功能) 求出任意两个子串的最长公共前缀 (LCP)。 求出字符…

Chat2DB 数据库客户端邀请码

推荐一款超好用的AI数据库管理工具Chat2DB,支持22种数据库,包括国产的达梦、OpenGuass、OceanBase、TiDB等,还有非关系型MongoDB、Redis等,快来试试吧! 🔥 官网:https://chat2db-ai.com/ 🔥 邀请码:622888 邀请码介绍:https://docs.chat2db-ai.com/docs/settings/i…

基于Java的全栈入门学习路线

Java全栈JavaSE数据库前端JavaWebSSM框架Linux学完以上可独立开发,下面是微服务协同开发 SpringBootSpringCloudHadoop

latex中如何重复引用已经存在的脚注?

在使用latex写论文的时候,如果要添加一个脚注,可以使用 \footnote{...}如果第二次出现相同内容的脚注,再写一次\footnote{...}会导致出现两个脚注,我们希望两处脚注链接到一处,可以这样写: 第一处脚注添加label: \footnote{...\label{llama3.2}}第二处及之后的脚注直接引…