attachInterrupt()
説明
マウンティングエンコーダのインターフェースの割り込みライブラリ。
異なる動作モードの上、割り込みライブラリが起動させる条件も違います。
- 1. Pulse/DIR、CW/CCW、A/B Pulse モード:index 信号の割り込み(setIndexReset()による設定)、比較測定器の割り込み(setComparator()による設定)。
- パルスによるLOW からHIGHに或いはHIGHからLOWにの割り込みを発生することがあります。
- SSI mode:割り込みの発生条件がありません。
語法
Enc0.attachInterrupt(isr)
Enc1.attachInterrupt(isr)
Enc2.attachInterrupt(isr)
Enc3.attachInterrupt(isr)
関数
ENC0、ENC1、ENC2、ENC3のコーディング インターフェースにマッピングします。
isr
:I割り込みライブラリ このライブラリにintという割り込み事情を受け取るパラメーターがあります。
INTR_COMPARE
:比較測定器の割り込みが発生します。INTR_INDEX
: Index信号の割り込みが発生します。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と2はPulse/DIR、CW/CCW、A/B Pulseモードに適合します。3~8は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++; //発生した計数値が指定値に一致しましたら、変数が1をたします。 else if(flag == INTR_INDEX) num2 ++; // モーターが一周を回してから、変数が1をたします。 } void setup() { Serial.begin(9600); Enc0.begin(MODE_AB_PHASE); Enc0.setIndexReset(); // 設定された信号が発生したとき(すなわちピン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
- 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.