为何使用双边沿触发中断而非上升沿触发中断?为什么按下按键后灯未亮,并在松开按键后熄灭?请参考以下代码和电路图:

此代码中选用双边沿触发中断,因为按键的机械特性会导致电平从高到低、低到高来回切换,双边沿触发中断可以将所有触发边缘有效地捕获。同时,在按下按键时,电平需要切换两次才能达到有效触发中断的状态,因此使用上升沿触发中断无法满足要求。
而按下按键后灯未亮,是因为按键的电路结构修改了芯片上拉(或下拉)电阻的电平,导致电平状态被改变。因此需要在代码中添加相应的判断语句,对电平状态的变化进行识别并执行相应的操作。下面是完整的优化代码:
```html// 电路图见上图 const int buttonPin = 2; // 按键连接到引脚2 const int ledPin = 13; // LED连接到引脚13 int buttonState = 0; // 初始化按键状态为0 void setup() { pinMode(ledPin, OUTPUT); // 初始化LED为输出 pinMode(buttonPin, INPUT_PULLUP); // 初始化按键为输入上拉 attachInterrupt(buttonPin, buttonInterrupt, CHANGE); // 绑定中断函数 } void loop() { } void buttonInterrupt() { // 按键触发中断函数 buttonState = digitalRead(buttonPin); // 读取按键状态 if (buttonState == LOW) { // 判断按键状态是否低电平 digitalWrite(ledPin, HIGH); // 点亮LED } else { // 按键状态非低电平,即松开按键,熄灭LED digitalWrite(ledPin, LOW); } }
```