arduino 嗡鸣器 音乐_arduino笔记一:用arduino实现蜂鸣器播放音乐
写在前面:
首先感谢arduino中文社区的tahoroom,开始做这个的时候在他的这个项目里我学了很多东西:
1、Arduino的Tone函数
关于arduino播放音乐的原理,可以看上面链接的tahoroom的文章,他讲得相当详细。
Arduino官方提供的Tone函数用于驱动蜂鸣器或扬声器发出我们需要的声音,通常的应用如下:
tone(pin,frequency,duration);//控制pin脚上的音频输出
//pin:arduino的控制脚位;
//frequency:输出的声音频率,换到音乐上可理解为旋律音高;
//duration:旋律持续时间,单位ms;
noTone(pin);//停止播放;
详细的tone函数定义也可以参考官方介绍:
2、pitches.h的添加
为了避免在主程序里添加太多的定义,我们把音高的定义独立出来放在一个头文件pitches.h里,然后在主程序里引用即可,下次需要同样的功能时,也可以直接拷贝调用该头文件。
代码如下:
//pitches.h 音高定义
//pitches.h 定义了不同音符对应的不同频率
#define NOTE_B0 31 //B0 ····7
#define NOTE_C1 33 //C1 ···1
#define NOTE_CS1 35 //C1#
#define NOTE_D1 37 //D1 ···2
#define NOTE_DS1 39 //D1#
#define NOTE_E1 41 //E1 ···3
#define NOTE_F1 44 //F1 ···4
#define NOTE_FS1 46 //F1#
#define NOTE_G1 49 //G1 ···5
#define NOTE_GS1 52 //G1#
#define NOTE_A1 55 //A1 ···6
#define NOTE_AS1 58 //A1#
#define NOTE_B1 62 //B1 ···7
#define NOTE_C2 65 //C2 ··1
#define NOTE_CS2 69 //C2#
#define NOTE_D2 73 //D2 ··2
#define NOTE_DS2 78 //D2#
#define NOTE_E2 82 //E2 ··3
#define NOTE_F2 87 //F2 ··4
#define NOTE_FS2 93 //F2#
#define NOTE_G2 98 //G2 ··5
#define NOTE_GS2 104 //G2#
#define NOTE_A2 110 //A2 ··6
#define NOTE_AS2 117 //A2#
#define NOTE_B2 123 //B2 ··7
#define NOTE_C3 131 //C3 ·1
#define NOTE_CS3 139 //C3#
#define NOTE_D3 147 //D3 ·2
#define NOTE_DS3 156 //D3#
#define NOTE_E3 165 //E3 ·3
#define NOTE_F3 175 //F3 ·4
#define NOTE_FS3 185 //F3#
#define NOTE_G3 196 //G3 ·5
#define NOTE_GS3 208 //G3#
#define NOTE_A3 220 //A3 ·6
#define NOTE_AS3 233 //A3#
#define NOTE_B3 247 //B3 ·7
#define NOTE_C4 262 //C4 1(中央C大调)
#define NOTE_CS4 277 //C4#
#define NOTE_D4 294 //D4 2
#define NOTE_DS4 311 //D4#
#define NOTE_E4 330 //E4 3
#define NOTE_F4 349 //F4 4
#define NOTE_FS4 370 //F4#
#define NOTE_G4 392 //G4 5
#define NOTE_GS4 415 //G4#
#define NOTE_A4 440 //A4 6
#define NOTE_AS4 466 //A4#
#define NOTE_B4 494 //B4 7
#define NOTE_C5 523 //C5 1·
#define NOTE_CS5 554 //C5#
#define NOTE_D5 587 //D5 2·
#define NOTE_DS5 622 //D5#
#define NOTE_E5 659 //E5 3·
#define NOTE_F5 698 //F5 4·
#define NOTE_FS5 740 //F5#
#define NOTE_G5 784 //G5 5·
#define NOTE_GS5 831 //G5#
#define NOTE_A5 880 //A5 6·
#define NOTE_AS5 932 //A5#
#define NOTE_B5 988 //B5 7·
#define NOTE_C6 1047 //C6 1··
#define NOTE_CS6 1109 //C6#
#define NOTE_D6 1175 //D6 2··
#define NOTE_DS6 1245 //D6#
#define NOTE_E6 1319 //E6 3··
#define NOTE_F6 1397 //F6 4··
#define NOTE_FS6 1480 //F6#
#define NOTE_G6 1568 //G6 5··
#define NOTE_GS6 1661 //G6#
#define NOTE_A6 1760 //A6 6··
#define NOTE_AS6 1865 //A6#
#define NOTE_B6 1976 //B6 7··
#define NOTE_C7 2093 //C7 1···
#define NOTE_CS7 2217 //C7#
#define NOTE_D7 2349 //D7 2···
#define NOTE_DS7 2489 //D7#
#define NOTE_E7 2637 //E7 3···
#define NOTE_F7 2794 //F7 4···
#define NOTE_FS7 2960 //F7#
#define NOTE_G7 3136 //G7 5···
#define NOTE_GS7 3322 //G7#
#define NOTE_A7 3520 //A7 6···
#define NOTE_AS7 3729 //A7#
#define NOTE_B7 3951 //B7 7···
#define NOTE_C8 4186 //C8 1····
#define NOTE_CS8 4435 //C8#
#define NOTE_D8 4699 //D8 2····
#define NOTE_DS8 4978 //D8#
上面大量的宏定义,是用宏的名字代替了频率名,对应到下图的键盘的按键上。同时,在上面宏的注释里,我加了相对应的简谱,方面不懂音乐的我们便于编程应用。
关于创建Arduino的头文件,在Arduino的IDE界面代码框的右上角的向下小三角处点击创建新标签,然后输入自己的头文件名称,记得加上“.h”扩展名。然后输入内容,再保存,便创建好一个头文件了。
3、arduino扬声器接线
注意:因为扬声器(或蜂鸣器)驱动电压要求比较小,远远小于5V,所以最好在扬声器上串联一个大于10uf的电解电容,电解电容负极连接喇叭的正极,电容正极连接另外一端。不接电容长时间使用,会烧毁扬声器。或者串联一个100Ω电阻也可以。
可以再串联一个电位器来调节电流大小,从而控制音量大小。
大概接线如下图所示:
4、音乐编程
在arduino程序里给音乐编程,重要的旋律函数和持续时间函数。
下面以《两只老虎》为例,编写一个播放《两只老虎》旋律的程序。
首先是《两只老虎》的简谱:
代码如下:
#include “pitches.h” //含有所有旋律音高宏定义的头文件
void setup(){
}
void loop(){
play();//播放音乐的命令
delay(300);
}
//旋律函数
int melody[]={
NOTE_C4, //1
NOTE_D4, //2
NOTE_E4, //3
NOTE_C4, //1
NOTE_C4, //1
NOTE_D4, //2
NOTE_E4, //3
NOTE_C4, //1
NOTE_E4, //3
NOTE_F4, //4
NOTE_G4, //5
NOTE_E4, //3
NOTE_F4, //4
NOTE_G4, //5
NOTE_G4, //5
NOTE_A4, //6
NOTE_G4, //5
NOTE_F4, //4
NOTE_E4, //3
NOTE_C4, //1
NOTE_G4, //5
NOTE_A4, //6
NOTE_G4, //5
NOTE_F4, //4
NOTE_E4, //3
NOTE_C4, //1
NOTE_D4, //2
NOTE_G3, //.5
NOTE_C4, //1
0,
NOTE_D4, //2
NOTE_G3, //.5
NOTE_C4, //1
0,
};
//持续时间函数
int noteDurations[]={
8,8,8,8,
8,8,8,8,
8,8,4,
8,8,4,
8,8,8,8,4,4,
8,8,8,8,4,4,
4,4,4,4,
4,4,4,4,
};
//播放命令
void play()
{
for(int thisNote = 0;thisNote<29;thisNote++){
//计算旋律持续时间
//1秒(1000ms)除以音符类型
//比如:四分音符:1000/noteDurations[thisNote],
//八分音符:1000/noteDurations[thisNote].
int noteDuration = 1000/noteDurations[thisNote];
tone(8,melody[thisNote], noteDuration);//播放音乐
//为了区别不同旋律,设置一个最小的间隔时间
//一般设置为旋律持续时间的130%比较合适
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
//停止当前旋律播放
noTone(8);
}
}
//end
效果如下:https://www.zhihu.com/video/1200743973633089536
arduino 嗡鸣器 音乐_arduino笔记一:用arduino实现蜂鸣器播放音乐相关推荐
- arduino 嗡鸣器 音乐_[求助]怎样实现红外遥控蜂鸣器播放音乐,求大神指正
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define NOTE_0 -1#define NOTE_A1 441 #define NOTE_A2 495 #define NOT ...
- arduino 嗡鸣器 音乐_Arduino 蜂鸣器音乐代码转化程序开发
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近在做利用蜂鸣器播放音乐的实验,其中环节有以下:1.查找需要播放的音乐简谱.2.对照简谱以及Arduino本身自带库里面的音乐实例toneMelody翻 ...
- arduino 嗡鸣器 音乐_【arduino】继续蜂鸣器音乐播放,arduinoIDE里调用音乐播放库...
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 昨天简单的介绍了一下蜂鸣器硬件和米思齐上如何演奏音乐(一种非常简单的用arduino控 ...
- Arduino 蜂鸣器播放音乐LED灯闪烁
一.实验所需组件: led灯 三脚蜂鸣器 面包板 Arduino开发板 杜邦线 二.实验原理 蜂鸣器实现音乐播放: 控制好频率和节拍,就能演奏出好听的音乐.因此,在实验之前要先弄清楚各音调的频率.可参 ...
- 一种非常简单的用arduino控制蜂鸣器播放音乐的方案
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天来聊聊用arduino控制蜂鸣器播放音乐的方案,当然必须还是老风格,虽然可能不是最 ...
- Arduino红外遥控无源蜂鸣器播放音乐
Arduino红外遥控无源蜂鸣器播放音乐/模拟电子琴 简介 关于频谱 实验材料 接线 实验代码 模拟电子琴 接线 代码 总结 原文链接:https://www.yourcee.com/newsinfo ...
- 【Arduino】一个按键开关控制RGB音乐彩灯(蜂鸣器播放音乐+按键控制播放暂停+RGB彩灯随音乐节奏跳动)
一.项目说明 这里我们需要使用到RGB LED.蜂鸣器.按键开关这个元件.为什么要叫RGB呢?是因为这个LED是由红(Red).绿(Green)和蓝(Blue)三种颜色组成.我们可以通过调整三个LED ...
- STM32F40实现 按键密码锁、按键控制LED 、串口选择菜单 、串口控制LED开关 、串口控制蜂鸣器开关及响度 、串口控制蜂鸣器播放音乐 、按键控制LED的亮度
本人第一次发文,很多都不懂,尤其害怕版权问题,如果有人质疑我有盗权行为,请联系我,因为项目也遇到很多问题,然后就解决嘛,可印象中只有播放音乐代码有借鉴,所以如果有质疑盗了权的,请务必联系我.板子是使用 ...
- 蜂鸣器播放音乐 fpga实现
目录 原理 实现 原理 蜂鸣器分为有源蜂鸣器和无源蜂鸣器,即以有无震荡源分类, 有震荡源直接通直流电就可发生,无震荡源则需要通震荡波才能发声. 这里介绍无源蜂鸣器播放音乐的方法. 思路: 利用计数器产 ...
- 【FPGA】五、蜂鸣器播放音乐
文章目录 前言 一.蜂鸣器简介 二.音频音符简介 三.任务要求 四.程序设计 1.设计思路 2.程序代码 总结 前言 蜂鸣器(Buzzer)是现代常用的一种电子发声器,主要用于产生声音信号.它是一种一 ...
最新文章
- 多窗体应用中的注意点
- Github-Hexo-theme-NexT
- 汇编语言Makefile
- c# vscode 配置_[VSCode插件推荐] Code Runner: 代码一键运行,支持超过40种语言
- 还不知道 AWS 是什么?这 11 个重点带你认识 AWS !
- 没有bug队——加贝——Python 47,48
- 求一个二维数组的最大子矩阵的和
- 通过onkeydown事件来控制只允许数字
- Android 性能优化——之控件的优化
- 传说中四个月的java速成“大法”,我见识到了,不过就是没啥用
- 输入一个仅含十二进制数的字符串输出二进制
- Python最吃香的5个就业方向,薪资收入也非常可观!
- 酷我音乐在计算机其他的图标怎么去掉,酷我音乐这个快捷方式怎么删除?
- 51单片机学习笔记——串口通信
- Windows MinWG 编译 thrift
- 护眼色RGB的数值及在福昕阅读器上的设置方法
- SVM简单非线性分类,画出分类面与支持向量(MATLAB)
- java word apache poi 操作word模板。
- 数据增加的两种方法(二)
- 安卓网易云信实现仿QQ双方聊天界面功能(附UI界面