在使用Arduino进行项目开发时,按钮和开关的机械特性会带来一个常见问题:抖动。当按钮被按下或松开时,由于机械接触的微小振动,会产生多个不希望出现的信号变化,导致程序误判。Bounce2库应运而生,它为Arduino和Wiring提供了可靠的按键去噪解决方案,让你的项目更加稳定可靠。
Bounce2:简洁易用,功能强大
Bounce2库由Thomas Ouellet Fredericks和众多贡献者共同维护,它包含三个主要类:
• Bounce2::Button: 这是库中最常用的类,它提供了一系列便捷的功能,用于处理硬件按钮的去噪。
• Debouncer: 这是库的核心,负责执行实际的去噪算法。只有高级用户需要使用此类来创建自定义的去噪实现。
• Bounce: 此类将Debouncer类与硬件引脚连接。它的命名有点奇怪,但为了与库的旧版本保持兼容性,它被保留了下来。
安装与使用
安装Bounce2库非常简单:
1. 通过Arduino IDE的库管理器搜索并安装Bounce2库。
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