一、前言
我记得当初做项目的过程中,发现一种能够很好的解决按键抖动的问题,这种消抖方式准确率很高,在有需要的时候我基本都使用这种软件消抖的方式。
二、 消抖实现(软件消抖)
为了更加的直观,也为了能让大家动手测试,这里简单的把电路图和测试代码展示出来给大家。
2.1 电路图
2.2 程序代码
#define pin_button 7 //用于读取按钮状态
bool button_down_flag = false; //用于消抖,表按钮按下
int count = 0; //用于记录按下了几次
void setup() {
Serial.begin(9600);
pinMode(pin_button, INPUT_PULLUP); //把控制开关引脚设为上拉状态(高电平)
}
void loop() {
if(digitalRead(pin_button) == LOW){
button_down_flag = true; //表示按钮已经按下(没弹起)
delay(50); //延迟50ms
// 再次检测,如果pin_button为高电平,表示已经弹起
if(digitalRead(pin_button) == HIGH && button_down_flag){
count++; //每次按下并弹起时,次数加一
Serial.println(count);
button_down_flag = false; //重新赋值
}
}
}
这种消抖方式主要用到了一个button_down_flag标志位,用于记录按钮是否有按下,在有按下按钮的情况之后,再检测是否有弹起,然后才会进行下一步操作(count+1),这样子能够做到按下一次,就只对应的执行一次操作,而不会出现按一次执行多次或者由于抖动导致的多种问题。
2.3 执行结果
按下按钮并松开,可以看到串口调试窗口打印按下按钮的次数(count),每次只会加1。如果一直按这按钮不动,count的值不会发生改变,直到松开才会触发加一的操作。
三、结束语
个人认为这是一种不错的软件消抖方式,准确率、灵敏度都很高。好咯,对于这种消抖方式的介绍就到这里啦,我是风行男孩,咱们有缘再见!