YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 26037|回复: 1
打印 上一主题 下一主题

Arduino OneButton Library -- 很好用的按键库(支持单击、双击、长按)无阻塞-推荐

[复制链接]

签到天数: 867 天

[LV.10]以坛为家III

跳转到指定楼层
楼主
发表于 2020-2-25 15:44:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文地址: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),它实现以下状态图:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 支持支持 反对反对

该用户从未签到

沙发
发表于 2020-3-1 08:21:18 | 只看该作者
最近在学python  用来捣鼓下arduino 应该可以吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-10-18 14:39 , Processed in 0.050024 second(s), 27 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表