Arduino 触摸按键:实现单击,双击,长按功能,稳定无抖动
作者:野牛程序员:2023-08-24 10:01:43Arduino阅读 4163
以下是一个示例代码,展示如何使用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颜色对照表详解
