美文网首页Arduino 专题学习
【项目12-任务15-小组7】按键消抖

【项目12-任务15-小组7】按键消抖

作者: 0121_林子惠 | 来源:发表于2019-07-04 23:16 被阅读2次

一、按键抖动危害及示例、消抖原理(一)按键抖动的概念及危害:按键通常所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,这就是按键抖动。键抖动会引起一次按键被误读多次。产生上面抖动后如果不对抖动做相应的处理,则会出现按一次按键而输出多次键值的后果。

【项目12-任务15-小组7】按键消抖

(二)简单的示例程序(消抖前):#define BUTTON 2//定义按钮在2号引脚,连接一个下拉电阻

int val = 0;//变量val存储按钮的状态

int old_val = 0;//暂存val变量的上一个时间状态

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

void setup(){pinMode(BUTTON, INPUT);

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

}

void loop(){

val = digitalRead(BUTTON);//读取输入数值并且存储

if((val==HIGH)&&(old_val==LOW))//检查按钮的变化情况

{

printState();

}

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

}

void printState()

{

state++;

Serial.println(state);

}

电路图 

【项目12-任务15-小组7】按键消抖

(三)软件消抖及硬件消抖的基本原理软件去抖是延时程序进行去抖。由于抖动时间很短,当有按键按下并检测到按下时,对程序进行一小段延时,跳过前沿抖动,再进行一次按键按下检测,若检测到按下则说明确实有按键按下,这也避免了前沿抖动。对于后沿抖动,在检测到确实有按键按下时延时一小段延时,再去检测按键是否被抬起,检测到抬起则一次按键的检测完毕。硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波,通常采用电容滤波、单稳延时电路等等。

二、常用软件消抖方法

(一)纯手工编程实现软件消抖#define BUTTON 2//定义按钮在2号引脚,连接一个下拉电阻

int val = 0;//变量val存储按钮的状态

int old_val = 0;//暂存val变量的上一个时间状态

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

void setup(){

pinMode(BUTTON,INPUT);

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

}

void loop()

{

val = digitalRead(BUTTON);//读取输入数值并且存储

if((val==HIGH)&&(old_val==LOW))//检查按钮的变化情况

{

printState();

delay(1000);//只多了这一行

}

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

}

void printState()

{

state++;

Serial.println(state);

}

(二)利用Bounce2函数库实现按键消抖

什么是debounce(函数去抖)

如果一个函数持续地触发,那么只在它结束后过一段时间只执行一次即当调用函数n秒后,才会执行该动作。

示例程序:#include<Bounce2.h>

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

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

int val=0;//变量val存储按钮的状态,因为是下拉电阻,默认是LOW(即0)

int old_val=0;//存储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==HIGH)&&(old_val==LOW))//检查按钮的变化情况

{

printState();

}

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

}

void printState()

{

state++;

Serial.println(state);

}

三、硬件消抖

硬件消抖电路图及其原理:

硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波。电容消抖,是利用电容充放电特性去抖。

【项目12-任务15-小组7】按键消抖

相关文章

网友评论

    本文标题:【项目12-任务15-小组7】按键消抖

    本文链接:https://www.haomeiwen.com/subject/ojzdhctx.html