中断按钮按下

此示例使用连接到数字引脚 2 和 GND 的按钮(轻触开关),使用内部上拉电阻,因此当未按下按钮时,引脚 2 为高电平。

const int LED_PIN = 13;
const int INTERRUPT_PIN = 2;
volatile bool ledState = LOW;

void setup() {
    pinMode(LED_PIN, OUTPUT);
    pinMode(INTERRUPT_PIN, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), myISR, FALLING); // trigger when button pressed, but not when released.
}

void loop() {
    digitalWrite(LED_PIN, ledState);
}

void myISR() {
    ledState = !ledState;
    // note: LOW == false == 0, HIGH == true == 1, so inverting the boolean is the same as switching between LOW and HIGH.
}

这个简单示例的一个问题是按钮倾向于反弹,这意味着当按下或释放时,电路在其进入最终关闭或打开状态之前不止一次打开和关闭。此示例不考虑这一点。因此,有时按下按钮会多次切换 LED,而不是预期的一次。