本帖最后由 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;这样我们的电路就搭建完成,看下图: 电路完成,下面我们看下程序吧: - /*
- 按键控制 LED
- 读取按键值,来点亮LED灯
- */
- #define LED 13 //定义LED引脚为13
- #define BUTTON 12 //定义按钮开关引脚为12
- int val = 0; //变量val用来储存按钮状态
- void setup(){
- pinMode(LED, OUTPUT); //设定LED引脚为输出状态
- pinMode (BUTTON,INPUT); //设定按钮引脚为输入状态
- }
- void loop(){
- val = digitalRead(BUTTON); //读取按钮状态并储存
- //当按钮按下时,设定val为HIGH
- if (val == HIGH){
- digitalWrite(LED,HIGH); //开启LED灯
- }else{
- digitalWrite(LED,LOW); //关闭LED灯
- }
- }
复制代码将上面的程序复制到IDE中,编译上传,就可以看看实验成果了:当按钮按下,LED点亮,放开按钮,LED熄灭。 看到上面的程序,大家肯定会想,这样的话我们想要点亮LED,手就不能离开按钮了,这样很不方便呢,怎么才能像家里控制电灯一样,按一下点亮,再按下熄灭呢,没关系,我们可以改进程序,使得可以实现这样的效果,我们看下程序: - /*
- 按键控制 LED
- 按键控制LED的关闭与开启
- 按一下按钮,LED灯亮,再次按一下按钮,LED灭
- */
- #define LED 13 //定义LED引脚为13
- #define BUTTON 12 //定义按钮开关引脚为12
- int val = 0; //变量val用来储存按钮状态
- int old_val = 0; //暂存val变量的上一个时间单位
- int state = 0; //0表示LED关闭,1表示打开
- void setup(){
- pinMode(LED, OUTPUT); //设定LED引脚为输出状态
- pinMode (BUTTON,INPUT); //设定按钮引脚为输入状态
- }
- void loop(){
- val = digitalRead(BUTTON); //读取按钮状态并储存
- //检查按钮的变化情况
- if((val == HIGH)&&(old_val == LOW)){
- state =1-state;
- delay(40); //延时简单抗抖动
- }
- old_val = val; //val下载已经是旧的了,让我们暂存一下
- if (state == 1){
- digitalWrite(LED,HIGH); //开启LED灯
- }else{
- digitalWrite(LED,LOW); //关闭LED灯
- }
- }
复制代码上面的程序下载到控制板中后,我们可以发现,我们想要的效果出现了,我们的手也空闲下来,想让LED亮就亮,想让它灭,它就灭! 程序中我们通过这次对比上次按钮的状态值,来判断我们是否按了一下按钮,从而来实现点亮LED,和熄灭它!
|