const int buttonPin = 2; // 按钮连接的引脚
const int ledPin = 13; // LED连接的引脚
int buttonState = HIGH; // 当前按钮状态
int lastButtonState = HIGH; // 上一次按钮状态
unsigned long lastDebounceTime = 0; // 上次状态变化时间
unsigned long debounceDelay = 50; // 消抖延时(ms)
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
// 如果状态改变(由于噪声或按下)
if (reading != lastButtonState) {
lastDebounceTime = millis(); // 重置计时器
}
// 如果经过足够时间
if ((millis() - lastDebounceTime) > debounceDelay) {
// 如果状态与当前不同
if (reading != buttonState) {
buttonState = reading;
// 只有当新状态为LOW时才视为有效按下
if (buttonState == LOW) {
digitalWrite(ledPin, !digitalRead(ledPin)); // 切换LED状态
Serial.println("Button pressed");
}
}
}
lastButtonState = reading; // 保存当前状态用于下次比较
}