最新消息:

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

Arduino 少儿编程 2931浏览 0评论

按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

图1:碰撞传感器-机械弹性开关

以上是引用百度百科的解释,比我分享第一招的文章中写的要要专业多了,惭愧呀,供大家参考。上一招是采用延时的策略,延时需要根据个人操作习惯和硬件进行调试,比较麻烦,这一招是想给你分享一个Arduino的库文件Bounce2,它是目前最完美的软件消抖的方法。

1

步骤一:使用电脑下载库文件。

我分享到百度网盘了,下载链接:https://pan.baidu.com/s/1HoAbMFjX-OSlJvfufFHvCw 提取码:2po4

2

步骤二:安装到Arduino IDE库文件夹中。

将下载得到的“Bounce2-master.zip”当中的“Bounce2-master”文件夹解压缩至Arduino的“libraries”文件夹中。

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

图2:Bounce2-master.zip

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

图3:Arduino IDE的libraries文件夹

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

图4:将Bounce2-master放入libraries中

3

步骤三:使用该库文件编写消抖程序。

示例代码如下,请你认真阅读每一行代码后面的注释,如果有不清楚的地方请在评论区给我留言,我将即时回复你。

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

图5:Arduino IDE代码示例

Arduino碰撞开关(按钮传感器)消抖秘籍第二招

图6:和第一招代码不一样的地方

程序代码如下

#include<Bounce2.h> //调用Bounce2库文件,请确保已经放入libraries文件夹中

#define BUTTON 3//按钮连接的针脚

Bounce debouncer = Bounce();//实例化一个抖动对象

int val=1;//变量val存储按钮的状态,这里请根据传感器默认返回值输入

int old_val=1;//存储val变量的上一个时间状态,初始值请和val的初始值保持一致

int state=0;//打印到串口的数据,按钮每被按下一次,state自增1

void setup() {

pinMode(BUTTON,INPUT);

debouncer.attach(BUTTON);//将抖动对象绑定到按钮针脚

debouncer.interval(5);//间隔是5ms

Serial.begin(9600);//用于串口输出

}

void loop() {

debouncer.update();//更新

val=debouncer.read();////读取输入数值并且存储

if((val==LOW)&&(old_val==HIGH))//检查按钮的变化情况,请注意val的比较值是当按钮传感器按下去返回的值,old_val和val相反即可。

{

printState();//调用输出state值的函数

}

old_val=val;//val现在是旧的了,暂存一下

}

void printState()

{

state++;//state变量增加1

Serial.println(state);//串口打印输出state的值

}

4

程序效果,视频分享

以上是我和大家分享的第二招,使用Bounce2库文件来消抖,这个消抖的方法简真是杠杠的,请你看以下视频吧,不论是短按,还是长按,还是快速反复按下、抬起,都没有引起一次按键被误读多次

视频:使用Bounce2库函数消抖后的效果

好了,本次的分享交流就到此结束,更为完美的硬件消抖方法就不是我的分享的范围了,请你自行搜索了解,谢谢。

转自公众号:
初始化工作室

您必须 登录 才能发表评论!