Download this file
#include "RotaryEncoder.h"
#define ENC_PORT PINB
RotaryEncoder::RotaryEncoder(uint8_t a, uint8_t b) {
pina = a;
pinb = b;
old_pins = 0;
old_dir = dir = 0;
pinMode(pina, INPUT);
pinMode(pinb, INPUT);
digitalWrite(pina, HIGH);
digitalWrite(pinb, HIGH);
}
int8_t RotaryEncoder::enc_states[] = {0,1,-1,0,-1,0,0,1,1,0,0,-1,0,-1,1,0};
uint8_t RotaryEncoder::read() {
old_pins <<= 2;
old_pins |= (( ENC_PORT & 0x30 ) >> 4);
dir += RotaryEncoder::enc_states[( old_pins & 0x0f )];
if (dir/2 > old_dir/2) {
dir = old_dir = 0;
return 1;
}
else if (dir/2 < old_dir/2) {
dir = old_dir = 0;
return -1;
}
return 0;
}
// vim:ft=arduino