OneButton: 用于使用单个按钮进行多用途输入的Arduino库

Arduino OneButton库是一个用于简化按钮操作的库,它可以轻松地处理按钮的单击、双击和长按等操作。适用于Arduino开发板以及ESP32等其他基于Arduino的开发板。

这个Arduino库正在改进单个按钮的输入使用。它展示了如何使用一个带有一个按钮的数字输入管脚来检测一些典型的按钮按下事件,如单次单击、双击和long-time按下。这使您能够将同一个按钮用于多个功能,并降低了硬件投资。

这也是一个使用上面的简单模式实现简单finite-state机器的示例。

您可以在http://www.mathertel.de/Arduino/OneButtonLibrary.aspx上找到有关此库的更多详细信息

开始

将此存储库克隆到Arduino/Libraries或使用ArduinoIDE库管理器安装此库的副本。您可以在Arduino的网站上找到有关安装库的更多详细信息。

#include <Arduino.h>
#include <OneButton.h>

每个物理按钮都需要自己的OneButton实例。可以这样初始化它们:

将按钮初始化为GND

#define BUTTON_PIN 4

/**
* Initialize a new OneButton instance for a button
* connected to digital pin 4 and GND, which is active low
* and uses the internal pull-up resistor.
*/
OneButton btn = OneButton(
  BUTTON_PIN,  // Input pin for the button
  true,        // Button is active LOW
  true         // Enable internal pull-up resistor
);

将按钮初始化为VCC

#define BUTTON_PIN 4

/**
* Initialize a new OneButton instance for a button
* connected to digital pin 4, which is active high.
* As this does not use any internal resistor
* an external resistor (4.7k) may be required to create a LOW signal when the button is not pressed.
*/
OneButton btn = OneButton(
  BUTTON_PIN,  // Input pin for the button
  false,       // Button is active high
  false        // Disable internal pull-up resistor
);

连接到事件处理函数

初始化按钮后,可以通过将事件附加到按钮实例来处理事件。事件可以是静态函数,也可以是lambda(没有捕获变量)。

// Handler function for a single click:
static void handleClick() {
  Serial.println("Clicked!");
}

// Single Click event attachment
btn.attachClick(handleClick);

// Double Click event attachment with lambda
btn.attachDoubleClick([]() {
  Serial.println("Double Pressed!");
});

别忘了tick()!

为了使OneButton正常工作,必须在主loop()内的每个按钮实例上调用tick()。如果你没有得到任何按钮事件,这可能就是原因。

void loop() {
  btn.tick();

  // Do other things...
}

事件

以下是此库处理的事件的完整列表:

连接方法 描述
attachClick 一旦检测到一次单击就激发。
attachDoubleClick 检测到双击时立即激发。
attachPressStart 按下按钮后立即点火。
attachLongPressStart 按下按钮1秒后激发。
attachDuringLongPress 只要按下按钮,就会定期触发。
attachLongPressStop 长时间按住按钮释放时激发。

事件计时

当在指定毫秒数后调用tick()时,将发生有效事件。您可以使用以下函数更改计时。

注意:附加双击将增加检测单个单击的延迟。如果未附加双击事件,则库将在一次单击持续时间后假定有效的单次单击,否则它必须等待双击超时结束。

方法 默认值 (ms) 描述
setDebounceTicks(int) 50 忽略其他级别更改的时间段。
setClickTicks(int) 600 用于区分单次单击和双击的超时。
setPressTicks(int) 1000 按住按钮以触发长按的持续时间。

其他方法

OneButton还提供了几个用于查询按钮状态的附加函数:

方法 描述
bool isLongPressed() 检测按钮当前是否处于长按状态。
int getPressedTicks() 获取当前按下按钮的毫秒数。

tick() and reset()

您可以在调用tick(bool)时指定一个逻辑级别,这将跳过读取pin并使用该级别。如果您想重置按钮的内部状态,请致电reset()。

问题

如果您的按钮没有按应有的方式工作,请检查以下项目:

  1. 检查你的线路和引脚编号。
  2. 您是否对循环中的每个按钮实例调用了tick()?
  3. 你有没有在不调整时钟刻度的情况下改变时钟计时器?
- 本文来自网络,如有侵权,请联系本站处理。

2024-01   阅读(741)   评论(0)
 标签: maker Arduino

涨知识
I2S

I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。

评论:
相关文章

ESP32 使用DAC模拟输出完成两路呼吸灯

ESP32的DAC函数可以实现真正的模拟输出。


在 ESP32 上使用 LEDC (PWM)

ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。


Arduino UNO R4 WiFi 官方介绍文档

本文档作为UNO R4 WiFi的技术概览,您将找到一系列资源和指南链接,帮助您开始下一个项目。


Arduino Bootloader

本文从Arduino Uno入手,看看怎样在这个"简单"的8bit单片机搭建一个属于自己的bootloader

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。