关联单击事件 button.attachClick(callback)
关联双击事件             button.attachDoubleClick(callback)
设置长按最短时长      button.setPressTicks(time_ms)
关联长按开始事件      button.attachLongPressStart(callback)
关联长按结束事件      button.attachLongPressStop(callback)
关联长按期间事件      button.attachDuringLongPress(callback)
关联按下事件,不管单击双击长按,持续触发  button.attachPressStart(callback)
获取按键时长              button.getPressedTicks()
设置单击时长,单位毫秒  button.setClickTicks(time_ms)
按键扫描                   button.tick()

示例:

#include <Arduino.h>
#include "OneButton.h"
 
#define PIN_INPUT 0
 
OneButton button(PIN_INPUT, true);
// 第一个参数,按钮连接的引脚
// 第二个参数,true  低电平有效,false 高电平有效
// 第三个参数,是否开启内部INPUT_PULLUP   true :pullup enable
 
void click(){}
void doubleclick(){}

void multiClick(){
  int n = button.getNumberClicks();
  switch (n)
  {
  case 3:
    Serial.println("Triple Click");
    break;
  case 4:
    Serial.println("Quadruple Click");
    break;
  }
}

void longPressStart(){}

void duringLongPress()
{
  if (button.isLongPressed())     // 是否正在被长按
  {
    Serial.print("duringLongPress:");
    Serial.println(button.getPressedTicks());
    delay(50);
  }
}
void longPressStop(){}
void attachPressStart(){}

void setup()
{
  Serial.begin(115200);
  button.reset();//清除一下按钮状态机的状态
  button.setDebounceTicks(50);  // 设置按键消抖时长
  button.setClickTicks(500);        // 设置点击时长
  button.attachClick(click);            // 单击
  button.attachDoubleClick(doubleclick);// 双击
  button.attachMultiClick(multiClick);  // 多连击

  button.setPressTicks(800);           // 长按时间判定,800ms
  button.attachLongPressStart(longPressStart);   // 按下800ms时触发
  button.attachDuringLongPress(duringLongPress);
  button.attachLongPressStop(longPressStop);     // 长按松开时触发

  button.attachPressStart(attachPressStart);     //按下键就会持续触发
}
void loop()
{
  button.tick();
  delay(10);
}

参考:ESP32 Arduino(十一) 按键控制库 OneButton

          Arduino按钮使用

更多推荐