Arduino 开源按键库大合集(单击/双击/长按实现)
2025.5.10 22:25更新:增加了Button2
2025.5.10 13:13更新:增加了superButton
虽然Arduino自带按键中断attachInterrupt(button1.PIN, isr, FALLING);
,但是要是要实现去抖,双击检测,长按检测等等就略微麻烦些,轮子很多我们不必重新造了。
这个帖子来由是因为OneButton这个库在我的一个程序MQTT客户端里面,联网就好使,没联网就不能用。调试半天折腾不出来,索性试试其他的,顺便就收集了若干个Arduino按键库。
1. AceButton
bxparks/AceButton: An adjustable, compact, event-driven button library for Arduino that debounces and dispatches events to a user-defined event handler. -
一个可调节的、紧凑的、事件驱动的Arduino按钮库,能够消抖并将事件分发到用户定义的事件处理程序。
2. ClickButton
marcobrianza/ClickButton: A simple button Arduino library to get short and long clicks, multiple clicks (double click, triple click etc.). Click-and-hold is also possible. -
一个简单的单按钮Arduino库,用于获取短按和长按,多次点击(双击、三击等)。按住不放也可以检测。
3. OneFuncButton
andrijaantunovic/OneFuncButton: A simple Arduino button library modelled as a state machine -
这个库适用于需要通过按钮快速且简单地进行控制的简单项目。它不使用任何回调函数或中断。
4. ButtonEvents
fasteddy516/ButtonEvents: An Arduino library for catching tap, double-tap and press-and-hold events for buttons -
ButtonEvents 是一个适用于 Arduino 的库,它提供了检测与连接到配置为数字输入引脚的按钮相关联的轻击、双击和长按事件的方法。
它依赖另外一个库:
https://github.com/thomasfredericks/Bounce2
5. OneButton
mathertel/OneButton: An Arduino library for using a single button for multiple purpose input. -
这个Arduino库改善了单个按钮用于输入的使用方式。它展示了如何使用一个连接了单个按钮的数字输入引脚来检测一些典型的按钮按下事件,例如单击、双击和长时间按压。这使您能够将同一个按钮用于多种功能 。
6. SuperButton
slavaza/SuperButton: Mulifunctional Arduino button. Detects single, double and long pressing with debounce suppression. Very easy using. -
检测按钮的单击、双击和长按,同时抑制触点的抖动。无需额外的微控制器资源,使用系统定时器,非常易于使用。
7. Button2
LennartHennigs/Button2: Arduino/ESP button library that provides callback functions to track single, double, triple and long clicks. It also takes care of debouncing. -
Gitcode地址: Button2: - GitCode -
Button2 是一个专为Arduino和ESP系列设备设计的开源库,旨在简化按钮操作的处理。由Lennart Hennigs开发,该库支持多种按钮事件,包括单击、双击、三击和长按,并提供了回调函数和主循环两种使用方式。Button2不仅处理了按钮的防抖动问题,还能显著减少和简化你的代码。
项目特点
- 简化代码:Button2通过提供回调函数和预设的事件处理机制,大大减少了开发者的编码工作量。
- 支持多种设备:经过测试,Button2兼容Arduino、ESP8266和ESP32等多种设备。
- 灵活的事件处理:支持单击、双击、三击和长按等多种按钮事件,且可以自定义事件处理函数。
- 防抖动处理:内置的防抖动机制确保了按钮输入的准确性。
- 扩展性强:支持自定义按钮状态处理函数,可以轻松集成不同类型的按钮。
----------------分割线--------------------
oneButton刚才说了在我的程序里面有些问题。
于是我先试用了AceButton,默认AceButton的双击事件也会产生单击事件,区别单击双击的用法也有,但是有些副作用,具体请看它的examples说明,在此不赘述。
最后我用了ButtonEvents,注意要装上它的依赖库即可。