const int BUTTON_PIN = 7; // 按钮的引脚
const int LED_PIN = 3; // LED灯的引脚
int buttonState = 0; // 按钮状态
int lastButtonState = HIGH; // 上一次按钮状态
unsigned long lastDebounceTime = 0; // 上一次读取按钮状态的时间
unsigned long debounceDelay = 20; // 消抖延迟时间
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT); // 设置LED的引脚为输出
pinMode(BUTTON_PIN, INPUT_PULLUP); // 设置按钮的引脚为输入,因为我们要读取它的状态
}
void loop() {
int reading = digitalRead(BUTTON_PIN); // 读取按钮的状态
// 检查是否需要进行按钮消抖
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
Serial.print("lastDebounceTime:");
Serial.println(lastDebounceTime);
Serial.print("millis():");
Serial.println(millis());
// 如果时间间隔大于消抖延迟时间,更新按钮状态
if (millis() - lastDebounceTime > debounceDelay) {
// 只有当按钮状态发生改变时才进行处理
if (reading != buttonState) {
buttonState = reading;
// 检测到按钮按下事件
if (buttonState == LOW) {
// 切换LED灯状态
Serial.print("灯状态:");
Serial.println(!digitalRead(LED_PIN));
Serial.print("开关状态:");
Serial.println(digitalRead(BUTTON_PIN));
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
}
}
// 更新上一次按钮状态
lastButtonState = reading;
}