esp32 软件边沿中断消抖代码
时间: 2023-10-06 13:11:11 浏览: 59
以下是 ESP32 软件边沿中断消抖代码的示例:
```c++
#define BUTTON_PIN 12 // 定义按钮引脚
#define DEBOUNCE_TIME 50 // 消抖时间,单位为毫秒
volatile bool buttonState;
volatile unsigned long buttonPressTime;
void IRAM_ATTR buttonISR() {
if (millis() - buttonPressTime > DEBOUNCE_TIME) { // 确认已经过了消抖时间
buttonState = !buttonState; // 切换按钮状态
buttonPressTime = millis(); // 更新按钮按下时间
}
}
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISR, CHANGE);
}
void loop() {
if (buttonState == HIGH) {
// 按钮被按下的处理代码
} else {
// 按钮未被按下的处理代码
}
}
```
在此示例代码中,我们使用了一个 volatile 类型的变量 buttonState 来保存按钮的状态,当按钮被按下时,会触发中断,调用 buttonISR 函数,该函数会检查消抖时间是否过去,如果过去了,就切换按钮状态并更新按钮按下时间。在主循环中,我们检查按钮状态来执行相应的处理代码。这样,就可以避免按钮在短时间内多次触发中断的问题。