ロータリーエンコーダー用のArduinoライブラリ
- 2016/10/22
- 16:11
これまで、ロータリーエンコーダーを使う際は、Timer割り込みを使ったロータリーエンコーダープログラムを使っていました。
しかし、ときどき取りこぼしなどがあり不満がありました。
気になって他のOMのブログなどを拝見すると、みなさん、rotaryエンコーダーライブラリを活用されている事が分かりました。
http://www.buxtronix.net/2011/10/rotary-encoders-done-properly.html

しばらくの間着手していませんでしたが、
思い切って試してみました、
5分もかからず、動きました。もっと早く試していればよかったです。

結果は、とりこぼしなどもなく超快適、、完璧でした!!
使ったサンプルコード Rotary_Test_20161022-002-ok
アップデート 2016年12月21日
その後、MEGAで同じプログラムを実行したところ、なぜか動きませんでした。
下記の様に変更して動作したので備忘録です。
しかし、ときどき取りこぼしなどがあり不満がありました。
気になって他のOMのブログなどを拝見すると、みなさん、rotaryエンコーダーライブラリを活用されている事が分かりました。
http://www.buxtronix.net/2011/10/rotary-encoders-done-properly.html

しばらくの間着手していませんでしたが、
思い切って試してみました、
5分もかからず、動きました。もっと早く試していればよかったです。

結果は、とりこぼしなどもなく超快適、、完璧でした!!
使ったサンプルコード Rotary_Test_20161022-002-ok
// Show result to Serial when Rotary changed //
#include <rotary.h>
int Rotary_PIN_A = 2; // D2
int Rotary_PIN_B = 3; // D2
Rotary r = Rotary(Rotary_PIN_A, Rotary_PIN_B);
void setup() {
Serial.begin(9600);
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
}
void loop() {
}
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result) {
Serial.println(result == DIR_CW ? "Right" : "Left"); // resultがDIR_CWと同じならRight、異なればLeft
// resultは実験環境ではRightが16、Leftが32
}
}
アップデート 2016年12月21日
その後、MEGAで同じプログラムを実行したところ、なぜか動きませんでした。
下記の様に変更して動作したので備忘録です。
Rotary r = Rotary(2, 3);
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), interrupt, CHANGE);
attachInterrupt(digitalPinToInterrupt(3), interrupt, CHANGE);
}
void loop() {
}
void interrupt() {
unsigned char result = r.process();
if (result == DIR_NONE) {
// do nothing
}
else if (result == DIR_CW) {
Serial.println("ClockWise");
}
else if (result == DIR_CCW) {
Serial.println("CounterClockWise");
}
}
- 関連記事
-
-
ロータリーエンコーダー用のArduinoライブラリ
-
割り込み実験
-
AE-ATMEGA328-MINIの入力電圧MAXは本当に12Vなんですか?
-
備忘録: LCD 2004 20x4 Display Shield Blue Backlight
-
RTCモジュール、PC時間を自動に時間設定
-
ATMEGA328P I/Oの電圧
-
AE-ATMEGA328-MINIが供給可能な消費電流→150mA
-
EEPROM実験
-
TMGA328Pブートローダー入り
-
LCDチカチカ TX/RX
-
Arduino続き(ロータリー、DDS、LCD) RIT機能
-
アナログピンをデジタルで使う
-
Arduino続き
-
Arduino購入
-