秋月でだいぶ前に買ったロータリー・エンコーダを使ってみる。
ALPSのEC12E2420801というものだ。
まずは配線方法を見る。
ALPSのサイトにある上の図から、真ん中をGNDへ、左右がAとBでプルアップが必要なことがわかる。
回転させると下の図のようにHighとLowが交互に出て、しかもAとBでずれるようになっている。
これを0と1に直すと下のような表になる。
右回転なのか左回転なのかを読み取るために、ひとつ前の状態とセットで回転をチェックする必要がある。
これを表の上下の矢印で示してある。
表の上の矢印は右回転、表の下の矢印は左回転を意味している。
例えば現在(A,B)=(1,1)だったとしても、さっきまで(1,0)だったなら左回転だし、さっきまで(0,1)だったなら右回転だ。
そこで、下の図のように4つの値を横に並べて数値にして扱うことにする。
この例では、現在(0,1)でさっきまで(0,0)だったのを0001として2進法で1とする。
下の図の場合が右回転なら 1000 = 8 となり、左回転なら0010 = 4 とする。
この要領ですべてのパターンを調べると、右回りをあらわすのは、8, 1, 7, 14 で、左回りは、2, 11, 13 ,4 となる。
これをそのまま配列の番地とし、右回りなら1、左回りなら-1、それ以外のあいている配列の要素には0を入れて、
1 |
static const int RotPatn[] = {0, 1, -1, 0, -1, 0, 0, 1, 1, 0, 0, -1, 0,-1, 1, 0, 0}; |
というような感じのテーブルを用意しておくことにする。
というような方法が巷で良く行われている方法のようだ。
Tweet