const int redPin = 8; // 红色LED连接在D8 const int greenPin = 9; // 绿色LED连接在D9 const int buttonPin = 2; // 按钮连接在D2 int ledState = 0; // LED状态:0表示红色,1表示绿色 int lastButtonState = HIGH; // 上一次读取的按钮状态 int buttonState; // 当前按钮状态 unsigned long lastDebounceTime = 0; // 上一次按钮状态改变的时间 unsigned long debounceDelay = 50; // 消抖时间(毫秒) void setup() { pinMode(redPin, OUTPUT); // 设置红灯引脚为输出 pinMode(greenPin, OUTPUT); // 设置绿灯引脚为输出 pinMode(buttonPin, INPUT_PULLUP); // 设置按钮引脚为输入并启用内部上拉电阻 } void loop() { int reading = digitalRead(buttonPin); // 读取当前按钮状态 // 如果当前读取的状态与上次不同,说明按钮可能被按下 if (reading != lastButtonState) { lastDebounceTime = millis(); // 记录当前时间用于消抖 } // 检查按钮状态是否稳定持续超过设定的消抖延迟 if ((millis() - lastDebounceTime) > debounceDelay) { // 如果状态发生了变化(已经稳定) if (reading != buttonState) { buttonState = reading; // 更新按钮状态 // 如果按钮是被按下的(由于使用了上拉,按下是 LOW) if (buttonState == LOW) { ledState = !ledState; // 切换LED状态(0变1,1变0) } } } // 根据ledState设置对应的LED亮灭 if (ledState == 0) { digitalWrite(redPin, HIGH); // 点亮红灯 digitalWrite(greenPin, LOW); // 关闭绿灯 } else { digitalWrite(redPin, LOW); // 关闭红灯 digitalWrite(greenPin, HIGH); // 点亮绿灯 } lastButtonState = reading; // 保存本次按钮状态供下次比较 }