原文地址:http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
Arduino OneButton库
该草图和库显示了如何通过检测一些典型的按钮按下事件(例如单击,双击和长时间按下按钮)来使用输入引脚。这使您可以将同一按钮重复使用以实现多种功能,并降低硬件投资。
下载项目文件
您可以使用git或svn从github下载OneButton库,或将最新版本下载为zip文件。
(标有“下载ZIP”的右侧按钮)
https://github.com/mathertel/OneButton
介绍
从Arduino编程开始,您肯定会看过简单的Button教程,以了解如何从按钮中读取信息,以及Debounce示例,该示例演示了如何通过消除因触点抖动而产生的短时开/关序列,从按钮中获得清晰的信号。
结果是一个名为OneButton的小型库,您可以轻松地将其连接到草图。这篇文章向您展示了如何使用该库,如何实现它,并在最后给出了简短的参考表。
我网站上的这篇文章也是为了解释一些好的实现方法而写的,所以我希望所有超链接都可以指导您找到其他重要的示例和教程(如果您还没有看过的话)。
读取按钮而不阻塞程序
上面提到的简单示例的一个缺点是,它们使用loop()函数,因此很难重用它们包含的代码。
我希望您的草图必须做更复杂的事情,并且您需要使用loop()函数来实现自己的目的。因此,避免实现此功能是库和可重用代码的普遍要求。相反,应该经常调用库的tick()函数。在此功能内,您将找到用于检测所有3个可用事件的编码。
对于3个已实现事件中的任何一个,您都可以注册一个函数以将您的代码链接到库。当检测到相应情况时,将调用您的函数。
使用OneButton库的示例
这是一个简单的示例,当双击引脚A1上的按钮时,该示例使用OneButton库更改引脚13上的默认led。
[C] 纯文本查看 复制代码 /*
S01_SimpleOneButton
Simple OneButton sketch that shows how to ???
The circuit:
* Connect a pushbutton to pin A1 (ButtonPin) and ground
* and see results on pin 13 (StatusPin).
* 03.03.2011 created by Matthias Hertel
*/
#include "OneButton.h"
// Setup a new OneButton on pin A1.
OneButton button(A1);
// setup code here, to run once:
void setup() {
// enable the standard led on pin 13.
pinMode(13, OUTPUT); // sets the digital pin as output
// link the doubleclick function to be called on a doubleclick event.
button.attachDoubleClick(doubleclick);
} // setup
// main code here, to run repeatedly:
void loop() {
// keep watching the push button:
button.tick();
// You can implement other code in here or just wait a while
delay(10);
} // loop
// this function will be called when the button was pressed 2 times in a short timeframe.
void doubleclick() {
static int m = LOW;
// reverse the LED
m = !m;
digitalWrite(13, m);
} // doubleclick
请还阅读内联注释。您可以在此处看到在第二次释放按钮时如何将doubleclick功能附加到该情况。
实施细节
如果您想在这里查看图书馆的工作方式,请做一些解释:
在tick()函数内的OneButton库中,您可以找到用于检查输入引脚以检测单击,双击或长按情况的实现。这种实现称为有限状态机(FSM),它实现以下状态图:
|