当前位置: 首页 > 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…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...