3.按键控制LED灯亮灭

实验现象:本实验通过一个按键来控制一个发光二极管的亮灭。按键按一下LED点亮。再按一下LED熄灭。

理论学习

该实验主要难点

 如何扫描按键的状态?

 如何防抖动?

 原理讲解

   按键检测原理:通过把Arduino的数字IO设置为输入状态来监控按键是否按下,当按键未按下的时候因为有上拉电阻的存在,读到的电平为HIGH,当按键按下时候因为按键引脚接地,所以读回来的电平为LOW,由此判断按键是否按下。
   按键去抖动原理:因为人手的机械动作使按键按下时候会产生大概20ms左右的按键抖动,如果Arduino在这20ms内去检测IO口的电平很可能会检测出来不稳定的信号。因此,在检测到低电平后延迟20ms再检测可以起到软件去抖动的作用。
   松手检测原理:所谓的松手检测就是程序无线循环等待按键松开,即让程序不停的去检测IO状态,如果恢复了HIGH就跳出循环。
代码为while(diitalRead(KEY)==0);

程序代码
#define LED 13
#define KEY 2

int KEY_NUM = 0;			//按键键值存放变量

void setup()
{
  pinMode(LED,OUTPUT);			//定义LED为输出引脚
  pinMode(KEY,INPUT_PULLUP);		//定义KEY为带上拉输入引脚
}

void loop()
{
  ScanKey();				//按键扫描程序,当按键按下时候,该子程序会修改KEY_NUM的值
  if(KEY_NUM == 1)			//是否按键按下,如果ScanKey函数扫描到按键就会设置KEY_NUM值为1
  {   
    digitalWrite(LED,!digitalRead(LED));		//LED的状态翻转
  }
}

void ScanKey()						//按键扫描程序
{
  KEY_NUM = 0;					//清空变量
  if(digitalRead(KEY) == LOW)			//有按键按下
  {
    delay(20);				//延时去抖动
    if(digitalRead(KEY) == LOW)		//有按键按下
    {
      KEY_NUM = 1;			//变量设置为1
      while(digitalRead(KEY) == LOW);	//等待按键松手
    }
  }
}


3.按键控制LED灯亮灭_第1张图片


3.按键控制LED灯亮灭_第2张图片


你可能感兴趣的:(Arduino)