const int buttonPin = 2; // 按键连接的引脚
const unsigned long debounceDelay = 50; // 去抖延时(毫秒)
int buttonState; // 当前读取的按键状态
int lastButtonState = LOW; // 上次读取的按键状态
unsigned long lastDebounceTime = 0; // 上次切换状态的时间
int count = 0; // 按键被按下的次数
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600); // 初始化串口通信,设置波特率为9600
}
void loop() {
int reading = digitalRead(buttonPin);
// 如果按键状态改变了
if (reading != lastButtonState) {
// 重置去抖计时器
lastDebounceTime = millis();
}
// 检查是否超过了去抖延时
if ((millis() - lastDebounceTime) > debounceDelay) {
// 如果按键状态确实改变了
if (reading != buttonState) {
buttonState = reading;
// 仅当按键从低电平变为高电平时增加计数
if (buttonState == HIGH) {
count++;
Serial.print("Button pressed ");
Serial.print(count);
Serial.println(" times.");
}
}
}
// 保存当前读取的按键状态,用于下一次循环
lastButtonState = reading;
}