setIndexReset()

描述

设定要触发 index 讯号的中断事件(即当编码器介面的 Z pin 变为 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 ++; // 若马达转一圈,变数加一
}

void setup() {
  Serial.begin(9600);
  Enc0.begin(MODE_AB_PHASE);
  Enc0.setIndexReset(); // 设定当 index 讯号发生时(即 Z 针脚电位变为 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); // 印出旋转编码器所转的总圈数
  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.