Arduino Leonardo 按键控制LED亮与灭

本文介绍按键控制LED亮灭的两种方法:一种使用自锁按键,另一种使用非自锁按钮结合上拉电阻。通过代码实现,展示了如何利用按键状态控制LED的开关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值