arduino输出高电平能使arduino蜂鸣器代码响吗

Arduino&蜂鸣器
淘宝店铺:
实验器材:Arduino 168P 基础套件 互动媒体
1.Arduino 168P 开发板一个
&&&&&&&&&&2.USB下载线一条
3.蜂鸣器一个
&&&&&&&&&&4.220欧姆电阻1个
5.面包板一块
6.面包板跳线若干条
实验目的:学习蜂鸣器的工作原理,以及如何使用Arduino 控制蜂鸣器发出1KHz的声音。
实验电路:实验电路如下图所示
实验原理:蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、电话机、定时器等电子产品中作发声器件。蜂鸣器可以分为两种,一种是有源蜂鸣器、一种是无源蜂鸣器。在Arduino
168P基础套件中我们使用的是无源蜂鸣器,无源蜂鸣器工作的理想信号是方波。注:无源蜂鸣器接直流电压是不会工作的。那么我们如何利用Arduino产生方波来控制蜂鸣器发出频率为1KHz声音呢?
周期T与频率f&&&
公式:T=1/f
周期T=1/1000Hz=1ms&
下图为产生频率为1KHz的方波脉冲
这里我们介绍一中新的延时函数
delayMicroseconds(pulsewidth); //pulsewidth延时脉冲宽度值的微秒数
1ms=1000um。我们只要把pin13口(这里我选择了pin13是根据上边的电路说明的,实际中你可以选择其他数字几口)持续0.5ms的高电平然后再持续0.5ms的地电平就可以了。
实验步骤:
按照以上电路正确搭建实验电路。
将我提供的调试程序下载到Arduino开发板中。
通过蜂鸣器发出的声音检验实验效果。
实验程序:
int fmpin=13;& //设置蜂鸣器数字接口13
void setup()
& pinMode(fmpin,OUTPUT);
void loop()
&for(i=0;i&200;i++)&&
//蜂鸣器响声持续时间
digitalWrite(fmpin,HIGH);&&
//产生1KHz的脉冲
& delayMicroseconds(500);
& digitalWrite(fmpin,LOW);
& delayMicroseconds(500);
digitalWrite(fmpin,LOW);&&&
//将蜂鸣器13口电压拉低1秒
& delay(1000);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置:&&
本页文章导读:
&&&&?Bad request for field slot 0,1.异常 &&&&&& Bad request for field slot 0,-1.错误
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(BlackList.TABLE_NAME);
String[] columns = {BlackList._ID,
BlackList.PANY,BlackList.ID_NUMBER,BlackList.PHO......&&&&? arduino蜂鸣器例证,arduino蜂鸣器例子 &&&&&& arduino蜂鸣器例子,arduino蜂鸣器例子
arduino蜂鸣器例子,arduino蜂鸣器例子,arduino蜂鸣器例子
今天学习蜂鸣器例子:
连接图如下:
效果是间隔几秒滴一声;
代码如下:
fengmingqi_id=12;
void s......&&&&? 让软盘消不和出现&&&&&& 让软盘消失和出现
在程序中加入以下代码时,软键盘会出现:
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.RESULT_SHOWN);
.csharpcode, .cs......
&&&&&&最新IT科技资讯推荐:
[1]Bad request for field slot 0,1.异常
&&&&来源:&互联网& 发布时间:&
Bad request for field slot 0,-1.错误
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(BlackList.TABLE_NAME);
String[] columns = {BlackList._ID,
BlackList.PANY,BlackList.ID_NUMBER,BlackList.PHONE
cursor = queryBuilder.query(mDB, columns, null, null, null, null, BlackList.ORDER_BY_DEFAULT);
由于返回的colums 字段数组中不存在你想要的字段,就会报这个错误。
bad request 。
[2] arduino蜂鸣器例证,arduino蜂鸣器例子
&&&&来源:&互联网& 发布时间:&
arduino蜂鸣器例子,arduino蜂鸣器例子
arduino蜂鸣器例子,arduino蜂鸣器例子,arduino蜂鸣器例子
今天学习蜂鸣器例子:
连接图如下:
效果是间隔几秒滴一声;
代码如下:
fengmingqi_id=12;
void setup(){
pinMode(fengmingqi_id,OUTPUT);
void loop(){
for(int i=0;i&200;i++)
digitalWrite(fengmingqi_id,HIGH);
delayMicroseconds(1000);
digitalWrite(fengmingqi_id,LOW);
delay(1000);
[3] 让软盘消不和出现
&&&&来源:&互联网& 发布时间:&
让软盘消失和出现
在程序中加入以下代码时,软键盘会出现:
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.RESULT_SHOWN);
.csharpcode, .csharpcode pre { font-size: color: font-family: consolas,"Courier New",courier, background-color: rgb(255, 255, 255); }.csharpcode pre { margin: 0 }.csharpcode .rem { color: rgb(0, 128, 0); }.csharpcode .kwrd { color: rgb(0, 0, 255); }.csharpcode .str { color: rgb(0, 96, 128); }.csharpcode .op { color: rgb(0, 0, 192); }.csharpcode .preproc { color: rgb(204, 102, 51); }.csharpcode .asp { background-color: rgb(255, 255, 0); }.csharpcode .html { color: rgb(128, 0, 0); }.csharpcode .attr { color: rgb(255, 0, 0); }.csharpcode .alt { background-color: rgb(244, 244, 244); width: 100%; margin: 0 }.csharpcode .lnum { color: rgb(96, 96, 96); }
如果要让软键盘消失,则为以下代码:
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
最新技术文章:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,站长邮箱:www_169it_(请将#改为@)Arduino教程 Lesson 4 -- 互动交通信号灯
该教程实验平台:
上一篇教程:
简单回顾下Lesson 3的内容:
for循环语句的使用x++是什么意思?
有没有试着做上面那个课后作业呢?做出来的话,说明你已经基本掌握上面所学的东西了,如果不会也没关系,我相信,看完这个章节,前面那个问题就不攻自破了!我们这回就基于上面这个交通灯来进行一个拓展,增加一种行人按键请求通过马路的功能。当按钮被按下时,Arduino会自动反应,改变交通灯的状态,让车停下,允许行人通过。
这个项目中,我们开始要实现Arduino的互动了,也会在代码学习到如何创建自己的函数。这次的代码相对长一点,耐下心来,等看完这一章,相信你能收获不少!
我们之后在所需元件中将不再重复罗列以下三样,UNO、扩展板+面包板、跳线。但是!每次都还是需要用到的。
STEP1: 所需元件
这里5个LED灯,为什么会用到了6个电阻呢?我们知道5个电阻是LED的限流电阻。还有一个电阻是给按钮的,它叫做。
STEP2: 硬件连接
按下图的连线图连接你的电路。特别要注意的是,这次连线比较多,注意不要插错。下图中,面包板上标出淡绿色的不是跳线,只是为了说明纵向的孔导通,避免你插错。给Arduino上电前认真检查你的接线是否正确。在连线时,保持电源是断开的状态,也就是没有插USB线。
STEP 3: 输入代码打开Arduino IDE,输入下面这段代码。
//项目三 -- 互动交通信号灯
int carRed = 12; //设置汽车灯
int carYellow = 11;
int carGreen = 10;
int button = 9; //按钮引脚
int pedRed = 8; //设置行人灯
int pedGreen = 7;
int crossTime = 5000;//允许行人通过的时间
unsigned long changeT//按钮按下后的时间
void setup() {
& &&&//所有LED设置为输出模式
& && &pinMode(carRed, OUTPUT);
& && &pinMode(carYellow, OUTPUT);
& && &pinMode(carGreen, OUTPUT);
& && &pinMode(pedRed, OUTPUT);
& && &pinMode(pedGreen, OUTPUT);
& && &pinMode(button, INPUT); //按钮设置为输入模式
& && &digitalWrite(carGreen, HIGH); //开始时,汽车灯绿灯
& && &digitalWrite(pedRed, HIGH);&&//行人灯为红灯
}
void loop() {
& &&&int state = digitalRead(button);
& &&&//检测按钮是否被按下,并且是否距上次按下后有5秒的等待时间
& &&&if(state == HIGH && (millis() - changeTime)& 5000){
& && && && && & //调用变灯函数
& && && && && &changeLights();
& && & }
}
void changeLights() {
& && & digitalWrite(carGreen, LOW); //汽车绿灯灭
& && & digitalWrite(carYellow, HIGH); //汽车黄灯亮
& && & delay(2000); //等待2秒
& && && && && &
& && & digitalWrite(carYellow, LOW); //汽车黄灯灭
& && & digitalWrite(carRed, HIGH); //汽车红灯亮
& && & delay(1000); //为安全考虑等待1秒
& && && && && &
& && & digitalWrite(pedRed, LOW); //行人红灯灭
& && & digitalWrite(pedGreen, HIGH); //行人绿灯亮
& && & delay(crossTime); //等待一个通过时间
& && && && && &
& && & //闪烁行人灯绿灯,提示可过马路时间快到
& && & for (int x=0; x&10; x++) {
& && && && && &digitalWrite(pedGreen, HIGH);
& && && && && &delay(250);
& && && && && &digitalWrite(pedGreen, LOW);
& && && && && &delay(250);
& && &&&}& && && && && && && && &
& && &&&digitalWrite(pedRed, HIGH);//行人红灯亮
& && &&&delay(500);
& && &&&digitalWrite(carRed, LOW); //汽车红灯灭
& && &&&digitalWrite(carYellow, HIGH); //汽车黄灯亮& && &&&
& && &&&delay(1000);
& && &&&digitalWrite(carYellow, LOW); //汽车黄灯灭
& && &&&digitalWrite(carGreen, HIGH); //汽车绿灯亮
& && &&&changeTime = millis(); //记录自上一次灯变化的时间
& && &&&//返回到主函数循环中
}复制代码下载完成后,可以尝试按下按钮。看看是个什么的效果?我们可以看到整个变化过程是这样的——开始时,汽车灯为绿灯,行人灯为红灯,代表车行人停。一旦行人,也就是你,按下按钮,请求过马路,那么行人灯就开始由红变绿,汽车灯由绿变黄,变红。在行人通行的过程中,设置了一个过马路的时间crossTime,一旦到点,行人绿灯开始闪烁,提醒行人快速过马路。闪烁完毕,最终,又回到了开始的状态,汽车灯为绿灯,行人灯为红灯。
整段代码看起来很复杂,其实理清一下思路并不难。如果你还是没有办法理不清里面变化关系的话,可以试着画一个示意图,像Lesson 3的课后作业那样,这样一来可能会方便你理解程序。
STEP 4: 代码回顾
通过前面两个项目,你应该能够理解这个代码的大部分内容。代码开始是一串的变量的声明,在声明中,出现了一个新名词。这里就解释一下这个新名词:
unsigned long changeT复制代码这是一个新的变量类型。我们之前,只创建过int整型变量。这次要创建的是一个long的变量类型,它可以存放更大的数。而unsigned long表示不存储负数。
如果我们使用一个int型的话,信号灯状态变化的时间,它只能存储最大32秒(int决定的),一旦出现变量溢出就会造成程序运行出现错误,所以,为了避免这样的情况,要选用能存储更大数的一个变量,并且不为负,我们就可以考虑使用unsigned long型。算了下,这个变量最大能存储的数累计时间可达49天。
怎么理解这个变量呢?我们做个这样的比方,变量好比一个盒子,盒子的空间用来存放东西的,想要放的东西一定要比盒子小,那样才放的下,否则会溢出。变量也是一样,你存储的数据一定要在变量的范围内,否则会出现溢出。所以也就是为什么我们这里要用unsigned long,而不用int的原因。变量开始如果没有赋初值的话,默认从0开始。(对变量类型如果感兴趣可以查看中的Data Types部分)
随即进入setup()函数,对LED和按钮进行一些设置,在设置时,需要注意到的是:
pinMode(button, INPUT);复制代码pinMode()函数我们已经很熟悉了,在的时候就介绍过,只是和LED有所不同的是,按钮要设置为INPUT。
简单说下,我理解的INPUT和OUTPUT。
我是这么理解的,INPUT是输入的信号,是外部往控制器输入信号的。可以理解为像键盘,鼠标,他们都是给电脑(控制器)输入信号的。比如按钮,它就是典型的 INPUT模式,它需要我们按下按键后,控制器才能接收到外部给它的指令。
而OUTPUT是往外输出信号的。可以理解为电脑的显示屏,它是电脑往外输出信号的。这是就为什么LED使用OUTPUT,它闪烁的过程就是向外部发出信号的过程。我们之后会用到的蜂鸣器(一个会发出声音的玩意儿),也是典型的OUTPUT。
在setup()函数中,先给定行人灯和汽车灯的一个初始状态:
digitalWrite(carGreen, HIGH); //开始时,汽车灯绿灯
digitalWrite(pedRed, LOW);& & //行人灯为红灯复制代码
进入到的主程序中的第一句,就是来检测button(引脚9)的状态的:
int state = digitalRead(button);复制代码此时,一个新函数出现了——digitalRead()!
Arduino官方:
pinMode()与digitalWrite()、digitalRead()的关系
一开始总是在什么时候用digitalWrite(),什么时候又该用digitalRead()中迷惑。后来我自己把自己给说服了,我是这么理解它们的关系,前面说了INPUT和OUTPUT的区别。digitalWrite和digitalRead是基于这个的基础上说的。有了前面设置的INPUT,才能有后面的ditialRead。有了外部数据的输入,才存在控制器对输入数据的读取。同样,OUTPUT对应的后面要用digitalWrite。既然需要向外部输出信号,那么首先控制器要给它先写入信号啊——digitalWrite!我不知道有没有把他们之间的关系讲清楚,但愿说清楚了。。
我列了这么个表便于初学者参考吧!
好了,digitalRead后就是对按键的值进行判断了。
if(state == HIGH && (millis() - changeTime)& 5000) {
& && && && && & //调用变灯函数
& && && && && & changeLights();
}
复制代码这里涉及新的语句-- if语句。if语句是一种条件判断的语句,判断是否满足括号内的条件,如满足则执行花括号内的语句,如不满足则跳出if语句。
if语句格式如下:
if(表达式){
& & 语句;
表达式是指我们的判断条件,通常为一些关系式或逻辑式,也可是直接表示某一数值。如果if表达式条件为真,则执行if中的语句。表达式条件为假,则跳出if语句。
我们代码中,第一个条件是state变量为HIGH。如果按键被按下,state就会变为HIGH。第二个条件是millis()的值减changeTime的值大于5000。这两个条件之间有个“&&”符号。这是一种逻辑运算符,表示的含义是两者同时满足。
&& ——&&逻辑与&&(两者同时满足)||& &&&——&&逻辑或&&(两者其中一个满足)!& &——&&逻辑非&&(取反,相反的情况)
(millis() - changeTime)& 5000)复制代码
millis()是一个函数,该函数是Arduino语言自有的函数,它返回值是一个时间,Arduino开始运行到执行到当前的时间,也称之为机器时间,就像一个隐形时钟,从控制器开始运行的那一刻起开始计时,以毫秒为单位。
这里是,通过millis()函数不断记录时间,判断两次按键之间的时间是不是大于5秒,如果在5秒之内不予反应。这样做的目的是,防止重复按键而导致的运行错误。
if语句内只有一个函数:
changeLights();复制代码这是一个函数调用的例子。该函数单独写在了loop()函数之外。我们需要使用的时,直接写出函数名就可以实现调用了。运行完之后,再跳回主函数。需要特别注意的:函数调用时,函数名后面的括号不能省,要和所写的函数保持一致。changeLights() 函数内部就不做说明了。
STEP5: 硬件回顾
按键一共有4个引脚,下面分别显示了正面与背面。而再下面一张则说明了按键的工作原理。一旦按下后,左右两侧就被导通了,而上下两端始终导通。&&
& && && && && && && &
上图传达的意思是,按钮就是起到一个通断的作用。在我们这个,按钮控制数字引脚是否接高(接5V)。按下的话,数字引脚9就能检测到为高电平。否则就是保持一个低电平的状态(接GND)。
下一篇教程:
如有写的不对,也望各位大仙批评指正~
如果有没看懂的,当然也欢迎回帖啦~
本帖子中包含更多资源
才可以下载或查看,没有帐号?
好用心的发帖、。
谢谢分享!
非常详细,有空试一下。
程序有个地方弄反了,刚开始行人灯的红灯应该是HIGH,楼主写的是LOW
程序有个地方弄反了,刚开始行人灯的红灯应该是HIGH,楼主写的是LOW
为什么按键开关要接地
为什么按键开关要接地
是呀 常态接地,按下接5V
谢谢分享!
谢谢分享!
Jane老师的帖子都是非常用心去写的,怒赞!
是呀 常态接地,按下接5V
按下接5V为什么啊?
按下接5V为什么啊?
按下和5V导通,测得的就是高电平。没有按下的时候,接地,测得是低电平
是呀 常态接地,按下接5V
接引脚不行吗?引脚常态也是5V~
接引脚不行吗?引脚常态也是5V~
你是直接让引脚输出高电平,是这个意思吗?
接引脚不行吗?引脚常态也是5V~
你怎么接线的,拍张照片看得清楚点
你是直接让引脚输出高电平,是这个意思吗?
是的,直接让引脚输入高电平。因为我记得入门教程里讲到给LED灯接的引脚就是5V。
但我自己试验了一下,给按钮使用引脚输入,是不行的。不知道为什么,同样都是5V
是的,直接让引脚输入高电平。因为我记得入门教程里讲到给LED灯接的引脚就是5V。
但我自己试验了一下,给 ...
那可能是电流不够,虽然有电压,电流不够也是不行的。
Q1:“(millis()-changeTime)”这句判断连续按两次按钮时间必须大于5秒的解释不准确,而是信号灯重新变绿后至少要亮5s(这期间连续按键时间小于5s不予反应),之后再继续调用changeLights函数。
Q2:如果不按按钮,信号灯应该正常工作写个else分支,由绿变红变黄——绿变红变黄——。。。如何在进入else语句后判断btn情况,再break掉,进入changeLight函数。
本帖最后由 a 于
21:31 编辑
等级管理员
创造力3471
萌萌哒新人
楼主的其它帖子
蓝牙控制有那么难么试试看你就知道了!
2016年3月新品试用来啦
介绍如何使用英特尔(R) Edison 平台构建带视频的漫游小车
浓缩了2015一整年满满黑科技的干货,不要错过哦~
DFRobot中文商城,五一福利来袭。
欢乐的五一节劳动节日又到了,DFROBOT为回馈新老客
上海智位机器人股份有限公司
Powered byArduino学习心得-简单制作各种歌曲_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Arduino学习心得-简单制作各种歌曲
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
你可能喜欢Arduino 无源蜂鸣器 音乐播放实验 - 推酷
Arduino 无源蜂鸣器 音乐播放实验
上两次实验做了有源蜂鸣器的按键响声控制和无源蜂鸣器的报警声控制,这次尝试做Mid音乐播放,还好有点乐理知识,吹拉弹类的乐器都会点,最要做好音符对应的频率,节拍对应的间隔时间,就能做Mid音乐了。
无源蜂鸣器:一种一体化结构的电子讯响器,分为有源蜂鸣器与无源蜂鸣器。这里的“源”不是指电源,而是指震荡源,有源蜂鸣器内部带震荡源,所以只要一通电就会响,而无源内部不带震荡源,所以如果仅用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。从外观上看,两种蜂鸣器区别不大,但将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。
电路及原理图都非常简单,这里用《欢乐颂》做测试。
#define D0 -1
#define D1 262
#define D2 293
#define D3 329
#define D4 349
#define D5 392
#define D6 440
#define D7 494
#define M1 523
#define M2 586
#define M3 658
#define M4 697
#define M5 783
#define M6 879
#define M7 987
#define H1 1045
#define H2 1171
#define H3 1316
#define H4 1393
#define H5 1563
#define H6 1755
#define H7 1971
//列出全部D调的频率
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//列出所有节拍
int tune[]=
//根据简谱列出各频率
M3,M3,M4,M5,
M5,M4,M3,M2,
M1,M1,M2,M3,
M3,M3,M4,M5,
M5,M4,M3,M2,
M1,M1,M2,M3,
M2,M2,M3,M1,
M2,M3,M4,M3,M1,
M2,M3,M4,M3,M2,
M1,M2,D5,D0,
M3,M3,M4,M5,
M5,M4,M3,M4,M2,
M1,M1,M2,M3,
float durt[]=
//根据简谱列出各节拍
1+0.5,0.5,1+1,
1+0.5,0.5,1+1,
1,0.5,0.5,1,1,
1,0.5,0.5,1,1,
1,1,1,0.5,0.5,
1+0.5,0.5,1+1,
int tonepin=5;
//得用5号接口
void setup()
pinMode(tonepin,OUTPUT);
length=sizeof(tune)/sizeof(tune[0]);
//计算长度
void loop()
for(int x=0;x&x++)
tone(tonepin,tune[x]);
delay(500*durt[x]);
//这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
noTone(tonepin);
delay(2000);
下次再尝试用64和弦的喇叭,演奏更精彩的音乐。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 arduino蜂鸣器唱歌 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信