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

发布时间:2026/10/23 14:03:21

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),仅供参考
延伸阅读

更多相关文章

2026/10/21 18:31:49

数学建模竞赛后如何通过技术复盘将经验转化为个人能力

1. 从“交卷”到“复盘”:数模竞赛的真正价值远未结束 当提交论文的最后一刻,点击“发送”按钮,屏幕上显示“提交成功”时,那种如释重负的感觉,相信每一位参加过数学建模竞赛的同学都深有体会。熬了三天三夜&#xff0…

2026/10/21 19:07:22

LLaMA-Factory 自定义评估指标:一份能直接落地的实践笔记

LLaMA-Factory 自定义评估指标:一份能直接落地的实践笔记 【免费下载链接】LlamaFactory Unified Efficient Fine-Tuning of 100 LLMs & VLMs (ACL 2024) 项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory 你刚用 LLaMA-Factory 微调完模…

2026/10/23 14:01:38

多星发射技术:商业航天的成本革命与核心突破

1. 多星发射技术的战略价值当一枚火箭同时将数十颗卫星送入预定轨道时,这不仅仅是简单的数量叠加。现代航天领域最显著的技术跃迁之一,就是多星发射能力从国家战略层面向商业市场的延伸。传统单星发射模式下,每千克载荷的运输成本高达数万美元…

2026/10/23 14:01:38

2026年期货量化工具评测与选型指南

1. 期货量化工具评测背景与价值2026年的期货市场已经进入算法交易占比超过80%的时代,量化工具的选择直接决定了交易团队的竞争力。这次评测我们耗时6个月,对市面主流的27款量化平台进行了从回测精度到实盘稳定性的全流程检验。有个有趣的发现&#xff1a…

2026/10/23 14:01:38

JSP+Servlet学生信息管理系统:手写MVC、跑通排错与二次开发

简介:面向Java Web初学者与课程设计需求者的简单学生信息管理系统源码包,围绕学生自助注册、教师集中管理学生信息这一典型场景展开,可用于课程设计参考、Servlet入门练习与小型信息管理原型搭建。压缩包共2个文件,以zip源码包和h…

2026/10/23 14:01:37

ASPDF COM组件在Classic ASP中生成PDF的实战指南

简介:ASPDF 是一款专为 Classic ASP 开发者打造的开源 PDF 生成工具,将 PHP 领域广受认可的 FPDF 库核心功能完整移植至 VBScript/JScript 环境,解决了传统 ASP 项目在 IIS 平台上缺乏原生 PDF 生成功能的长期痛点。适用于维护老旧企业系统、…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑