当前位置: 首页 > news >正文

Arduino OneButton按键处理库实现单击/双击/长按功能

Arduino OneButton按键处理库实现单击/双击长按功能


✨在Arduino开发平台下,按键的单击/双击/长按功能,在通过使用OneButton库,很容易就可以轻松实现。这就是支持C/C++模块化设计的好处,避免重复性开发的工作。

  • 🔖本文将具体接收OneButton库的相关调用函数介绍说明以及有关常用按键操作的使用方法。
  • 📍 OneButton库github地址:https://github.com/mathertel/OneButton

OneButton接口函数

  • 🌿 OneButton(const int pin, const boolean activeLow = true, const bool pullupActive = true);//实例化OneButton对象
  • pin,必填参数,指定引脚号。
  • bool,类型,可选,默认参数是true:按下为低电平; false : 按下为高电平
  • bool,类型,可选,默认参数是true,也就是将引脚上拉开启。
  • 🌿setClickTicks(const unsigned int ms):设置单击时间
  • 🌿setDebounceMs(const unsigned int ms):设置双击时间
  • 🌿setPressTicks(const unsigned int ms):设置长按时间
  • 🌿attachClick(callbackFunction newFunction);:单击时调用的函数。
  • 🌿attachDoubleClick(callbackFunction newFunction);:双击时调用的函数。
  • 🌿attachMultiClick(callbackFunction newFunction);:多次按此单击时调用的函数。
  • 🌿attachLongPressStart(callbackFunction newFunction);:长按开始时调用的函数。
  • 🌿attachLongPressStop(callbackFunction newFunction);:长按结束调用的函数。
  • 🌿attachDuringLongPress(callbackFunction newFunction);:长按期间调用的函数。
  • 🌿tick(void);按键扫描函数。
  • 🌿tick(bool level);:重新给按键引脚电平状态。
  • 🌿reset(void);:重启按键状态。
  • 🌿getNumberClicks(void);:获取按键次数(单击或多击)。
  • 🌿bool isIdle() :查询当前按键状态。如果当前正在处理按钮按流,则返回true。(这允许对电源敏感的应用程序知道何时可以安全地关闭主CPU)
  • 🌿isLongPressed():当检测到长按时为True

📝测试代码

  • 🌿测试对象:ESP32S3
  • 📋单击按下esp32板上的 boot0按键时,板载ws2812变为红色,双击按钮变成绿色,长按之后变成蓝色。
#include <Arduino.h>
#include "OneButton.h"  //https://github.com/mathertel/OneButton
#include <FastLED.h>  //https://github.com/FastLED/FastLED#define KEY 0 //esp32 BOOT0按键引脚#define LED_PIN 48  //ESP32-S3-DevKitC-1 RGB GPIO38 /YD:GPIO48
#define NUM_LEDS 1
OneButton button(KEY, true);CRGB leds[NUM_LEDS];void click();/******单击******/
void doubleclick();/******双击******/
void longPressStart();/******长按开始******/
void duringLongPress();/******长按期间******/
void longPressStop();/******长按结束******/
void attachPressStart();void setup()
{Serial.begin(115200);FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);// pinMode(RGB_PIN,OUTPUT);// digitalWrite(RGB_PIN,LOW);button.reset();//清除按钮状态机的状态button.attachClick(click);//注册单击button.attachDoubleClick(doubleclick);//注册双击button.attachLongPressStart(longPressStart);//注册长按开始button.attachDuringLongPress(duringLongPress);//注册长按button.attachLongPressStop(longPressStop);//注册长按结束button.attachDuringLongPress(attachPressStart);//按下键就会持续触发leds[0] = CRGB(255, 0, 0); // 设置颜色为红色FastLED.show();delay(1000);leds[0] = CRGB(0, 255, 0); // 设置颜色为绿色FastLED.show();delay(1000);leds[0] = CRGB(0, 0, 255); // 设置颜色为红色FastLED.show();delay(1000);leds[0] = CRGB(0, 0, 0); // 关闭FastLED.show();
}
void loop()
{button.tick();delay(10);
}
/******单击******/
void click()
{Serial.println("click");leds[0] = CRGB(255, 0, 0); // 设置颜色为红色FastLED.show();
}
/******双击******/
void doubleclick()
{Serial.println("Doubleclick");leds[0] = CRGB(0, 255, 0); // 设置颜色为绿色FastLED.show();
}
/******长按开始******/
void longPressStart()
{Serial.println("LongPressStart");
}
/******长按期间******/
void duringLongPress()
{if (button.isLongPressed()){Serial.printf("DuringLongPress,KEY STATE:%d\r\n",digitalRead(KEY));delay(50);//稍作延时处}
}
/******长按结束******/
void longPressStop()
{Serial.println("LongPressStop"); leds[0] = CRGB(51, 51, 153); // 设置颜色为靛蓝FastLED.show();}
void attachPressStart()
{Serial.printf("attachPressStart,KEY STATE:%d\r\n",digitalRead(KEY));
}

相关文章:

Arduino OneButton按键处理库实现单击/双击/长按功能

Arduino OneButton按键处理库实现单击/双击长按功能 ✨在Arduino开发平台下&#xff0c;按键的单击/双击/长按功能&#xff0c;在通过使用OneButton库&#xff0c;很容易就可以轻松实现。这就是支持C/C模块化设计的好处&#xff0c;避免重复性开发的工作。 &#x1f516;本文将…...

day52 django的下载与安装

课程的大致安排 大概两周的时间都是围绕着Django框架的学习&#xff0c;包括后续要学习的drf、Redis、celery、es等技术栈都是围绕Django展开的&#xff0c;因此、要求所有的同学必须认证学习了 市场中所有使用Python开发的web项目&#xff0c;Django框架占有率达到90%以上 …...

WebGL智慧城市软件项目

WebGL开发智慧城市项目时&#xff0c;需要考虑多个方面&#xff0c;包括技术、隐私、安全和可持续性。以下是一些需要注意的关键问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.隐私和数据安全…...

VMware重装后没有虚拟网卡

我重装VMware之后网络适配器里面没有虚拟网卡&#xff0c;找了CSDN上很多博主说的&#xff0c;都没用。 最终去看了b站的up视频就成功了。 原因是因为第一次安装后卸载不干净&#xff0c;软件在电脑上的注册表没有删掉。 要用下面两个软件清理一下残留文件&#xff0c;这两个…...

软件安全基础

传参基础 64位汇编传参&#xff0c;当参数少于7个时&#xff0c; 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时&#xff0c; 前 6 个与前面一样&#xff0c; 但后面的依次从 “右向左” 放入栈中&#xff0c;即和32位汇编一样。 我们这边要利用wr…...

探索项目管理软件的多重用途和益处

项目管理软件俨然成了当下项目管理话题中的热门词条&#xff0c;作为一个辅助性管理工具&#xff0c;项目管理软件有什么用&#xff1f;真的值得购入吗&#xff1f; 什么是项目管理软件 顾名思义&#xff0c;项目管理软件就是指在项目管理过程使用的各种软件工具。项目管理软件…...

Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品&#xff0c;订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库&#xff0c;可以在arduino的…...

【车载开发系列】AutoSar中的CANTP

【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP一. CANTP相关术语二. CANTP相关概念1&#xff09;单帧&#xff1a;SF(Single Frame)2&#xff09;首帧&#xff1a;FF(First Frame)3&#xff09;连续帧CF(Consecutive F…...

JUL日志

文章目录 JUL日志JUL日志讲解Properties配置文件编写日志配置文件Lombok快速开启日志Mybatis日志系统 JUL日志 如果使用System.out.println来打印信息&#xff0c;项目中存在大量的控制台输出语句&#xff0c;会显得很凌乱&#xff0c;而且日志的粒度是不够细的&#xff0c;假…...

ZZ308 物联网应用与服务赛题第G套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;G卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…...

如何使用 vcpkg 编译Google-V8脚本引擎(ECMA/JavaScript)?

WIN32K下一键杀死所有同名进程命令行&#xff1a;taskkill /F /IM chrome.exe ############################## 1、准备 Visual Studio 2019 2、准备 Visual Studio 2022 3、安装 VC、MSBuild 编译集成环境 4、安装 Python 3.x&#xff0c;早期V8发行版本编译安装 2.x 5、…...

系列二十二、idea Live Templates

一、idea Live Templates 1.1、Java Group 1.1.1、fast fast 快速在类上添加注解Data AllArgsConstructor NoArgsConstructor Accessors(chain true) ToString(callSuper true) 1.1.2、getThreadName getThreadName快速获取当前线程的名字Thread.currentThread().getName…...

电脑本地安装宝塔/docker 安装宝塔

一、先去docker官网(http://docker.com)下载软件并进行安装&#xff0c;网站打不开多试几次或者找梯子。 二、macos系统里按“command 空格”搜索“终端”回车&#xff0c;启动终端程序。 三、执行下面命令&#xff0c;拉取docker镜像。 docker pull pch18/baota:clear pch…...

Java Lambda 表达式笔记

文章目录 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式 Lambda 表达式&#xff0c;也可称为闭包. …...

Flutter笔记:状态提升、控制器模式、GetX控制器和服务

Flutter笔记 状态提升、控制器模式、GetX控制器和服务 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/1…...

9.spark自适应查询-AQE之动态调整Join策略

目录 概述动态调整Join策略原理实战 动态优化倾斜的 Join原理实战 概述 broadcast hash join 类似于 Spark 共享变量中的广播变量&#xff0c;Spark join 如果能采取这种策略&#xff0c;那join 的性能是最好的 自适应查询AQE(Adaptive Query Execution) 动态调整Join策略 原…...

CentOs7 NAT模式连接网络

1.配置动态网络 1.1 检查主机网卡配置 检查主机的网络设置 进入控制面板&#xff0c;找到网络共享中心 查看适配器是否都已经开启 1.2 设置虚拟机的网络配置 打开虚拟机网络配置设置&#xff0c;对网卡VMnet8 进行设置 记住网关 全部选择应用&#xff0c;确定 1.3 设置…...

linux安装git

目录 声明 前言 正文 &#xff08;1&#xff09;下载git压缩包 &#xff08;2&#xff09;git压缩包解压 &#xff08;3&#xff09;解压完成后需要进行源码的编译操作 a.首先进去到解压后的文件目录中&#xff1a; b.执行&#xff1a; 编译的过程中可能遇到的问题&am…...

thinkphp6 起步

1、安装 composer create-project topthink/think6.0 tp62、使用多应用模式&#xff0c;你需要安装多应用模式扩展think-multi-app composer require topthink/think-multi-app3、config/app.php中&#xff0c;将 ‘auto_multi_app’ > flase, 改为true&#xff1b; 需要自…...

会员题-力扣408-有效单词缩写

有效单词缩写 字符串可以用 缩写 进行表示&#xff0c;缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如&#xff0c;字符串 “substitution” 可以缩写为&#xff08;不止这几种方法&#xff09;&#xff1a; “s10n” (“s ubstitutio n”) “sub4…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...