基于Arduino的LED亮灭按键控制

一、项目简介

通过一个按键控制LED的亮灭,实现按键按一下LED点亮,再按一下LED熄灭,交替循环。

二、控制原理

1. 按键检测原理:

  • 将Arduino的监测端口设置为输入上拉模式(INPUT_PULLUP),用于连接按键。
  • 当按键未按下时,由于上拉电阻的作用,监测端口输入为高电平。
  • 当按键按下时,由于按键引脚接地,此时检测端口输入为低电平。

2. 按键去抖原理:

当按下按键时,会产生大约20ms左右的抖动,如果在此期间去检测Arduino监测端口的电平,会检测出错误信号。因此在首次检测到按键按下时需要延时20ms,再次检测时可以起到软件去抖动的作用。

3. 按键松开检测原理:

程序一直循环等待按键松开,即程序不停地检测IO口状态,直到检测到高电平为止。

4. 输入上拉模式

  • Arduino引脚的三种模式:INPUT:输入模式,OUTPUT:输出模式,INPUT_PULLUP:输入上拉模式。
  • Arduino UNO板自带上拉电阻:如果需要使用上拉电阻,则需要在代码配置阶段使用pinMode,通过上拉电阻可以将输入端口处的电压拉高到高电平,如果外部组件启用,它将取消上拉电阻所设置的高电平。通过这样,上拉电阻可以使引脚即使在未连接外部组件的时候也能保持确定的逻辑电平。
  • pinMode(n,INPUT_PULLUP),设置n端口为上拉模式。

三、按键控制LED亮灭源码

clike 复制代码
#define LED 4
#define KEY 2

bool status = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  pinMode(KEY,INPUT_PULLUP);//上拉输入引脚
}

void loop() {
  // put your main code here, to run repeatedly:
  if(scanKey())
  {
    digitalWrite(LED,status);
    status = !status;//每按一次,更改端口赋值
  }
}

bool scanKey()
{
  //有按键按下
  if(digitalRead(KEY) == LOW)
  {
    //延时20ms去抖
    delay(20);
    //有按键按下
    if(digitalRead(KEY) ==  LOW)
    {
      while(1)
      {
        //等待按键恢复
        if(digitalRead(KEY) == HIGH)
        {
          return true;
        }
      }
    }
  }
  return false;
}

四、实现效果

程序开始时,LED灯亮。

按键按下后,LED灯熄灭。之后每按一次按键,LED灯明暗交替变化。

相关推荐
炸膛坦客11 小时前
单片机开发工具篇:(九)MCU 芯片包的安装
单片机·嵌入式硬件
智者知已应修善业16 小时前
【51单片机实现初始化数码管不显示按启动从0秒计时到60按暂停一次显示当前秒按2次恢复原始状态】2024-6-11
c语言·c++·经验分享·笔记·嵌入式硬件·算法·51单片机
电气_空空17 小时前
基于LabVIEW的数据采集系统设计与实现
单片机·嵌入式硬件·labview
caimouse18 小时前
ReactOS BootCD 光盘布局完整深度分析
单片机·reactos
zlinear数据采集卡19 小时前
从万用表的6步调零到硅片级微秒自校准:硬核拆解LHAMP188的宽压轨到轨与零漂移实战
arm开发·stm32·单片机·嵌入式硬件·fpga开发
三品吉他手会点灯19 小时前
嵌入式机器学习 - 学习笔记1.2.3 - 机器学习软件框架
人工智能·笔记·嵌入式硬件·学习·机器学习
国科安芯21 小时前
ASC8T245S 8通道电平转换设计实战:从系统架构到QFN24 Layout再到量产测试
网络·单片机·物联网·安全·fpga开发·系统架构
云栖梦泽21 小时前
将RAW打包成MIPI CSI2
linux·人工智能·嵌入式硬件
伟大的前程1 天前
us级开定时器中断,单片机的开销大,改用轮询的方式
单片机·嵌入式硬件
ACP广源盛139246256731 天前
IX8024@ACP# 搭配此芯 AI 服务器 + 爱芯元智产品完整方案
大数据·运维·服务器·人工智能·分布式·嵌入式硬件