Incremental Encoder Decode Trick
This is a simple trick to detrmine the direction of rotation of a 2bit incremental encoder. This avoids the traditional tree of if-then statements that looks at both bits on each transition. An XOR statment is used on the lower bit of the new sample and the upper bit of last sample.
// Incremental encoder decoding.
uint new;
uint old;
bool direction;
int count=0;
/* Get the latest 2bit sample. */
new = get_new_bits(); // Your function to get new samples.
/* XOR the lower bit from the new sample with the upper bit from the old.*/
direction = (new&1) ^ (old>>1)
/* The "direction" var holds the direction of rotation. */
/* Transfer the new sample to the old sample. */
old = new;
/* We can use this to inc or dec a counter to maintain position of rotation. */
if(direction) counter--; else counter++;