YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19852|回复: 7
打印 上一主题 下一主题

Arduino入门教程—基础实验篇三 按钮控制LED

[复制链接]

签到天数: 866 天

[LV.10]以坛为家III

跳转到指定楼层
楼主
发表于 2013-5-13 20:09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 AllBlue 于 2014-3-4 19:32 编辑

按钮控制LED

上面的实验我们都是用简单的程序来控制LED,但是总不能让他一直闪啊闪的,所以今天我们介绍一个新的元器件--按钮。它能让我们主动的控制LED,让我们与元器件之间产生互动。

实验元件:

UNO 实验套装(UNO R3控制板、USB数据线、面包板、跳线)

LED 一枚

按钮开关 一个

电阻 两个(220欧 和10K欧各一个)


下面我们介绍下这个元器件按钮,按钮是一种常用的控制电器元件,常用来接通或断开‘控制电路’(其中电流很小),从而达到控制电动机或其他电气设备运行目的的一种开关(摘自百度百科)。

下面就介绍下我们使用的按钮,经过测试,我们用的按钮开关一共4个引脚分别为1、2、3、4如下图,其中1和2引脚始终相连(以下我们称它为A脚);3和4引脚始终相连(以下我们叫它B脚),当按钮按下时,A脚和B脚连接,不按按钮情况它们不连接。

如果身边有万用表的用户可以用万用表来测试下按钮的4个脚的导通情况,这样肯定会使你更加了解它,而且还能记住。

了解了按钮,我们就来使用它做实验吧,下面我们看下我们的电路:首先我们要将LED正极连接到UNO 控制板数字引脚13,负极通过限流电阻220欧连接到GND;然后将按钮的A脚连接到UNO 控制板5V引脚,将B脚接到数字引脚12,再将B脚通过10k欧电阻接GND;这样我们的电路就搭建完成,看下图:

电路完成,下面我们看下程序吧:

  1. /*
  2. 按键控制 LED
  3. 读取按键值,来点亮LED灯
  4. */

  5. #define LED 13      //定义LED引脚为13
  6. #define BUTTON 12    //定义按钮开关引脚为12
  7. int val = 0;        //变量val用来储存按钮状态

  8. void setup(){
  9.   pinMode(LED, OUTPUT);     //设定LED引脚为输出状态
  10.   pinMode (BUTTON,INPUT);   //设定按钮引脚为输入状态
  11. }

  12. void loop(){
  13.   val = digitalRead(BUTTON); //读取按钮状态并储存
  14.   //当按钮按下时,设定val为HIGH
  15.   if (val == HIGH){
  16.     digitalWrite(LED,HIGH);  //开启LED灯
  17.   }else{
  18.     digitalWrite(LED,LOW);   //关闭LED灯
  19.   }
  20. }
复制代码

将上面的程序复制到IDE中,编译上传,就可以看看实验成果了:当按钮按下,LED点亮,放开按钮,LED熄灭。

看到上面的程序,大家肯定会想,这样的话我们想要点亮LED,手就不能离开按钮了,这样很不方便呢,怎么才能像家里控制电灯一样,按一下点亮,再按下熄灭呢,没关系,我们可以改进程序,使得可以实现这样的效果,我们看下程序:

  1. /*
  2. 按键控制 LED
  3. 按键控制LED的关闭与开启
  4. 按一下按钮,LED灯亮,再次按一下按钮,LED灭
  5. */

  6. #define LED 13       //定义LED引脚为13
  7. #define BUTTON 12    //定义按钮开关引脚为12
  8. int val = 0;        //变量val用来储存按钮状态
  9. int old_val = 0;    //暂存val变量的上一个时间单位

  10. int state = 0;       //0表示LED关闭,1表示打开

  11. void setup(){
  12.   pinMode(LED, OUTPUT);     //设定LED引脚为输出状态
  13.   pinMode (BUTTON,INPUT);   //设定按钮引脚为输入状态
  14. }

  15. void loop(){
  16.   val = digitalRead(BUTTON); //读取按钮状态并储存
  17.   //检查按钮的变化情况
  18.   if((val == HIGH)&&(old_val == LOW)){
  19.     state =1-state;
  20.     delay(40);              //延时简单抗抖动
  21.   }
  22.   old_val = val;            //val下载已经是旧的了,让我们暂存一下

  23.   if (state == 1){
  24.     digitalWrite(LED,HIGH);  //开启LED灯
  25.   }else{
  26.     digitalWrite(LED,LOW);   //关闭LED灯
  27.   }
  28. }
复制代码

上面的程序下载到控制板中后,我们可以发现,我们想要的效果出现了,我们的手也空闲下来,想让LED亮就亮,想让它灭,它就灭!

程序中我们通过这次对比上次按钮的状态值,来判断我们是否按了一下按钮,从而来实现点亮LED,和熄灭它!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对

签到天数: 866 天

[LV.10]以坛为家III

沙发
 楼主| 发表于 2013-5-13 20:09:50 | 只看该作者
占沙发
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
发表于 2015-12-29 18:49:32 | 只看该作者
这个失败了怎么搞?
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

地板
 楼主| 发表于 2015-12-30 11:27:51 | 只看该作者
依梅科技 发表于 2015-12-29 18:49
这个失败了怎么搞?

什么情况呢
回复 支持 反对

使用道具 举报

签到天数: 22 天

[LV.4]偶尔看看III

5#
发表于 2019-5-20 08:23:53 | 只看该作者
感谢楼主分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-5-17 15:39 , Processed in 0.047973 second(s), 27 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表