setIndexReset()

描述

設定要觸發 index 訊號的中斷事件(即當編碼器介面的 Z 針腳由 LOW 變為 HIGH 時,觸發中斷)。此函式只可在 Pulse/DIR、CW/CCW、A/B Pulse 工作模式下使用。

注意:呼叫此函式將同時啟動 index reset 功能,即當 index 訊號發生時(即 Z pin 變為 HIGH),硬體自動將編碼器計數值清 0。

語法


Enc0.setIndexReset()
Enc0.setIndexReset(condition)

Enc1.setIndexReset()
Enc1.setIndexReset(condition)

Enc2.setIndexReset()
Enc2.setIndexReset(condition)

Enc3.setIndexReset()
Enc3.setIndexReset(condition)

參數

Enc0、Enc1、Enc2、Enc3:分別對應 ENC0、ENC1、ENC2、ENC3 編碼器介面。

condition:true 或 false。如果要啟動 index 訊號的中斷事件,則設定 true,反之則設定 false。(預設值是 true)

回傳

無回傳值

範例

設定 ENC0 為 A/B Pulse,印出旋轉編碼器所轉的圈數以及讀到的計數器數值。(假設 A、B、Z 三條線皆有接上。)

#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

begin()
attachInterrupt()
read()
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.