arduino/Mixly技巧:使用喇叭当作蜂鸣器

2023-10-14 03:10

本文主要是介绍arduino/Mixly技巧:使用喇叭当作蜂鸣器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、器材

喇叭

喇叭的作用是用来代替无源蜂鸣器播放声音

滑动变阻器

滑动变阻器的作用是用来调节音量大小

 

二、接线

滑动变阻器的正极接arduino的A0,GND接arduino的GND,out接喇叭的正极,喇叭的负极接地

三、程序

#define NOTE_0  -1#define NOTE_A1 441
#define NOTE_A2 495
#define NOTE_A3 556
#define NOTE_A4 589
#define NOTE_A5 661
#define NOTE_A6 742
#define NOTE_A7 833#define NOTE_AL1 221
#define NOTE_AL2 248
#define NOTE_AL3 278
#define NOTE_AL4 294
#define NOTE_AL5 330
#define NOTE_AL6 371
#define NOTE_AL7 416#define NOTE_AH1 882
#define NOTE_AH2 990
#define NOTE_AH3 1112
#define NOTE_AH4 1178
#define NOTE_AH5 1322
#define NOTE_AH6 1484
#define NOTE_AH7 1665#define NOTE_B1 495
#define NOTE_B2 556
#define NOTE_B3 589
#define NOTE_B4 661
#define NOTE_B5 742
#define NOTE_B6 833
#define NOTE_B7 935#define NOTE_BL1 248
#define NOTE_BL2 278
#define NOTE_BL3 294
#define NOTE_BL4 330
#define NOTE_BL5 371
#define NOTE_BL6 416
#define NOTE_BL7 467#define NOTE_BH1 990
#define NOTE_BH2 1112
#define NOTE_BH3 1178
#define NOTE_BH4 1322
#define NOTE_BH5 1484
#define NOTE_BH6 1665
#define NOTE_BH7 1869#define NOTE_C1 262
#define NOTE_C2 294
#define NOTE_C3 330
#define NOTE_C4 350
#define NOTE_C5 393
#define NOTE_C6 441
#define NOTE_C7 495#define NOTE_CL1 131
#define NOTE_CL2 147
#define NOTE_CL3 165
#define NOTE_CL4 175
#define NOTE_CL5 196
#define NOTE_CL6 221
#define NOTE_CL7 248#define NOTE_CH1 525
#define NOTE_CH2 589
#define NOTE_CH3 661
#define NOTE_CH4 700
#define NOTE_CH5 786
#define NOTE_CH6 882
#define NOTE_CH7 990#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 1112#define NOTE_E1 330
#define NOTE_E2 350
#define NOTE_E3 393
#define NOTE_E4 441
#define NOTE_E5 495
#define NOTE_E6 556
#define NOTE_E7 624#define NOTE_EL1 165
#define NOTE_EL2 175
#define NOTE_EL3 196
#define NOTE_EL4 221
#define NOTE_EL5 248
#define NOTE_EL6 278
#define NOTE_EL7 312#define NOTE_EH1 661
#define NOTE_EH2 700
#define NOTE_EH3 786
#define NOTE_EH4 882
#define NOTE_EH5 990
#define NOTE_EH6 1112
#define NOTE_EH7 1248#define NOTE_F1 350
#define NOTE_F2 393
#define NOTE_F3 441
#define NOTE_F4 495
#define NOTE_F5 556
#define NOTE_F6 624
#define NOTE_F7 661#define NOTE_FL1 175
#define NOTE_FL2 196
#define NOTE_FL3 221
#define NOTE_FL4 234
#define NOTE_FL5 262
#define NOTE_FL6 294
#define NOTE_FL7 330#define NOTE_FH1 700
#define NOTE_FH2 786
#define NOTE_FH3 882
#define NOTE_FH4 935
#define NOTE_FH5 1049
#define NOTE_FH6 1178
#define NOTE_FH7 1322#define NOTE_G1 393
#define NOTE_G2 441
#define NOTE_G3 495
#define NOTE_G4 556
#define NOTE_G5 624
#define NOTE_G6 661
#define NOTE_G7 742#define NOTE_GL1 196
#define NOTE_GL2 221
#define NOTE_GL3 234
#define NOTE_GL4 262
#define NOTE_GL5 294
#define NOTE_GL6 330
#define NOTE_GL7 371#define NOTE_GH1 786
#define NOTE_GH2 882
#define NOTE_GH3 990
#define NOTE_GH4 1049
#define NOTE_GH5 1178
#define NOTE_GH6 1322
#define NOTE_GH7 1484
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看
#define DURATION 400//每个音符持续的时间,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
int t1[] =
{NOTE_0, NOTE_A5, NOTE_A5, NOTE_A3,NOTE_A2, NOTE_A3, NOTE_AL6, NOTE_A2, NOTE_A3, NOTE_A5, NOTE_A3, NOTE_A2, NOTE_0, NOTE_A5, NOTE_A5, NOTE_A3,NOTE_A2, NOTE_A3, NOTE_A5, NOTE_A2, NOTE_A3, NOTE_A5, NOTE_A2, NOTE_A1, NOTE_0, NOTE_A1, NOTE_A2, NOTE_A3,NOTE_A5, NOTE_A6, NOTE_A5, NOTE_A3, NOTE_A5, NOTE_A3, NOTE_A3, NOTE_A2, NOTE_A2, NOTE_0, NOTE_A1, NOTE_A2, NOTE_A1,NOTE_A2, NOTE_A1, NOTE_A2, NOTE_A2, NOTE_A3, NOTE_A5, NOTE_A3, NOTE_A3, NOTE_0, NOTE_A5, NOTE_A5, NOTE_A3,NOTE_A2, NOTE_A3, NOTE_AL6, NOTE_A2, NOTE_A3, NOTE_A5, NOTE_A3, NOTE_A2, NOTE_0, NOTE_A5, NOTE_A5, NOTE_A3,NOTE_A2, NOTE_A3, NOTE_AL5, NOTE_A2, NOTE_A3, NOTE_A5, NOTE_A2, NOTE_A1, NOTE_0, NOTE_A1, NOTE_A2, NOTE_A3,NOTE_A5, NOTE_A6, NOTE_A5, NOTE_A3, NOTE_A5, NOTE_A3, NOTE_A3, NOTE_A2, NOTE_A2, NOTE_AL5, NOTE_A3, NOTE_A2, NOTE_A2,NOTE_A2, NOTE_A1, NOTE_A1
};
//这部分就是整首曲子的音符部分,用了一个序列定义为t1,整数
float d1[] =
{0.25, 0.25, 0.25, 0.25,0.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 1, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25, 1, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 1, 0.25, 0.25, 0.25, 0.25,0.5, 0.25, 0.25, 0.25, 0.5, 0.25, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25, 1, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25, 1, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.5, 0.25, 0.25,0.5, 0.5, 1
};
//这部分是整首曲子的接拍部分,也定义个序列d1,浮点(数组的个数和前面音符的个数是一样的,一一对应么)(+代表连音)
int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin = A1; //蜂鸣器的pinvoid setup()
{pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式length = sizeof(t1) / sizeof(t1[0]); //这里用了一个sizeof函数, 可以查出tone序列里有多少个音符Serial.begin(9600);
}void loop()
{for (int x = 0; x < length; x++) //循环音符的次数{tone(tonePin, t1[x]); //此函数依次播放t1序列里的数组,即每个 音符delay(800 * d1[x]); //每个音符持续的时间,即节拍d1,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧noTone(tonePin);//停止当前音符,进入下一音符}delay(2000);//等待5秒后,循环重新开始}

四、效果 

喇叭播放青花瓷,选择滑动变阻器可以调节音量大小

这篇关于arduino/Mixly技巧:使用喇叭当作蜂鸣器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/207722

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他