// 定义引脚
#define LED_PIN D4
#define BUTTON_PIN D3
// 记录上一次按键状态,用于检测变化
int lastButtonState = HIGH;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
// 【关键修复1】启用内部上拉电阻,未按下时默认高电平
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.println("System Ready. Press button to toggle? (Hold to light)");
}
void loop() {
// 读取当前按键状态(按下为 LOW,松开为 HIGH)
int currentReading = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && currentReading == LOW) {
delay(20); // 消抖
// 再次确认真的是按下
if (digitalRead(BUTTON_PIN) == LOW) {
// 翻转LED状态
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
Serial.println("Toggle!");
}
}
// // 如果检测到电平发生变化
// if (currentReading != lastButtonState) {
// // 【关键修复2】延时20ms,跳过按键抖动期
// delay(20);
// // 重新读取一次,确认电平真的稳定了
// currentReading = digitalRead(BUTTON_PIN);
// // 如果确认是按下(LOW),则点亮LED
// if (currentReading == LOW) {
// digitalWrite(LED_PIN, HIGH);
// Serial.println("Button Pressed -> LED ON");
// }
// // 如果确认是松开(HIGH),则熄灭LED
// else {
// digitalWrite(LED_PIN, LOW);
// Serial.println("Button Released -> LED OFF");
// }
// 更新上一次状态,防止重复触发
lastButtonState = currentReading;
// }
}Loading
st-nucleo-l031k6
st-nucleo-l031k6