迷你强 发表于 2012-5-28 13:53:29

Arduino入门教程--第四课--按钮控制的LED延时开关

想来大家也完了几天的LED了,总感觉用程序控制LED不是很爽,不能实打实的人机互动,所以,今天制作了一期,人机互动的例子带给大家:用按钮控制LED。但是呢,不能把按钮单纯的作为开关,一按就亮,一放就灭,那样大家会鄙视我的,把Arduino控制器拿掉依旧有效,所以呢,我们提高了点水平,将开关作为延时开关来使用,按下开关后1秒钟,灯才会亮,灯亮5秒后才熄灭,这样大家就能依据这个例子,自己延伸出很多好玩的玩法出来。

首先,老规矩介绍用到的元器件:


ocrobot mango控制板(Arduino兼容)一块
专用面包板跳线一盒
面包板一块
镊子一把
LED发光二极管一个
按钮开关一个
10K欧姆电阻 一个
220欧姆电阻一个
USB数据连接线一根














我们来看一下电路连接示意图图



大家应该看到了从开关单独有一个10k欧姆的电阻接到地线,这个电阻是作为下拉电阻使用,具体介绍请参阅:下拉电阻

然后我们就来将电路搭建出来



同样的,我们的布线不是最优布局,也不是最漂亮的,大家在面包板布线上应该多发挥自己的创意,力求做到简单易读,美观大方~

有不少同学反映按键接触不良,造成无法使用,这个主要是因为按键没有完全插进面包板,所以才会有此问题。上两个按键正确插入面包板的图,大家可以参考一下,按入面包板的时候要左右用力均匀,完全压入面包板就可以了。如果往出拿呢,也很简单,可以使用面包板跳线盒中的圆头镊子,慢慢从中间槽中撬出来就可以了。





接下来将我们的程序下载进去/*
作者:极客工坊
时间:2012年5月24日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:当你按下按钮后1秒钟,灯会亮,然后维持5秒钟,熄灭
*/

void setup ()
{
pinMode(4,INPUT);               //将4号数字口设置为输入状态,13号数字口设置为输出状态
pinMode(13,OUTPUT);
}

void loop()
{
int n =digitalRead(4);                   //创建一个变量n,将4号数字口的状态采集出来赋值给他。
if (n==HIGH)                           //判断n是否为高电平,如果是执行下面的语句,不是则跳过。
{
   
    delay(1000);
    digitalWrite(13,HIGH);
    delay(5000);
    digitalWrite(13,LOW);
   
}
}程序中我们涉及到了一个新语句 ,判断句 If,请参考 arduino语法手册,查阅关于If语句的资料

希望大家不要仅限于只是照做教程的内容,那样没有任何意义, 可以结合之前的教程,将两个实验结合起来,例如可以尝试做一个用两个按钮控制流水灯方向的小项目,大家应该释放自己的创意,梦想和创新才是最重要的
最后附上演示视频

http://player.youku.com/player.php/sid/XNDAzNzQwMjAw/v.swf

==========分割线 下面为扩展阅读==========

本次实验所用到的语法请点击关键字进入极客工坊WIKI查看,词条内容在WIKI中不定期更新。
void
setup()
loop()
pinMode()
digitalWrite()
delay()
if
int

迷你强 发表于 2012-7-20 22:53:15

热火 发表于 2012-7-20 22:51 static/image/common/back.gif
谢谢,那是不是数字I/O口接了5V高电平也不会烧坏?

不能高于5V

Randy 发表于 2012-5-28 17:59:25

完成的教程,期待中,辛苦了!

royliaoz 发表于 2012-5-31 15:58:05

好看,贴主辛苦了

纯情小DJ 发表于 2012-5-31 22:25:54

学习了支持一下。

friskit 发表于 2012-6-1 20:24:34

学习了……话说为啥开关的下拉电阻要选10k?arduino的下拉电阻的大小一般应该怎样选择啊?

friskit 发表于 2012-6-1 20:49:06

咨询一下~话说上面那个面包板的图是拿啥软件画的啊?

热火 发表于 2012-7-20 21:44:10

刚接触arduino,我的开关没接10k的下拉电阻,这样会烧掉我的板子吗

迷你强 发表于 2012-7-20 22:01:57

热火 发表于 2012-7-20 21:44 static/image/common/back.gif
刚接触arduino,我的开关没接10k的下拉电阻,这样会烧掉我的板子吗

不会,下拉电阻保证主要为了保证兼容性,抗干扰。不属于保护电路。

热火 发表于 2012-7-20 22:51:44

迷你强 发表于 2012-7-20 22:01 static/image/common/back.gif
不会,下拉电阻保证主要为了保证兼容性,抗干扰。不属于保护电路。

谢谢,那是不是数字I/O口接了5V高电平也不会烧坏?

意见反馈 发表于 2012-7-23 10:40:51

请教:如果我要俩个按键控两个灯,灯闪亮十秒,两个按键要互锁,就是说如果灯一亮着时按灯二的开光,灯一灭灯二亮,反之也一样,该怎修改程序?谢谢

迷你强 发表于 2012-7-23 13:06:41

意见反馈 发表于 2012-7-23 10:40 static/image/common/back.gif
请教:如果我要俩个按键控两个灯,灯闪亮十秒,两个按键要互锁,就是说如果灯一亮着时按灯二的开光,灯一灭灯二亮 ...

需要先判断灯的状态然后进行控制。用判断方法来处理

乐_乐(顺) 发表于 2012-7-24 17:34:17

我按照教程做的,为什么连上数据线,没按开关,就直接亮1秒,灭5秒呢?(图片左边的电阻与旁边的蓝色是错开的)

弘毅 发表于 2012-7-24 17:46:15

乐_乐(顺) 发表于 2012-7-24 17:34 static/image/common/back.gif
我按照教程做的,为什么连上数据线,没按开关,就直接亮1秒,灭5秒呢?(图片左边的电阻与旁边的蓝色是错开 ...

蓝色那个线需要接GND,你这里是接到了AREF,所以才会有此问题。

迷你强 发表于 2012-7-24 17:48:00

乐_乐(顺) 发表于 2012-7-24 17:34 static/image/common/back.gif
我按照教程做的,为什么连上数据线,没按开关,就直接亮1秒,灭5秒呢?(图片左边的电阻与旁边的蓝色是错开 ...



请看此图,地线和电源线中间部分是断开的(需要自己跳线连接),因为下拉电阻没有接地,所以会出现干扰信号触发开关的情况~~~~!
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: Arduino入门教程--第四课--按钮控制的LED延时开关