Bounce2:有效地解决按键抖动问题,提高程序的稳定性和可靠性的Arduino按键去抖库

文摘   2024-11-08 00:01   湖南  

在使用Arduino进行项目开发时,按钮和开关的机械特性会带来一个常见问题:抖动。当按钮被按下或松开时,由于机械接触的微小振动,会产生多个不希望出现的信号变化,导致程序误判。Bounce2库应运而生,它为Arduino和Wiring提供了可靠的按键去噪解决方案,让你的项目更加稳定可靠。

Bounce2:简洁易用,功能强大

Bounce2库由Thomas Ouellet Fredericks和众多贡献者共同维护,它包含三个主要类:

  • • Bounce2::Button: 这是库中最常用的类,它提供了一系列便捷的功能,用于处理硬件按钮的去噪。

  • • Debouncer: 这是库的核心,负责执行实际的去噪算法。只有高级用户需要使用此类来创建自定义的去噪实现。

  • • Bounce: 此类将Debouncer类与硬件引脚连接。它的命名有点奇怪,但为了与库的旧版本保持兼容性,它被保留了下来。

安装与使用

安装Bounce2库非常简单:

  1. 1. 通过Arduino IDE的库管理器搜索并安装Bounce2库。

  2. 2. 或者下载最新版本的Bounce2库,将"Bounce2"文件夹放置到你的Arduino库目录中。

基本使用

1. 导入库:

#include <Bounce2.h> 

2. 创建按钮对象:

Bounce2::Button button = Bounce2::Button();

3. 配置按钮:

在setup()函数中,你需要配置按钮对象:

// 将PIN替换为按钮连接的硬件引脚
// 将PIN_MODE替换为INPUT_PULLUP(使用内部上拉电阻)或INPUT(使用外部上拉电阻)
// 将INTERVAL_IN_MS替换为去噪时间间隔(毫秒),5毫秒是一个不错的选择
// 将PRESSED_STATE替换为LOW(按钮按下时输出低电平)或HIGH(按钮按下时输出高电平)
button.attach ( PIN , PIN_MODE );
button.interval( INTERVAL_IN_MS );
button.setPressedState( PRESSED_STATE ); 

4. 在loop()函数中更新按钮状态:

// 在循环开始时调用update()方法更新按钮状态
button.update();

// 如果按钮在本循环中被按下
if ( button.pressed() ) {
    // 执行按钮被按下时的操作
}

示例:按钮控制LED开关

以下示例演示了如何使用Bounce2::Button类控制一个LED的开关:

#include <Bounce2.h>

Bounce2::Button button =Bounce2::Button();

#define BUTTON_PIN 39  // 按钮连接的引脚
#define LED_PIN 13     // LED连接的引脚

bool ledState = LOW;// LED状态

void setup() {
// 按钮配置
  button.attach(BUTTON_PIN, INPUT_PULLUP);// 使用内部上拉电阻
  button.interval(5);// 设置去噪时间间隔
  button.setPressedState(LOW);// 按钮按下时输出低电平

// LED配置
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}

void loop() {
  button.update();

if(button.pressed()){
    ledState =!ledState;// 翻转LED状态
digitalWrite(LED_PIN, ledState);
}
}

更丰富的功能与示例

Bounce2库还提供了丰富的功能,包括:

  • • pressed()和released()方法: 判断按钮是否被按下或松开。

  • • getPressedState()方法: 获取按钮的按下状态(高电平或低电平)。

  • • currentDuration()方法: 获取当前状态持续的时间(毫秒)。

  • • changed()方法: 判断按钮状态是否发生了改变。

  • • fell()和rose()方法: 判断按钮信号是否从高电平降至低电平或从低电平升至高电平。

此外,库还提供更多示例,帮助你快速上手。你可以在库的examples文件夹中找到这些示例。

总结

Bounce2库是Arduino和Wiring开发中不可或缺的工具,它可以有效地解决按键抖动问题,提高程序的稳定性和可靠性。无论是简单的控制LED,还是复杂的项目,Bounce2库都能为你提供简单、高效的解决方案。

项目地址: https://github.com/thomasfredericks/Bounce2



DIY太阳系
专注分享嵌入式系统、电子产品diy,iot、机器人等相关知识!
 最新文章