Arduino中按键开关的应用与去抖动处理
创作时间:
作者:
@小白创作中心
Arduino中按键开关的应用与去抖动处理
引用
CSDN
1.
https://m.blog.csdn.net/kongfu_jian/article/details/143016172
Arduino作为一款流行的开源电子原型平台,其应用范围广泛,从简单的LED控制到复杂的物联网项目。在众多外设中,按键开关是最基础也是最常用的输入设备之一。本文将详细介绍按键开关的工作原理、接线方法以及如何通过代码实现按键去抖动功能,帮助读者掌握这一基础但重要的技能。
1.按键开关又名轻触开关
是指利用按钮推动传动机构,使动触点与静触点按通或断开并实现电路换接的开关。
2.原理图图标示意
3.引脚状态
按键未按下时:1.l 与1.r接通; 2.l与2.r接通; 1号引脚与2号引脚断开;
当按下按键,按键的四个引脚都接通
4.按键抖动
当按下物理按钮时,电路会打开和关闭数十次或数百次。这种现象被称为按键抖动。发生这种情况是因为按钮的机械性质:金属触点结合在一起时,有一段短暂的过度时间——触点的接触不充分,这导致一系列快速的开放/关闭。
所以在有轻触开关按键的程序中,须要去除抖动;
5.按键去抖示例
物料:
1PCS 220欧姆电阻
1PCS LED灯
1PCD 轻触开关
1PCS UNO开发板
接线图:
代码示例:
const int buttonPin = 2; // 定义按键连接的引脚为数字引脚2
const int ledPin = 13; // 定义LED连接的引脚为数字引脚13(通常用于板上LED)
bool ledState = false; // 当前LED的状态,初始为false(OFF)
int buttonState; // 用于存储当前按键读取的状态
int lastButtonState = HIGH; // 用于存储上一次按键读取的状态,初始为HIGH(未按下)
unsigned long lastDebounceTime = 0; // 用于存储上一次防抖计时器的时间
unsigned long debounceDelay = 100; // 防抖延迟时间设置为100毫秒
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // 设置按键引脚为输入并启用内部上拉电阻
pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
digitalWrite(ledPin, ledState); // 设置LED初始状态为关闭
Serial.begin(9600); // 初始化串行通信,波特率为9600
}
void loop() {
int reading = digitalRead(buttonPin); // 读取当前按键状态
// 如果按键状态有变化,则重置防抖计时器
if (reading != buttonState) {
lastDebounceTime = millis(); // 记录当前时间
buttonState = reading; // 更新按钮状态
// 打印当前时间到串行监视器
Serial.println(millis());
// 如果当前时间小于防抖延迟加上上一次防抖时间,则进入等待
if(millis() < debounceDelay + lastDebounceTime){
// 等待直到按键被释放
while(!digitalRead(buttonPin));
// 如果按键在按下后变为未按下(HIGH)
if(reading == HIGH){
ledState = !ledState; // 切换LED状态
digitalWrite(ledPin, ledState); // 更新LED引脚状态
// 打印LED状态到串行监视器
Serial.print("led:");
Serial.println(ledState);
}
}
}
// 在循环结束前更新按钮状态
buttonState = reading;
}
代码解析:
控制一个连接在Arduino数字引脚13上的LED灯的开和关状态,基于一个连接在数字引脚2上的按键输入。当按键被按下时,程序会切换LED的状态(开或关),并在串行监视器中打印LED当前的状态。
为了解决按键抖动的问题,程序实现了防抖机制,确保只有在按键状态稳定后才进行LED状态的切换。通过启用内部上拉电阻,按键未按下时引脚处于高电平(HIGH),按键被按下时引脚变为低电平(LOW)。程序在主循环中不断检查按键状态,当检测到状态变化时启动防抖逻辑,确保LED在按键按下后能可靠地切换状态
热门推荐
持续释放创新药发展利好:鼓励药物创新、加快新药落地
沪喀文化交流周:上海市群艺馆响起《掀起你的盖头来》
中国“夏朝文字”:考证取得重大突破,西方又一结论被推翻?来龙去脉是什么?
电脑显示器画面抖动怎么办?六种实用解决方案帮你轻松应对
如何从品牌创新案例中提炼出可借鉴的经验?
屁多是怎么回事?可能由这5种原因引起
机械键盘有哪些分类
从茶寿说起,饮茶6大好处与喝茶8大建议
脚背疼不肿是怎么回事怎么治疗
如果各国都像美国人一样生活,我们需要多少个地球?
飞跃伶仃洋|15和18元!深中跨市公交票价公布
30000年前的维伦多夫维纳斯雕像的起源
暗黑3 野蛮人装备属性选择及提高生存力技巧
泡腊八蒜,光放醋只酸不香还辣心,多加2样,蒜味柔和,酸香脆爽
2025年高考体检视力要求全解析:普通专业与特殊专业标准一览
一文读懂6种主流图片格式的区别与应用场景
运-20加长拉皮版来了,超越美国C-17,碾压俄罗斯伊尔476
从月球取样到火星取样 中国深空探索迎接更大挑战
如何顺利进行个人医保续交?这种续交方式有什么优势?
河流水污染治理与生态修复:中国经验与技术路线图
NAC的5大健康益处
品牌命名的力量:打造独特且有意义的品牌标识
国际米兰vs亚特兰大:意超杯前瞻与关键数据分析
网购投诉指南:向12315投诉的步骤与技巧
2024年美妆个护行业新品牌新消费洞察分析
互联网人力资源管理软件如何提升企业绩效管理效率
如何制定适合自己的每周工作计划
柳宗元:文学与哲学的交融,剖析一位唐宋八大家的作品特色
柳宗元:文学与哲学的交融,剖析一位唐宋八大家的作品特色
科教融汇 数智赋能 “现代针灸铜人”的创新之路