中斷按鈕按下

此示例使用連線到數字引腳 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,而不是預期的一次。