ロータリーエンコーダーの使い方を簡単に紹介。

2つの信号を用いて回転の向きなどを調べます。

信号の立ち上がりと立下がりをチェックすることで調べることができます。

 

例えば

信号Aがローかハイになったときで信号Bがロー

のときは左回り

とか・・・

これをプログラムにします!

インターネットに公開されてるプログラムを使用しました。

信号の値を入れる変数として直前の状態と現在の状態を作っておくことがポイントです。

int val;
int encoder0PinA = 3;
int encoder0PinB = 4;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
int outPin13 = 13;
int outPin12 = 12;

void setup() {
  pinMode (encoder0PinA, INPUT);
  pinMode (encoder0PinB, INPUT);
  Serial.begin (9600);
  pinMode(outPin13, OUTPUT);
  pinMode(outPin12, OUTPUT);
}

void loop() {
  n = digitalRead(encoder0PinA);
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      encoder0Pos--;
      digitalWrite(outPin13, LOW);
      digitalWrite(outPin12, HIGH);
      delay(abs(encoder0Pos));
    } else {
      encoder0Pos++;
      digitalWrite(outPin12, LOW);
      digitalWrite(outPin13, HIGH);
      delay(abs(encoder0Pos));
    }
    Serial.print (encoder0Pos);
    Serial.print ("/");
  }
  encoder0PinALast = n;
}