arduino学习系列——按键控制LED灯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wgj99991111/article/details/53703673

一、器材
arduino UNO、面包板、按键、连接线
二、连接图
按键的两边一边接地,另一边与引脚2相连
这里写图片描述
三、代码

#define LED 13
#define INPUT_KEY 2
int val = 0;
void setup(){
  pinMode(LED,OUTPUT);
  pinMode(INPUT_KEY,INPUT_PULLUP);
}

void loop(){
  ScanKey();
  if(val==1){
    digitalWrite(LED,!digitalRead(LED));
  }
}

void ScanKey(){
  val = 0;
  if(digitalRead(INPUT_KEY)==LOW){
    delay(20);
    if(digitalRead(INPUT_KEY)==LOW){
      val = 1;     
      while(digitalRead(INPUT_KEY)==LOW);
    }
  }
}

四、注意事项
1、按键有四个引脚,平放左右两边是对称的,这里要注意的是上下两组对称的引脚分别是联通的(开始我以为同一边的两个引脚是联通的,结果连线后LED总是无法点亮),一般的链接方法是将按键的四个引脚跨过面包板中间的桥安放在面包板上。
2、用时延加两次检测低电平来去除抖动。人的手按键时是会有抖动的,在按下的过程中都会有毛刺存在,如果不去抖动,LED灯就会出现闪烁好像不听指挥一样,所以要去抖动。这里使用的方法是延时+两次检测低电平,即,首先检测低电平,如果低电平出现,延时20毫秒,再次检测是否是低电平,这样经过20秒的时延,如果持续是低电平就说明按键的确被按下了。
3、判断用户按键抬起。采用while(digitalRead(INPUT_KEY)==LOW)这样的一个循环语句判断用户是否已经抬起了按键,如果没有抬起这时读取的引脚应该是低电平,那么就循环再次读取,直到引脚变成高电平,退出循环,也就是按键被抬起了。
4、引脚2定义为输入引脚,初始化时使用INPUT_PULLUP参数将其拉高(就是设置为高电平),如果用户按下按键就相当于将该引脚与地线连接,也就是使输入为低电平,然后再根据这个输入的变化,将引脚13的LED灯点亮或者熄灭。注意这里使用了!digitalRead(LED),也就是先读取原来的值,然后给他取反,这样就能够轻松控制LED在点亮与熄灭之间切换。

猜你喜欢

转载自blog.csdn.net/wgj99991111/article/details/53703673