当前位置:首页Arduino > 正文

Arduino 触摸按键:实现单击,双击,长按功能,稳定无抖动

作者:野牛程序员:2023-08-24 10:01:43Arduino阅读 3758

以下是一个示例代码,展示如何使用Arduino的触摸传感器实现单击、双击和长按功能,同时保持稳定的无抖动效果:

const int touchPin = 9; // 触摸传感器连接的引脚
int touchState = LOW;   // 当前触摸状态
int lastTouchState = LOW; // 上一个触摸状态
unsigned long touchDownTime = 0; // 触摸按下时间
bool touchInProgress = false; // 触摸操作进行中
bool singleClick = false;     // 单击标志
bool doubleClick = false;     // 双击标志
bool longPress = false;       // 长按标志
unsigned long debounceDelay = 50; // 防抖延迟
unsigned long longPressDelay = 1000; // 长按延迟
unsigned long doubleClickDelay = 300; // 双击延迟
unsigned long lastDebounceTime = 0; // 上次状态改变时间

void setup() {
  pinMode(touchPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  int touchReading = digitalRead(touchPin);

  if (touchReading != lastTouchState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (touchReading != touchState) {
      touchState = touchReading;

      if (touchState == HIGH) {
        // 触摸按下
        touchDownTime = millis();
        touchInProgress = true;
        singleClick = false;
        doubleClick = false;
        longPress = false;
      } else {
        // 触摸释放
        if (touchInProgress) {
          if ((millis() - touchDownTime) < longPressDelay) {
            // 短按判定
            if (!singleClick) {
              singleClick = true;
            } else if (singleClick && !doubleClick) {
              // 第二次短按判定
              doubleClick = true;
            }
          } else {
            // 长按判定
            longPress = true;
          }
          touchInProgress = false;
        }
      }
    }
  }

  if (singleClick) {
    Serial.println("单击");
    singleClick = false;
  }
  if (doubleClick) {
    Serial.println("双击");
    doubleClick = false;
  }
  if (longPress) {
    Serial.println("长按");
    longPress = false;
  }

  lastTouchState = touchReading;
}

在这个示例代码中,通过读取触摸传感器的状态,并根据不同的时间间隔判断触摸事件。可以根据需要调整防抖延迟、长按延迟和双击延迟等参数。当检测到单击、双击或长按时,会在串口上输出相应的消息。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击