Arduino中按键开关的应用与去抖动处理
创作时间:
作者:
@小白创作中心
Arduino中按键开关的应用与去抖动处理
引用
CSDN
1.
https://blog.csdn.net/kongfu_jian/article/details/143016172
Arduino作为一款流行的开源电子原型平台,其应用范围广泛,从简单的LED控制到复杂的物联网项目。在众多应用中,按键开关是最常见的输入设备之一。本文将详细介绍按键开关在Arduino中的应用,包括其工作原理、接线方式以及如何通过代码实现按键去抖动功能。
按键开关的工作原理
按键开关,又名轻触开关,是一种通过按钮推动传动机构,使动触点与静触点按通或断开并实现电路换接的开关。其基本结构如图所示:
引脚状态
按键开关通常有四个引脚,其状态如下:
按键未按下时:
1.l 与1.r接通
2.l与2.r接通
1号引脚与2号引脚断开
当按下按键时,按键的四个引脚都接通
按键抖动问题
当按下物理按钮时,电路会打开和关闭数十次或数百次。这种现象被称为按键抖动。发生这种情况是因为按钮的机械性质:金属触点结合在一起时,有一段短暂的过度时间——触点的接触不充分,这导致一系列快速的开放/关闭。因此,在使用按键开关的程序中,需要去除抖动。
按键去抖动示例
物料清单
- 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在按键按下后能可靠地切换状态。
热门推荐
猫咪临终前的征兆:这些行为一旦出现,主人要有所察觉
云南深度游攻略:如何规划一场难忘的云南旅行体验
乘坐飞机时,哪些东西不能带,你知道吗?
如何有效解决电脑开机蓝屏问题及预防措施总结
贝塞尔曲线与贝塞尔曲面
医学院校8大权威:一雄三霸四精英,考上协和医学院等于考清华?
什么是公益项目管理
解码街镇|新泾蝶变:摸得着的城市“脉动”
立案不用跑法院,手把手教你网上立丨线上诉讼服务指南
摩擦力的奥秘:从微观到宏观的探讨
鬼畜创作的法律边界:从知识产权到网络安全
deepseek回答:为什么会必然离婚,命理揭示趋势,而人拥有超越趋势的潜力
雷阿伦三分球改变了历史!邓肯和老詹的逆转故事揭秘
藠头怎么种植才能高产?掌握这些管理技术,病害少个头大!
照片储存卡选购指南:容量、速度、品牌全方位解析
士师记十五章经文之法律解释与启示
旱地也能种稻!贵州探索农业发展新“稻”路
人民币消费购买力的变化,升值背后的机遇与挑战
中国乒乓球历史上的传奇老运动员名单及其辉煌成就回顾
梅花:坚韧与高洁的文化象征
螺旋藻的功效与作用以及螺旋藻的吃法
当新能源掀起电价革命,水电如何破局“非典型”市场化?
三国时期的智慧象征
中药汤剂煎煮小常识
生育率暴跌十年后,今年日本毕业就业率高达98%
【英语单词】一篇文章掌握英语动词学习3大核心要点
张爱玲作品中的女性形象探究:大一语文文学作品赏析教案
蒋正治:在楮墨中重构艺术的坐标——言恭达《中国书法嬗变与思考》略评
各类职工医保缴费年限怎么算
玻璃大王曹德旺:豪宅占地5亩,酒窖藏满了茅台,子女却不愿回家