Arduino按钮消抖
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; // 保存当前状态用于下次比较
}
上一篇