Using a rotary encoder with Arduino

A rotary or “shaft” encoder is an angular measuring device. It is used to precisely measure rotation of motors or to create wheel controllers (knobs) that can turn infinitely (with no end stop like a potentiometer has). Some of them are also equipped with a pushbutton when you press on the axis (like the ones used for navigation on many music controllers). They come in all kinds of resolutions, from maybe 16 to at least 1024 steps per revolution, and cost from 2 to maybe 200 EUR. (From playground.arduino.cc/Main/RotaryEncoders).

This example is a low cost board from Keyes, I tried the example code from their website, but it needed some correction and even after that I was not happy with the result. I found this code on the Internet but cannot remember where. Full credit to the original writer of this sketch.

/* interrupt routine for Rotary Encoders

The average rotary encoder has three pins, seen from front: A C B
Clockwise rotation A(on)->B(on)->A(off)->B(off)
CounterCW rotation B(on)->A(on)->B(off)->A(off)

and may be a push switch with another two pins, pulled low at pin 8 in this case

Clockwise rotation gives an increasing value, anticlockwise rotation gives a decreasing value, from 0 the value becomes 65535 and the continues to decrease. Pressing the shaft in resets the value to 0.