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