尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

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

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

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

📅 2026/10/7 7:27:50
CSP-J 2021 分糖果题解:区间取模最大值的数学思维与O(1)解法

CSP-J 2021 分糖果题解:区间取模最大值的数学思维与O(1)解法

1. 项目概述:从“分糖果”到信息学竞赛的思维跃迁看到“P7909 [CSP-J 2021] 分糖果”这个标题,很多刚接触信息学竞赛(OI)的同学可能会觉得,这不过是一道简单的数学题或者模拟题。但如果你真的这么想,那可能…

📅 2026/10/1 12:36:30
横竖屏旋转图片不丢失:ImageGallery 配置变更处理与状态恢复技巧

横竖屏旋转图片不丢失:ImageGallery 配置变更处理与状态恢复技巧

横竖屏旋转图片不丢失:ImageGallery 配置变更处理与状态恢复技巧 【免费下载链接】ImageGallery A gallery used to host an array of images 项目地址: https://gitcode.com/gh_mirrors/im/ImageGallery ImageGallery 是一款轻量级的 Android 图片画廊库&am…

📅 2026/10/7 2:37:24
MORE NEWS

更多资讯

📰

基于监督学习的Web入侵检测毕设源码:从数据到模型全流程解析

简介:这份资源是面向计算机相关专业学生与从业者的高分毕业设计源码包,主题为基于监督学习的Web入侵检测系统,采用Python实现,评审得分达97分,可直接用于毕业设计、期末课程设计或课程大作业等场景。压缩包共60个文件&…

📰

AI与脑能思维链:破解孩子学习难题的科学方法

1. 项目概述:当AI遇上育儿难题去年辅导小侄女数学作业时,我发现一个有趣现象:她总在相似题型上反复出错,但当我用游戏化的方式拆解问题后,她竟能举一反三。这让我意识到,传统"填鸭式"辅导就像给老…

📰

OpenAPI自动生成DeepSeek工具定义:告别手写50个函数

1. 从手写 50 个工具函数说起:这个项目到底在解决什么问题如果你最近在折腾大模型应用,尤其是想让模型调用外部 REST API 来完成实际任务,那你大概率经历过这样一个阶段:打开编辑器,新建一个tools.py,然后开…

📰

DeepSeek新手入门指南:从零基础到高效使用AI对话平台

简介:《DeepSeek从入门到精通》是一份面向希望借助AI助手提升生产效率的实用指南,不限于专业开发者或数据科学家,教育工作者与技术爱好者同样可将其作为参考。内容从账户注册、控制台操作等入门基础讲起,逐步过渡到提问优化、文档…

📰

DeepSeek提示词工程实战:四要素改造、模板化与稳定性验证

简介:面向职场人士、学生、创业者及技术爱好者的DeepSeek高阶提示词合集,围绕自然语言处理与自动化办公场景,帮助读者解决提问无思路、AI输出不稳定和工作流程提效难的问题。包内仅含1个docx文档,约46KB,按十大类别组织…

📰

SuperSplat:面向工业落地的轻量化高斯溅射三维重建框架

简介:本资源是一个基于 Node.js 的前端开发项目压缩包,面向 Web 开发初学者与中级工程师,聚焦于模块化构建与本地开发环境快速启动。项目以 supersplat 为核心命名,已预配置完整依赖与开发脚本,开发者仅需安装 Node.js…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬