转帖:跟珜羽一起学Arduino NO.2.2 按键控制灯
kc20382013/09/05电子技术 IP:广西
跟珜羽一起学Arduino NO.2.2 按键控制灯

XXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXml
在上一节
跟珜羽一起学
Arduino NO.2.1
修改点灯程序
(
XXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXml
)
中,

我们知道了
pinMode(13, OUTPUT);  
是设置引脚为输出高低电平驱动
LED
亮灭。那么对应输出,自然就有输入模式了,现在我们就这一点讲解下如何用一个按键控制
LED
灯的亮灭。


硬件连接
在这一节中,我们需要的是主控板X1,面包板X1,按键X1,导线X2,没了。(LED就用Pin13上的)。
PS:没有面包板,按键的话,直接用导线触碰对应的引脚就行。(具体看后面6楼)
按照下面照片的样式连接。
001.jpg

图中白色的那一块就是面包板。也叫实验板,试验板,洞洞板等。
红色箭头的两排横的是联通的,是用来供电使用。绿色箭头处,绿色区域内的五个洞也是联通的,用来连接器件等。
先将按键插在板子上,按键的样子如下。14脚是联通的,23脚也是联通的,在同一侧的两个脚是断开的。按键按下后,四个脚全部连在了一起。
002.jpg

用一根导线连接板子上标着GND的座子上,再用另一根把按键的另一个脚连接到标着2号的引脚座子上。
这样,就是2号数字引脚接按键,13号引脚接LED,请记住哦。
PS:不成文的规定就是黑色的线连负端,地线。红色线连VCC,正极,5V的电源。请大家养好习惯~~
连接上USB到电脑。硬件的准备工作就完成了

修改软件

还是打开blink的例程,在这个上面修改。
还记得void setup()的作用吧,放初始化的语句用的。比如原来的句子pinMode(13, OUTPUT);
就是设置13号数字引脚设置为输出模式。那么我们2号脚接了按键,要受按键控制,自然是要设置成输入模式pinMode(2, INPUT);
好的,初始化的程序配置完毕。
接着就是主程序了,原来的代码
digitalWrite(13, HIGH);   // set the LED on
delay(1000);              // wait for a second
digitalWrite(13, LOW);    // set the LED off
delay(1000);              // wait for a second
记得之前说过的吧,digitalWrite(13, HIGH);
是将13号引脚设置为输出高电平,那么对应的自然有读数字IO的语句:digitalRead(2);
只有一个参数,就是你要读取的IO的电平状态。
按键的状态已经输入到Zduino了,那么要怎么判断使灯亮起来呢?使用以下的语句:
if 判断条件成立 then 运行你要的程序 ;
例如:
if (digitalRead(2) == 1 )
{
    digitalWrite(13, HIGH);
}//如果digitalRead(2)读到的2号脚为高电平,则LED引脚输出高电平。
也可以简写如下:
if (digitalRead(2) )//判断语句就是如果为0就是假,不成立,非零的数就是真,真的就成立。
    /*好好理解这一句话,很有用的*/
    digitalWrite(13, HIGH);//如果只要执行一条语句,花括弧可以不要。

还可以写在同一行:
if (digitalRead(2) ) digitalWrite(13, HIGH);//不过不是太熟练的人不建议这么写,稍微密集了点。

OK,初步了解了这个判断语句后,来向void loop()动手吧:
void loop()
{
    if (digitalRead(2) == 1 )
    {
        digitalWrite(13, HIGH);
    }
    if (digitalRead(2) == 0 )
    {
        digitalWrite(13, LOW);
    }
}

编译下载。。。。
可以看到L是亮起来的,按下按键,灯灭了,松开,灯又亮了。
软件进阶
if (digitalRead(2) == 1 )
{
    digitalWrite(13, HIGH);
}
if (digitalRead(2) == 0 )
{
    digitalWrite(13, LOW);
    有没有觉得特别别捏?
    对头,if判断语句还有另外两种用法如下:
    if 判断语句成立
        执行第一条语句;
    else//除去语句成立之外的情况成立了(怎么觉得说的好绕口啊)
        执行这一条语句;
if (digitalRead(2) == 1 )
    {
        digitalWrite(13, HIGH);
    }
    else
    {
        digitalWrite(13, LOW);
    }
    还有一种就是更多的判断语句:
    if 判断语句一成立
        执行第一条语句;
    else 判断语句二成立
        执行第二条语句;
    else 判断语句三成立
        执行第三条语句;
        。
        。
        。
现在我们还用不到这个,略过不提。
附件
附件:
修改完成后的程序如下:如果你修改的不能运行,就和我的对比下,看看什么地方不一样,记得,;
不要忘记了,而且是英文的哦~
/*
  Blink
  Turns on an LED on for one second,then off for one second, repeatedly.

  This example code is in the publicdomain.
*/

void setup()
    {
        // initialize the digital pin as anoutput.
        // Pin 13 has an LED connected onmost Arduino boards:
        pinMode(13, OUTPUT);
        pinMode(2, INPUT);
    }

    void loop()
    {
        if (digitalRead(2) )
            digitalWrite(13, HIGH);   // set the LED on
        else
            digitalWrite(13, LOW);    // set the LED off
    }



到你了。如果想让灯是灭的,按键按下后才亮,程序要怎么写?



马后炮
在二楼说的  插针插在2号数字端口上,另一端先悬空,就能模拟一个按键。

要模拟按下的动作时,将悬空的那一端插入GND标号的座子上,就模拟了按键按下的动作,拔起后就模拟了按键松开动作。


常见问题:如果IDE用的新版本,想达到例程的效果话需要使用
pinMode
(
12
,
INPUT_PULLUP
);来代替
pinMode
(
12
,
INPUT
);



PS

修改代码时要注意(){}两个配对的符号要对应的上。还有;这个语句结束符号不要忘记了,更不要写成中文的符号。



FAQ:为啥我程序跟你的一样还是不能编译?  见上面的原因。

         其他,待补充。

来自:电子信息 / 电子技术
0
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
kc2038
学者 机友 笔友
文章
37
回复
268
学术分
1
2009/01/06注册,6年4个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}