setComparator()

説明

コンパレータの中断カウンター値を設定します。カウンター値が設定された数値に至りますと、中断機能が一回発生します。Pulse/DIR、CW/CCW、A/B Pulseモードにしか使えないです

語法


Enc0.setComparator(val)
Enc0.setComparator(val, condition)

Enc1.setComparator(val)
Enc1.setComparator(val, condition)

Enc2.setComparator(val)
Enc2.setComparator(val, condition)

Enc3.setComparator(val)
Enc3.setComparator(val, condition)

変数

ENC0、ENC1、ENC2、ENC3のコーディング インターフェースにマッピングします。

val:ノイズの最大信号を除去するべきことです。(unsigned long 類,単位:10 ns)

condition:true 或いはfalse。Index信号の中断機能を起動させたいなら、trueを設定しておくべき、逆にfalseを設定します。(初期値はtrueです)

フィードバック

なし

ENC0 をA/B Pulseに設定します。ロータリエンコーダの回転数と読み取れたカウンター数値をプリントアウトします。(A、B、Cオンラインの場合)

#include <Encoder.h>

volatile unsigned long num1 = 0L;
volatile unsigned long num2 = 0L;
void encoder_isr(int flag) { //  ISR関数
    if(flag == INTR_COMPARE)
      num1++; // カウンターが指定された数値に一致にすると、変数+1
    else if(flag == INTR_INDEX)
      num2 ++; // モーターが一周を回すと、変数+1
}

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

attachInterrupt()
read()
setIndexReset()


Libraries Reference Home

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.