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