按键控制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); //等待按键松手
}
}
}