Arduino开发版学习计划--蜂鸣器
文章内容参考:http://www.cnblogs.com/xiaowuyi/p/3343757.html
遇到不懂的方法,可以查看Arduino自带的API
就直接点击arduino的IDE里面菜单的Help(帮助)按钮里面的reference(参考)按钮,你就会发现arduino的Api(arduino说明书)
无源蜂鸣器:一种一体化结构的电子讯响器,分为有源蜂鸣器与无源蜂鸣器。这里的“源”不是指电源,而是指震荡源,有源蜂鸣器内部带震荡源,所以只要一通电就会响,而无源内部不带震荡源,所以如果仅用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。从外观上看,两种蜂鸣器区别不大,没有电路板而用胶封闭的一种是有源蜂鸣器。
首先写一段代码让蜂鸣器发声:
- int tonepin=;//设置控制蜂鸣器的数字13脚
- void setup()
- {
- pinMode(tonepin,OUTPUT);//设置数字IO脚模式,OUTPUT为输出
- }
- void loop()
- {
- unsigned char i,j;
- while()
- {
- for(i=;i<;i++)//输出一个频率的声音
- {
- digitalWrite(tonepin,HIGH);//发声音
- delay();//延时1ms
- digitalWrite(tonepin,LOW);//不发声音
- delay();//延时ms
- }
- for(i=;i<;i++)//输出另一个频率的声音,这里的100与前面的80一样,用来控制频率,可以自己调节
- {
- digitalWrite(tonepin,HIGH);
- delay();
- digitalWrite(tonepin,LOW);
- delay();
- }
- }
}
从上面的代码可以看出,for语句中的80、100控制了频率,delay控制了时长,类似与音乐中的节拍。
无线蜂鸣器演奏音乐
从上面的实验看,如果我们能够控制好频率和节拍,那就有可能演奏出动听的音乐。因此,我们首先需要搞清楚各音调的频率,具体见下表:
低音:
音调 音符 |
1# |
2# |
3# |
4# |
5# |
6# |
7# |
A |
221 |
248 |
278 |
294 |
330 |
371 |
416 |
B |
248 |
278 |
294 |
330 |
371 |
416 |
467 |
C |
131 |
147 |
165 |
175 |
196 |
221 |
248 |
D |
147 |
165 |
175 |
196 |
221 |
248 |
278 |
E |
165 |
175 |
196 |
221 |
248 |
278 |
312 |
F |
175 |
196 |
221 |
234 |
262 |
294 |
330 |
G |
196 |
221 |
234 |
262 |
294 |
330 |
371 |
中音:
音调 音符 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
A |
441 |
495 |
556 |
589 |
661 |
742 |
833 |
B |
495 |
556 |
624 |
661 |
742 |
833 |
935 |
C |
262 |
294 |
330 |
350 |
393 |
441 |
495 |
D |
294 |
330 |
350 |
393 |
441 |
495 |
556 |
E |
330 |
350 |
393 |
441 |
495 |
556 |
624 |
F |
350 |
393 |
441 |
495 |
556 |
624 |
661 |
G |
393 |
441 |
495 |
556 |
624 |
661 |
742 |
高音:
音调 音符 |
1# |
2# |
3# |
4# |
5# |
6# |
7# |
A |
882 |
990 |
1112 |
1178 |
1322 |
1484 |
1665 |
B |
990 |
1112 |
1178 |
1322 |
1484 |
1665 |
1869 |
C |
525 |
589 |
661 |
700 |
786 |
882 |
990 |
D |
589 |
661 |
700 |
786 |
882 |
990 |
1112 |
E |
661 |
700 |
786 |
882 |
990 |
1112 |
1248 |
F |
700 |
786 |
882 |
935 |
1049 |
1178 |
1322 |
G |
786 |
882 |
990 |
1049 |
1178 |
1322 |
1484 |
我们知道了音调的频率后,下一步就是控制音符的演奏时间。每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来。
音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。
从简谱看,该音乐是D调的,这里的各音符对应的频率对应的是上表中D调的部分。另外,该音乐为四分之四拍,每个对应为1拍。几个特殊音符说明如下:
第一,普通音符。如第一个音符3,对应频率350,占1拍。
第二,带下划线音符,表示0.5拍。
第三,有的音符后带一个点,表示多加0.5拍,即1+0.5
第四,有的音符后带一个—,表示多加1拍,即1+1
第五,有的两个连续的音符上面带弧线,表示连音,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更流畅,其实不做处理,影响也不大。
- #define NTD0 -1
- #define NTD1 294
- #define NTD2 330
- #define NTD3 350
- #define NTD4 393
- #define NTD5 441
- #define NTD6 495
- #define NTD7 556
- #define NTDL1 147
- #define NTDL2 165
- #define NTDL3 175
- #define NTDL4 196
- #define NTDL5 221
- #define NTDL6 248
- #define NTDL7 278
- #define NTDH1 589
- #define NTDH2 661
- #define NTDH3 700
- #define NTDH4 786
- #define NTDH5 882
- #define NTDH6 990
- #define NTDH7 112
- //c pinlv
- #define WHOLE 1
- #define HALF 0.5
- #define QUARTER 0.25
- #define EIGHTH 0.25
- #define SIXTEENTH 0.625
- int tune[]=
- {
- NTD3,NTD3,NTD4,NTD5,
- NTD5,NTD4,NTD3,NTD2,
- NTD1,NTD1,NTD2,NTD3,
- NTD3,NTD2,NTD2,
- NTD3,NTD3,NTD4,NTD5,
- NTD5,NTD4,NTD3,NTD2,
- NTD1,NTD1,NTD2,NTD3,
- NTD2,NTD1,NTD1,
- NTD2,NTD2,NTD3,NTD1,
- NTD2,NTD3,NTD4,NTD3,NTD1,
- NTD2,NTD3,NTD4,NTD3,NTD2,
- NTD1,NTD2,NTDL5,NTD0,
- NTD3,NTD3,NTD4,NTD5,
- NTD5,NTD4,NTD3,NTD4,NTD2,
- NTD1,NTD1,NTD2,NTD3,
- NTD2,NTD1,NTD1
- };
- float durt[]=
- {
- ,,,,
- ,,,,
- ,,,,
- +0.5,0.5,+,
- ,,,,
- ,,,,
- ,,,,
- +0.5,0.5,+,
- ,,,,
- ,0.5,0.5,,,
- ,0.5,0.5,,,
- ,,,,
- ,,,,
- ,,,0.5,0.5,
- ,,,,
- +0.5,0.5,+,
- };
- int length;
- int tonepin=;
- int ledp=;
- void setup()
- {
- pinMode(tonepin,OUTPUT);
- pinMode(ledp,OUTPUT);
- length=sizeof(tune)/sizeof(tune[]);
- }
- void loop()
- {
- for(int x=;x<length;x++)
- {
- tone(tonepin,tune[x]);
- digitalWrite(ledp, HIGH);
- delay(*durt[x]);//与前一代码不同之处,这里将原来的500分为了400和100,分别控制led的开与关,对于蜂鸣器来说依然是500.
- digitalWrite(ledp, LOW);
- delay(*durt[x]);
- noTone(tonepin);
- }
- delay();
- }
Arduino开发版学习计划--蜂鸣器的更多相关文章
- Arduino开发版学习计划
制定学习开发版的计划,今天先大体过一下整个教程. http://www.bilibili.com/video/av6105302/ 视频中说可以自己制造亦可卫星放上天. Arduino使用C/C++编 ...
- Arduino开发版学习计划--蓝牙控制小车行走
蓝牙模块一共6个引脚,我们一般只需要接4个线就可以了,分别是VCC.GND.TXD.RXD这四个引脚,我们分别接到arduino板子上,VCC接3.3V,GND接板子的GND,蓝牙TXD接板子的RXD ...
- Arduino开发版学习计划--直流电机
代码来源:http://www.cnblogs.com/starsnow/p/4579547.html // --------------------------------------------- ...
- Arduino开发版学习计划--小车的行走
小车的前进后退,左右转弯 代码如下 void motor(char pin,char pwmpin,char state,int val) { pinMode(pin, OUTPUT); ) { an ...
- 酒旗少年狂暖风,至0基本的前端开发project教师们学习计划
酒旗风暖少年狂,为0基础前端开发project师做学习计划 夜幕降暂时.走到一张废弃已久的书桌前,打开台灯,看到书桌上已经布满灰尘,而桌上的那盆羸弱的文竹已经枝繁叶茂.我擦干净了桌面,坐了下来,把买回 ...
- Sql Server 2008开发版(Developer Edition)过期升级企业版(Enterprise Edition)失败后安装学习版(Express Edition)
最近一个多月,甚是悠哉,无事可做.上线的网站系统也没接到客户的反馈,反而觉得无聊之极了.上周五早上,一上QQ,就收到客户发来消息,管理平台无法登陆了.心里一惊,立马开始查找故障原因.翻看了系统日志,提 ...
- 治愈 JavaScript 疲态的学习计划【转载】
来源:伯乐在线 - Rose Wang 像其他人一样,最近我读了 Jose Aguinaga 的文章 <How it feels to learn JavaScript in 2016>. ...
- ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
随机推荐
- Spring Cloud(九):分布式配置中心和消息总线
我们在Spring Cloud(七):使用SVN存储分布式配置中心文件和实现refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码 ...
- 从 "org.apache.hadoop.security.AccessControlException:Permission denied: user=..." 看Hadoop 的用户登陆认证
假设远程提交任务给Hadoop 可能会遇到 "org.apache.hadoop.security.AccessControlException:Permission denied: use ...
- QSettings 使用实例 当需要在程序关闭时保存”状态“信息
用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现. 我们知 ...
- Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结
Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结 1. 数据结构( 树形结构,表形数据,对象结构 ) 1 2. 编程语言中对应的数据结构 jav ...
- android.animation(7) - android:animateLayoutChanges属性和LayoutTransition
前篇给大家讲了LayoutAnimation的知识,LayoutAnimation虽能实现ViewGroup的进入动画,但只能在创建时有效.在创建后,再往里添加控件就不会再有动画.在API 11后,又 ...
- vue-router介绍
vue-router学习 转自:https://my.oschina.net/u/1416844/blog/849971 1. vue-router介绍 vue-router把react-router ...
- Django And Django-Rest-Framework 异常记录
1.TypeError: init() takes 1 positional argument but 2 were given
- Odoo 8.0 new API 之model 装饰
model装饰器的作用是返回一个集合列表 应用举例: 定义columns langs = fields.Selection(string="Lang",selection=&quo ...
- ubuntu 12.04下apache 配置家目录地址
apache2 最在搞前端相关的东西,上一次也记录了 Linux 下 LAMP环境的搭建,现在记录一下如果改变 apache2 的家目录地址该怎么做,改那个配置文件 修改配置文件 /etc/apach ...
- [Linux]Linux应用程序中添加强制中断处理
注册Ctrl+C的按键signal信号捕捉,在捕捉到该动作后,强制退出应用程序 void handle_sig(int num) { printf( "%s\n", __func_ ...