如何将按钮开关和LED关联起来呢?
很多时候的应用场景,需要将按钮开关与LED的动作关联起来,并不是简单地用开关控制电路通断,来影响LED灯的亮和灭。比如下面这个电路图:
电路中D2为高电平,LED就被点亮;反之LED熄灭;
按键S1按下时,D3为高电平;而当S1弹起后,D3为低电平;
本图中LED和按钮之间是没有直接控制关系的。
我们来看下面两种应用:
功能1:按下按钮时,LED灭掉,松手后LED点亮
先判断D3状态,然后再控制LED状态,因此代码应该这样写:
void loop()
{
if(digitalRead(3)==1)//按钮按下
{
digitalWrite(2,0);//LED 灭
}else{ //按钮弹起
digitalWrite(2,1);//LED 亮
}
}
功能2:每次按下按钮时,LED状态改变
这也是常见的应用场景,用来提醒有动作发生或者用于计数。
这里我们需要引入一个全局变量,用来记录前一次的状态,代码如下:
int stu=0;//状态变量,初始值为0
void loop()
{
if(digitalRead(3)==1)//按钮按下
{
delay(10);//延时10ms
if(digitalRead(3)==1)//延时后再次判断按钮是否被按下,这是按钮处理中常用的“软件去抖动”方法,防止有外界干扰引起的信号抖动
{
stu = 1- stu;//状态改变
digitalWrite(2,stu );//设置LED当前的状态,如果上一次点亮,本次就熄灭;反之如果上一次是熄灭状态,本次就点亮
}
}