本文共 2149 字,大约阅读时间需要 7 分钟。
本节书摘来自异步社区《Arduino实战》一书中的第2章,第2.2节,作者 【美】Martin Evans , Joshua Noble , Jordan Hochenbaum ,译者 况琪,更多章节内容可以访问云栖社区“异步社区”公众号查看。
现在你的程序已经开始工作了,伴随着LED一个接一个地点亮和熄灭,下面我们要添加一个按钮,来控制这电路了。这个按钮用来启动和停止LED序列的闪烁。
电路图如图2-7所示。你需要保留最初版本的电路,并再添加一个按钮(S1)和一个阻值为10 kΩ的电阻(R6)就可以了。
在你看懂了修改过的电路图之后,就可以把新的元件添加到面包板上了。
首先,将Arduino从USB电缆上断开,然后将按钮安装到面包板上,如图2-8所示。请注意如何将其跨接在面包板中间。电阻R6是一个下拉电阻,在按钮未被按下的时候,它能防止D2的输入浮空,而将D2的输入下拉到地(GND),也就是低电平。当按钮按下的时候,D2的输入会接到5 V,也就是高电平。
图2-9展示了在面包板上组装完成后的电路。Arduino的供电由连接在计算机上的USB电缆提供。
上拉电阻和下拉电阻在包含按钮的电路中,上拉电阻和下拉电阻的使用是十分普遍的,它可以防止由电气噪声或干扰带来的错误信号。这个电阻将输入口的电平保持在与程序检测电位相反的电平上。一个上拉电阻将电平上拉到5 V,一个下拉电阻将电平下拉到地。
当你连接好按钮和增加的电阻后,就可以来处理一下代码这边的工作了。在这个程序里,我们要使用Arduino中一个专门的特性,称为中断。
Arduino的中断非常强大,它可以在任何时候打断程序流程的执行。中断就像你就要走进浴室时突然有人按门铃一样——你必须马上处理它。Arduino也是一样的,一旦中断信号发出,你的程序就要马上去处理它。
标准的Arduino可以使用最多两个中断,但在这个项目中,你只会用到一个。当按钮被按下时就会发生一个中断,第一次按下按钮会时LED序列停止闪烁,再按一次则会使其重新开始闪烁,以此类推。
下列代码清单就是新版的程序。你可以在现有程序的基础上修改,也可以再新建一个程序。
代码清单2-2 开始-停止显示
标准的Arduino有两个中断:中断0绑定在2号数字引脚,中断1绑定在3号数字引脚。Arduino Mega还有4个额外的中断:中断2绑定在21号数字引脚,中断3绑定在20号数字引脚,中断4绑定在19号数字引脚,中断5绑定在18号数字引脚。
注意 函数attachInterrupt(interrupt, function, mode)有3个参数。第一个参数是中断号,可以设置为0或者1;第二个参数是中断调用的函数,必须是一个无参数无返回值的函数;第三个参数是产生中断的模式。中断模式可赋下列4种值:设置LOW时,中断在引脚电平为低时触发;设置为CHANGE时,中断在引脚电平改变时触发;设置为RISING时,中断在引脚电平从低电平变为高电平时触发;设置为FALLING时,中断在引脚电平从高电平变为低电平时触发。
抖动消除在中断服务程序,也就是ledOnOff()函数中,我们还添加了一些代码,用于处理机械按钮中存在的抖动(bounce)问题。当按钮被按下时,在它从断开状态转换到闭合状态的瞬间,其中机械部件的接触并不完美,而是会产生一系列被称为抖动的干扰信号,导致与之相连的引脚电位高低变化数次后才最终稳定。按钮通常需要10 ms~50 ms才能最终稳定,但当你观察到一些奇怪的结果并怀疑其是由于抖动造成的时,你也可以尝试将这个时间改得更长一些。
警告 很多人认为中断是一个高级技巧,但只要你够仔细,应该可以毫无障碍地使用它。在中断服务程序中,让你的程序代码尽可能小巧,这将会避免你在程序的其他部分遇到预料之外的事情。另外一个警告就是,你不能在中断服务程序中使用delay函数。
接下来让我们一起来测试我们最新的程序吧。
将Arduino通过USB电缆连接到你的计算机。确保你的程序已经被正确编译,然后将其写入到Arduino中。当程序烧写完成后,所有LED都处于熄灭状态,直到你按下按钮。尝试着多按几次按钮,观察LED序列如何开始和停止。
保留原来的电路不动,现在把一个break语句添加到你的程序中。break``指令用于跳出一个循环或者switch语句。你利用它停止LED序列并保持LED的点亮状态,直到再次按下按钮,所以如果你在已经点亮3个LED的时候按下按钮,这3个LED就会一直处于点亮状态,直到再次按下按钮,序列才会继续循环点亮。
下列代码清单给出了使用break语句的新版程序。
代码清单2-3 添加break语句
下面要检查一下你的程序能否正常工作。
确保你的程序已经正确地编译,然后烧写并测试它。当按下按钮时,闪烁的LED序列应该会暂停,再次按下按钮,序列应该重新开始循环。
是时候让你的项目进入到下一个阶段了。你要来制作一个反应测试仪。
转载地址:http://dryax.baihongyu.com/