attachInterrupt()
描述
掛載編碼器介面的中斷服務函式。
在不同工作模式下,可以觸發中斷的條件也不同:
- Pulse/DIR、CW/CCW、A/B Pulse 模式:有 index 訊號中斷(由 setIndexReset() 設定)、比較器中斷(由 setComparator() 設定)、計數器溢出中斷(由 setRange() 設定)、計數器回捲中斷(由 setRange() 設定)。
- PWM 脈波捕捉模式:有脈波由 LOW 變 HIGH 的邊緣觸發中斷與由 HIGH 變 LOW 的邊緣觸發中斷。
- SSI 模式:沒有中斷觸發條件。
語法
Enc0.attachInterrupt(isr)
Enc1.attachInterrupt(isr)
Enc2.attachInterrupt(isr)
Enc3.attachInterrupt(isr)
參數
Enc0、Enc1、Enc2、Enc3
:分別對應 ENC0、ENC1、ENC2、ENC3 編碼器介面。
isr
:中斷服務函式。此函式必須有一個 int 型別的參數,用來接收觸發中斷的事件類型,共有以下 10 種:
INTR_COMPARE
:代表發生比較器中斷事件。INTR_INDEX
:代表發生 index 訊號中斷事件。INTR_OVERFLOW
:代表發生計數溢出中斷事件。(需要 86Duino Coding 105 以後的版本)INTR_UNDERFLOW
:代表發生計數回捲中斷事件。(需要 86Duino Coding 105 以後的版本)INTR_A_PULSE_LOW
:代表 A 針腳上發生脈波由 LOW 變 HIGH 的邊緣觸發中斷事件。INTR_A_PULSE_HIGH
:代表 A 針腳上發生脈波由 HIGH 變 LOW 的邊緣觸發中斷事件。INTR_B_PULSE_LOW
:代表 B 針腳上發生脈波由 LOW 變 HIGH 的邊緣觸發中斷事件。INTR_B_PULSE_HIGH
:代表 B 針腳上發生脈波由 HIGH 變 LOW 的邊緣觸發中斷事件。INTR_Z_PULSE_LOW
:代表 Z 針腳上發生脈波由 LOW 變 HIGH 的邊緣觸發中斷事件。INTR_Z_PULSE_HIGH
:代表 Z 針腳上發生脈波由 HIGH 變 LOW 的邊緣觸發中斷事件。
上面第 1 ~ 4 類型只會出現在 Pulse/DIR、CW/CCW、A/B Pulse 工作模式下;第 5 ~ 10 類型只會出現在 PWM 脈波捕捉模式下。
回傳
無回傳值
範例
#include <Encoder.h> volatile unsigned long num1 = 0L; volatile unsigned long num2 = 0L; void encoder_isr(int flag) { // ISR 函式 if(flag == INTR_COMPARE) num1++; // 若發生計數值符合指定值的話,變數加一 else if(flag == INTR_INDEX) num2 ++; // 若 Z 針腳由 LOW 變 HIGH,變數加一 } void setup() { Serial.begin(9600); Enc0.begin(MODE_AB_PHASE); Enc0.setIndexReset(); // 設定當 index 訊號發生時(即 Z 針腳電位由 LOW 變 HIGH),觸發中斷來呼叫 ISR 函式 Enc0.setComparator(20L); // 設定計數值達到 20 時,觸發中斷來呼叫 ISR 函式 Enc0.attachInterrupt(encoder_isr); // 掛載 ISR 函式並啟動中斷功能 } void loop() { Serial.print("Pulse number: "); Serial.print(Enc0.read()); // 讀取 pulse 數 Serial.print(" "); Serial.print("index: "); Serial.print(num1); // 印出 Z 針腳由 LOW 變 HIGH 的總次數 Serial.print(" "); Serial.print("trigger: "); // 印出計數值為 20 的總次數 Serial.println(num2); delay(100); }
See also
- detachInterrupt()
- setRange()
- setIndexReset()
- setComparator()
The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.