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