您的位置:首页 > 产品设计 > UI/UE

Arduino Leonardo 按键控制LED亮与灭

2014-04-19 22:11 856 查看
按键控制LED亮灭,试用两种方法,一种是最简单的开关,另一种就是用按键的IO来控制LED。

第一种方案:



按键为自锁按键,按键弹起是LED是灭的。



按键按下时LED点亮。



自锁按键的原理。

代码仍用点亮LED那段代码即可,IO给出高电平让LED常亮,自锁按键实现开光。

第二种方案



深蓝色非自锁按钮Free时有上拉电阻1k欧,按下时快速地拉低电平,检测到低电平,LED亮,再按一次,检测到低电平,LED翻转电平,熄灭。





浅蓝色自锁按钮如同方案一的功能,这里只是结合起来。

看看代码,也有三种写法:

第一种:

#define LED 13
#define KEY 2
unsigned char KEY_NUM = 0;
bool Flag_LED = 0;

void setup()
{
pinMode(LED, OUTPUT);
pinMode(KEY, INPUT);
}

void loop()
{
Scan_KEY();                        //按键扫描
if(KEY_NUM == 1)                   //假如按键按下执行该程序
{
KEY_NUM = 0;                   //清零标志位
Flag_LED = !Flag_LED;
digitalWrite(LED,Flag_LED);    //LED翻转
}
}

void Scan_KEY()                             //按键扫描
{
if( digitalRead(KEY) == 0 )             //查看按键是否按下
{
delay(20);                          //延时20ms,去抖动
if( digitalRead(KEY) == 0 )         //查看按键是否按下
{
KEY_NUM = 1;
while(digitalRead(KEY) == 0);   //松手检测
}
}
}

第二种:

#define LED 13
#define KEY 4
int KEY_NUM = 0;		      //按键键值存放变量,不等于1说明有按键按下

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

void loop()
{
ScanKey();			       //按键扫描程序,当按键按下时候,该子程序会修改KEY_NUM的值
if(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);	//等待按键松手
}
}
}


第三种

#define LED 13
#define KEY 4
int KEY_NUM = 0;			//按键键值存放变量,不等于1说明有按键按下

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

void loop()
{
if(digitalRead(KEY) == LOW)	//有按键按下
{
delay(20);			      //延时去抖动
if(digitalRead(KEY) == LOW)	   //有按键按下
{

   digitalWrite(LED,!digitalRead(LED));  //LED的状态翻转
while(digitalRead(KEY) == LOW);      //等待按键松手
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息