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

- 上一篇:arduino如何用按键程序切换
- 下一篇:matplotlib颜色对照表详解