只需一步,快速开始
签到天数: 867 天
[LV.10]以坛为家III
按钮控制LED
上面的实验我们都是用简单的程序来控制LED,但是总不能让他一直闪啊闪的,所以今天我们介绍一个新的元器件--按钮。它能让我们主动的控制LED,让我们与元器件之间产生互动。
实验元件:
UNO 实验套装(UNO R3控制板、USB数据线、面包板、跳线)
LED 一枚
按钮开关 一个
电阻 两个(220欧 和10K欧各一个)
下面我们介绍下这个元器件按钮,按钮是一种常用的控制电器元件,常用来接通或断开‘控制电路’(其中电流很小),从而达到控制电动机或其他电气设备运行目的的一种开关(摘自百度百科)。
下面就介绍下我们使用的按钮,经过测试,我们用的按钮开关一共4个引脚分别为1、2、3、4如下图,其中1和2引脚始终相连(以下我们称它为A脚);3和4引脚始终相连(以下我们叫它B脚),当按钮按下时,A脚和B脚连接,不按按钮情况它们不连接。
登录/注册后可看大图 按钮.jpg (58.11 KB, 下载次数: 92) 下载附件 2013-5-13 19:21 上传 如果身边有万用表的用户可以用万用表来测试下按钮的4个脚的导通情况,这样肯定会使你更加了解它,而且还能记住。了解了按钮,我们就来使用它做实验吧,下面我们看下我们的电路:首先我们要将LED正极连接到UNO 控制板数字引脚13,负极通过限流电阻220欧连接到GND;然后将按钮的A脚连接到UNO 控制板5V引脚,将B脚接到数字引脚12,再将B脚通过10k欧电阻接GND;这样我们的电路就搭建完成,看下图: 登录/注册后可看大图 按钮控制灯.jpg (77.16 KB, 下载次数: 98) 下载附件 2013-8-15 11:22 上传 电路完成,下面我们看下程序吧:/* 按键控制 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,和熄灭它!
按钮.jpg (58.11 KB, 下载次数: 92)
下载附件
2013-5-13 19:21 上传
如果身边有万用表的用户可以用万用表来测试下按钮的4个脚的导通情况,这样肯定会使你更加了解它,而且还能记住。
了解了按钮,我们就来使用它做实验吧,下面我们看下我们的电路:首先我们要将LED正极连接到UNO 控制板数字引脚13,负极通过限流电阻220欧连接到GND;然后将按钮的A脚连接到UNO 控制板5V引脚,将B脚接到数字引脚12,再将B脚通过10k欧电阻接GND;这样我们的电路就搭建完成,看下图:
登录/注册后可看大图 按钮控制灯.jpg (77.16 KB, 下载次数: 98) 下载附件 2013-8-15 11:22 上传 电路完成,下面我们看下程序吧:/* 按键控制 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,和熄灭它!
按钮控制灯.jpg (77.16 KB, 下载次数: 98)
2013-8-15 11:22 上传
电路完成,下面我们看下程序吧:
将上面的程序复制到IDE中,编译上传,就可以看看实验成果了:当按钮按下,LED点亮,放开按钮,LED熄灭。
看到上面的程序,大家肯定会想,这样的话我们想要点亮LED,手就不能离开按钮了,这样很不方便呢,怎么才能像家里控制电灯一样,按一下点亮,再按下熄灭呢,没关系,我们可以改进程序,使得可以实现这样的效果,我们看下程序:
上面的程序下载到控制板中后,我们可以发现,我们想要的效果出现了,我们的手也空闲下来,想让LED亮就亮,想让它灭,它就灭!
程序中我们通过这次对比上次按钮的状态值,来判断我们是否按了一下按钮,从而来实现点亮LED,和熄灭它!
使用道具 举报
该用户从未签到
依梅科技 发表于 2015-12-29 18:49 这个失败了怎么搞?
签到天数: 22 天
[LV.4]偶尔看看III
本版积分规则 发表回复 回帖后跳转到最后一页
|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2 )
GMT+8, 2024-12-4 00:47 , Processed in 0.052891 second(s), 28 queries .
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.