Bounce2 API完整参考:Debouncer、Bounce与Button三类全方法速查清单

发布时间:2026/8/23 17:18:04
Bounce2 API完整参考:Debouncer、Bounce与Button三类全方法速查清单 Bounce2 API完整参考Debouncer、Bounce与Button三类全方法速查清单【免费下载链接】Bounce2Debouncing library for Arduino and Wiring项目地址: https://gitcode.com/gh_mirrors/bo/Bounce2Bounce2 是 Arduino 平台上最常用的开源按键防抖库用于滤除机械按键抖动带来的误触发。本文是 Bounce2 API 完整参考速查清单逐条覆盖 Debouncer、Bounce、Button 三类方法适合新手上手 Bounce2。一、为什么需要按键防抖先看 Bounce2 的三层类结构机械按键在闭合与断开的瞬间触点会轻微弹跳导致引脚电平在几毫秒内剧烈抖动——一次按下可能被digitalRead()误读成十次。Bounce2 用纯软件方式滤除这些抖动不依赖中断只要在loop()里高频调用update()再读状态即可。Bounce2 由三个逐层继承的类组成全部定义在src/Bounce2.h中类作用适合人群Debouncer纯粹的防抖算法与任何硬件引脚无关想自行封装防抖逻辑的高级用户Bounce把防抖算法绑定到板子上某个硬件引脚需要直接读取引脚电平HIGH/LOW的场景Bounce2::Button在Bounce基础上把电气电平映射为按下/松开物理动作绝大多数人的首选 ✅三者关系Button继承自BounceBounce继承自Debouncer。派生得越深抽象级别越高——日常开发只需使用Bounce2::Button。上图为典型的按键电路按钮一端接地另一端接数字引脚。按下按钮时引脚被拉低读数为LOW。二、通用防抖方法速查表8 个核心 API 一次看懂以下方法定义在基类Debouncer中Bounce与Button实例均可直接使用方法返回值作用使用提示update()bool刷新引脚状态返回状态是否变化每次loop()开头必须调用一次interval(ms)void设置防抖间隔毫秒默认 10 ms官方建议设为 5 msread()bool返回防抖后的电平HIGH/LOW读的是滤波后结果非原始引脚电平changed()bool上次update()后电平是否变化配合read()判断变化方向rose()bool是否出现低→高上升沿仅在变化后那次update()中为 truefell()bool是否出现高→低下降沿同上currentDuration()unsigned long当前电平已持续毫秒数状态一变即清零可做长按判断previousDuration()unsigned long上一个电平的持续毫秒数适合判断上一次按了多久 两条铁律update()是心跳读取任何状态前必须先调用一次Bounce2 不使用中断loop()跑得越快防抖结果越准。三、Bounce 类方法速查绑定硬件引脚的防抖器Bounce类声明于src/Bounce2.h第 184 行是算法与硬件引脚之间的桥梁方法作用Bounce()创建实例创建后再调用attach()Bounce(pin, interval_ms)构造时一步完成绑定引脚 设置防抖间隔attach(pin, mode)绑定引脚并设置模式INPUT/INPUT_PULLUP/OUTPUTattach(pin)只绑定引脚、不设置引脚模式需提前自行pinMode进阶用法getPin()返回当前绑定的引脚编号此外第二节表格中的 8 个通用方法全部可用。四、Bounce2::Button 类方法速查最推荐的按键写法Bounce2::Button类声明于src/Bounce2.h第 276 行是库中功能最丰富、官方推荐的物理按键用法方法作用Button()创建实例默认 HIGH 电平 按下setPressedState(state)指定哪个电平LOW/HIGH对应物理按下getPressedState()查询当前按下对应的电平isPressed()按钮现在是否处于按下状态电平判断pressed()按钮刚刚被按下只在变化那一圈为 truereleased()按钮刚刚被松开它同时继承Bounce与Debouncer的全部方法update()/interval()/currentDuration()等均可直接使用。⚠️ 新手最容易踩的坑默认按下状态是HIGH。若你的电路按下按钮时读到LOW见第一节接线图必须先调用setPressedState(LOW)否则pressed()永远为 false。五、易混淆方法辨析pressed() 与 isPressed() 差在哪pressed() waspressed只在按钮状态翻转后的那一次loop()中为 true适合每按一次切换一次isPressed() ispressed按钮被按住的整个过程中持续为 true适合按住不放时持续执行。同理rose()/fell()也只在电平变化后的一次update()中返回 true属于边沿事件而read()是电平值可连续读取。一句话记忆动词是瞬间pressed / released / rose / fellis 开头是状态isPressed。六、弃用方法提醒这些旧写法该换掉了库中保留了几处兼容旧版 Bounce 1 的弃用方法在src/Bounce2.h中均标记[[deprecated]]编译会产生警告弃用方法替代方案说明duration()currentDuration()改名以避免与previousDuration()混淆risingEdge()rose()Bounce 1 旧写法fallingEdge()fell()Bounce 1 旧写法新项目请直接使用新方法旧方法计划在下一大版本中移除。七、进阶配置三种防抖算法的宏开关Bounce2 的算法可通过预处理宏切换开关注释位于src/Bounce2.h第 39–43 行实现分支在src/Bounce2.cpp的update()中算法开启方式特点Stable默认无需设置电平稳定满间隔才确认简单可靠、能滤除噪声Lock-out定义BOUNCE_LOCK_OUT响应更快但状态确认后不再理会噪声Prompt Detection定义BOUNCE_WITH_PROMPT_DETECTION前态稳定时即时报告变化切换时机最精确// 在 Bounce2.h 顶部取消注释即可切换算法 #define BOUNCE_LOCK_OUT新手建议保持默认 Stable 算法一般场景足够可靠。八、快速上手最小可用的 Bounce2 写法官方README.md给出的标准流程是四步实例化 →setup()中配置 →loop()开头调用update()→ 读取pressed()#include Bounce2.h Bounce2::Button button; void setup() { button.attach(2, INPUT_PULLUP); // 绑定引脚 内部上拉 button.interval(5); // 防抖间隔 5ms button.setPressedState(LOW); // 按下时读到低电平 } void loop() { button.update(); // 每圈必须先刷新 if (button.pressed()) { // 刚被按下的这一圈里执行动作 } }九、文件索引源码与官方示例在哪里找API 声明src/Bounce2.hDebouncer/Bounce/Button三个类定义算法实现src/Bounce2.cppupdate()中三种算法分支基础示例examples/bounce_basic/bounce_basic.ino、examples/bounce_button/bounce_button.inocurrentDuration()示例examples/more/bounce_current_duration/bounce_current_duration.inopreviousDuration()示例examples/more/bounce_previous_duration/bounce_previous_duration.ino双按键示例examples/more/bounceTwo/bounceTwo.inoIDE 关键字文件keywords.txt项目元数据library.json、library.properties 查阅顺序建议先按第二节表格过一遍通用方法再根据自己用的是引脚电平还是物理按键对照第三、四节速查表取用方法即可。【免费下载链接】Bounce2Debouncing library for Arduino and Wiring项目地址: https://gitcode.com/gh_mirrors/bo/Bounce2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考