使用OneButton库通过按钮控制ESP32的灯

使用OneButton库通过按钮控制ESP32的灯

1.OneButton库的使用

1.使用Arduino安装

点项目然后找到管理库
在这里插入图片描述
搜索Onebutton库选择最新版本安装即可
在这里插入图片描述

2.使用OneButton

代码最上方导入库

#include "OneButton.h"

设置按钮的引脚后,12代表按钮连接GPIO12和GND

#define BTN 12

实例化一个OneButton对象

OneButton button(BTN, true);

这样之后前期准备就好了

3.OneButton库的用法

定义一个单击函数

void click()
{
  Serial.println("click");
}
3.1关联单击事件
button.attachClick(click);

定义一个双击函数

void Doubleclick()
{
  Serial.println("Doubleclick");
}

关联双击事件

button.attachDoubleClick( Doubleclick);

类似的还有

3.2关联长按开始事件
button.attachLongPressStart()
3.3关联长按结束事件
button.attachLongPressStop()
3.5关联长按期间事件
 button.attachDuringLongPress()
3.6关联按键按下持续触发事件(注意是有按键按下就会开始触发并且持续触发)
button.isLongPressed()
3.7获取按键按着的时长(疑似无法使用了本人测试无法使用)
int getPressedTicks()
3.8获取按键现在是否被长按(0是不在长按1是在长按可以用赋值)
Serial.println(button.isLongPressed());
3.9清空按键状态机(建议在viod setup内提前使用)
button.reset();
3.10设计单击时长(单位毫秒,在多少毫秒内的按键变化都为单击)

使用样例

button.setClickTicks(50);
#include "OneButton.h" //引入头文件
#define BTN 12 //按钮引脚GPIO12和GND
OneButton button(BTN, true); //实例化一个OneButton对象

void click()
{
  Serial.println('click');
 }

void setup() {
  Serial.begin(115200); //设置波特率
  button.setClickTicks(500);//设置单击时间
  button.attachClick(click);//关联单击事件
}

void loop() {
  button.tick();//监视按钮
}
3.11设置消抖时长 (与设置单击时长用法一致)
button.setDebounceTicks();
3.12设置长按最短时长 (与设置单击时长用法一致)
button.setPressTicks();
3.13按键扫描(监听按键情况的写在viod loop内)
button.tick();

2.通过单击按钮控制AI Thinker ESP32-CAM(安信可的ESP32-CAM)自带的LED灯亮灭。

先上完整代码


#include <Arduino.h>
#include "OneButton.h" //引入头文件
#define LED 4  //自带的LED灯编号高频为亮,低频为灭
int key =0;     //设置状态键值最好可以用False和True
#define BTN 12 //按钮引脚GPIO12和GND

OneButton button(BTN, true); //实例化一个OneButton对象


void click()  //单击的变化键值的函数
{
  Serial.println("click");
if(key==0){
    key=1;
}
else
    key=0;
}


void setup()
{
  Serial.begin(115200); //设置波特率
  pinMode(LED, OUTPUT);//LED灯信号输出
  button.attachClick(click);//绑定单击事件到函数
}
void loop()
{
  button.tick();//监视按钮
  if(key==1){   //根据键值变化改变LED状态
    digitalWrite(LED, HIGH);
    }
    else
    digitalWrite(LED, LOW);
}

主要思路是通过设置一个key值的变化来控制LED灯的状态.我这里设置的是0和1

int key =0;     //设置状态键值最好可以用False和True

通过单击使key值在0和1之间变化

void click()  //单击的变化键值的函数
{
  Serial.println("click");
if(key==0){
    key=1;
}
else
    key=0;
}

然后通过监视key值的状态变化LED的状态

void loop()
{
  button.tick();//监视按钮
  if(key==1){   //根据键值变化改变LED状态
    digitalWrite(LED, HIGH);
    }
    else
    digitalWrite(LED, LOW);
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 OneButton.h 可以很方便地实现按键的长按和短按功能。下面是一个简单的示例代码,演示了如何使用来检测按键的状态: ```C++ #include <OneButton.h> // 定义按键引脚 #define BUTTON_PIN 2 // 创建一个 OneButton 对象 OneButton button(BUTTON_PIN, true); void setup() { // 初始化串口 Serial.begin(9600); // 设置按键长按和短按的时间阈值(单位为毫秒) button.setClickTicks(100); button.setPressTicks(1000); // 绑定按键短按和长按的回调函数 button.attachClick(clickHandler); button.attachLongPressStart(longPressStartHandler); button.attachLongPressStop(longPressStopHandler); } void loop() { // 处理按键事件 button.tick(); } // 按键短按的回调函数 void clickHandler() { Serial.println("Short press detected."); } // 按键长按开始的回调函数 void longPressStartHandler() { Serial.println("Long press started."); } // 按键长按结束的回调函数 void longPressStopHandler() { Serial.println("Long press stopped."); } ``` 在上面的代码中,我们首先定义了按键的引脚。然后创建了一个 OneButton 的对象,并设置了按键长按和短按的时间阈值。接着,我们绑定了按键短按和长按的回调函数,这些函数将在相应的事件发生时被调用。最后,在主循环中调用 `button.tick()` 处理按键事件即可。 需要注意的是,`OneButton.h` 使用了 `attachInterrupt()` 函数来检测按键状态,因此在使用时需要根据实际情况选择正确的引脚。同时,由于 Arduino 的 `loop()` 函数是一个无限循环,因此需要使用 `button.tick()` 来驱动按键事件的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值