中斷命令
attachInterrupt() 函式的用途是用來指定外部中斷的處理函式(Interrupt Service Routine, ISR),就像範例程式所示範的指定 buttonStateChanged() 當作 Interrupt 0 外部中斷的處理函式。 attachInterrupt() 函式有三個參數:
1. interrupt:外部中斷的編號。大部份 Arduino 板子都有兩個外部中斷,編號 0 (Interrupt 0)是在 pin 2 上,而編號 1 (Interrupt 1)是在 pin 3 上。
2. function:中斷處理函式(Interrupt Service Routine, ISR)。中斷處理函式必須是 沒有參數而且不回傳任何東西。
3. mode:定義什麼狀況下該觸發中斷,有四個可以設定的常數值:
LOW:當 pin 為 LOW 時觸發中斷
CHANGE:當 pin 狀態改變時觸發中斷,不管是從HIGH 到 LOW 或從 LOW 到 HIGH
RISING:當 pin 狀態從LOW 到 HIGH 時觸發中斷,RISING 又稱正緣觸發
FALLING:當 pin 狀態從HIGH 到 LOW 時觸發中斷,FALLING 又稱負緣觸發
注意
在中斷函式中,delay()函式將不再有作用
要在中斷函式內更改的值需要宣告為volatile類型
中斷函式通常是短小、執行效率比較高的函式。
const int ledPin = 13; // LED volatile int letStatus = LOW; void setup() { pinMode(ledPin, OUTPUT); // 把 ledPin 設置成 OUTPUT attachInterrupt(0, buttonStateChanged, RISING); pinMode(2,INPUT_PULLUP);//digitalWrite(2,HIGH); } void loop() { digitalWrite(ledPin, letStatus); delay(10000); // delay一個很長的時間模擬程式執行 } void buttonStateChanged() { letStatus = ~letStatus; // 把 led 的狀態反過來 digitalWrite(ledPin, letStatus); }