Arduino按钮使用

 Arduino内部有一个拉高的电阻,为20K,这样使用按钮时,就不需要外接上拉电阻了,然后按钮设置为按下为低

#include <Arduino.h>
void setup()
{
  Serial.begin(115200);
  pinMode(23, INPUT_PULLUP);   // 使用内部电阻进行拉高,常用
  Serial.println(digitalRead(23));
}

void loop()
{
}

单按钮多状态

按一次的状态检测:上次状态和本次状态相反,由于按键有抖动,所以进行软件消抖,可以单独创建一个按键扫描的任务

按两次:检测在一段时间内按了几次。

ESP32官方的注册组件有一个button按钮这样的库,但是功能没有OneButton这个功能多,比如自定义抖动时间,自定义长按时间。

#include <Arduino.h>
#include "OneButton.h"

#define BTN1_PIN 23
#define active_low true
#define pullup_enable true

/*按钮低电平有效,开启内部拉高*/
OneButton button1(BTN1_PIN, active_low, pullup_enable);
// 第一个参数,按钮连接的引脚
// 第二个参数,true  低电平有效,false 高电平有效
// 第三个参数,是否开启内部拉高
void singleClick1() {}
void doubleClick1() {}
void multiClick1()
{
  int n = button1.getNumberClicks();
  switch (n)
  {
  case 3:
    Serial.println("Triple Click");
    break;
  case 4:
    Serial.println("Quadruple Click");
    break;
  }
}

void longPressStart1()
{
}
void longPressStop1()
{
}
void longPress1()
{
}

void setup()
{
  Serial.begin(115200);
  button1.setDebounceTicks(50);  // 设置按键消抖时长
  button1.setClickTicks(500);        // 设置点击时长
  button1.attachClick(singleClick1); // 绑定点击事件,单击
  button1.attachDoubleClick(doubleClick1); // 双击
  button1.attachMultiClick(multiClick1);  // 多连击

  button1.setPressTicks(800);                    // 长按时间判定,800ms后算长按
  button1.attachLongPressStart(longPressStart1); // 长按开始(可选)
  button1.attachLongPressStop(longPressStop1);   // 长按结束(可选)
  button1.attachDuringLongPress(longPress1);     // 长按过程中运行的程序
}

void loop()
{
  button1.tick(); // 按键扫描
}

猜你喜欢

转载自blog.csdn.net/qq_45355603/article/details/129093108
今日推荐