この間秋月で買ってきたLED内蔵のロータリーエンコーダ、
直接LEDを繋いで光らせてみただけだったので、ようやく
カリカリ回してカウントが出来るArduinoのスケッチ
を書いて遊んでみた。
ChaNさんのこのページに解りやすい解説があるので、
コーディング例(2)を元に作ったスケッチがこれ。
int a_sig = 7; // a signal on d7
int b_sig = 8; // b signal on d8
volatile int rot = 0; // rotation value (initial = 0)
volatile int diff = 0; // difference value (initial =0)
#include <MsTimer2.h>
void interrupt0(){
int a_in;
int b_in;
int new_val; // now value
static int old_val = 0; // old value (initial=0)
if (digitalRead(a_sig)==HIGH){
a_in = 1;
}else{
a_in = 0;
}
if (digitalRead(b_sig)==HIGH){
b_in = 1;
}else{
b_in = 0;
}
new_val = a_in * 2 + b_in;
if (( (new_val<if (( (new_val<int rotary_value(){
noInterrupts();
rot += diff;
diff = 0;
interrupts();
return rot;
}
void setup() {
Serial.begin(9600);
pinMode(a_sig, INPUT); // a signal as input
pinMode(b_sig, INPUT); // b signal as input
MsTimer2::set(1, interrupt0); // 1ms period
MsTimer2::start();
}
void loop() {
int input_val;
input_val = rotary_value();
delay(100);
Serial.println(input_val);
}
(後日訂正:変数rotとdiffの宣言を「static」じゃなく
「volatile」に訂正)
ツマミをくるくる回すと、シリアルモニタに表示される
数値が思ったとおりに動いてくれる。
それにしても、ChaNさんの「コーディング例(2)」に
出てくる0x7とか0xdとかって、なんじゃ?と思った
んだけど、よくよく考えてみて解った。スバラシイ。
一定間隔(とりあえずオイラのスケッチでは1ミリ秒毎)
にデータを取り込むと考えて、前回取り込んだデータと
今回取り込んだデータを2つ繋ぎ合わせたビットパターン
なんだなと解った。
A相B相がそれぞれ、前回01→今回11のときは0b0111なので
0x7になり、前回11→今回01のときは0b1101なので0xdと
なると…。なるほど。
この間秋月で買ってきたロータリーエンコーダも、
以前買ったまま放置してあったやつも、1ノッチ(1クリック)
の間に4パターン(00→01→11→10→00に戻る)という
信号パターンになってた。
で、ビットパターンが変化するバリエーションのうち、
00が絡まないパターンから右回転か左回転かを抽出
できれば1ノッチ分の回転を抽出できるわけなので、
これらのうち「11」と「01」に絡むパターンだけ
取り出してみれば判断できる…と。ロータリーエンコーダ
の1ノッチ分って、大抵4パターン分で1ノッチになってる
と考えて良さそうなので、このように4パターンで1クリック
と考えたロジックが使いやすいんだろうな。とてもしっくり
キタ。
ちなみに、ゆっくり回しても、速く回しても、変な値を
示すことは無く、うまい具合に動作してくれた。内部は
もうちょっと弄りなおして、汎用的に使える部品に
出来ると良いんだけどな。
それにしてもロータリーエンコーダ。オイラ謹製の
Arduino赤道儀基板のUIでで使いたかったんだけど、
あともう1個くらいI/O端子が余ってればこいつを
使ったのになぁ… MEGA328でもちょっとI/Oピンが
足りなかったんだよな。I2C接続のキャラクターLCD
があれば足りたのかも知れないなぁ…
http://zasshi.news.yahoo.co.jp/article?a=20121109-00000000-techon-sci&pos=1
1枚で15TBの光ディスクって、何気にすごいな!
でも、光ディスクの将来性って…どうなの?
http://zasshi.news.yahoo.co.jp/article?a=20121022-00000303-bjournal-bus_all
日本から韓国企業に引き抜かれた技術者…。
まぁ、なんとなく想像できたよね。
ちなみに、きっと旬は原発技術者。あと数年したら
同じような記事が原発関連で取り上げられるんじゃ
ないかな。