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

发布于:2022-12-04 ⋅ 阅读:(813) ⋅ 点赞:(0)

使用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);
}

网站公告

今日签到

点亮在社区的每一天
去签到