#ifndef __C_ROTARY_ENCODER_H__ #define __C_ROTARY_ENCODER_H__ #include class RotaryEncoder { /* wraps encoder setup and update functions in a class !!! NOTE : user must call the encoders update method from an interrupt function himself! i.e. user must attach an interrupt to the encoder pin A and call the encoder update method from within the interrupt uses Arduino pull-ups on A & B channel outputs turning on the pull-ups saves having to hook up resistors to the A & B channel outputs // ------------------------------------------------------------------------------------------------ // Example usage : // ------------------------------------------------------------------------------------------------ #include "Encoder.h" Encoder encoder(2, 4); void setup() { attachInterrupt(0, doEncoder, CHANGE); Serial.begin (115200); Serial.println("start"); } void loop(){ // do some stuff here - the joy of interrupts is that they take care of themselves } void doEncoder(){ encoder.update(); Serial.println( encoder.getPosition() ); } // ------------------------------------------------------------------------------------------------ // Example usage end // ------------------------------------------------------------------------------------------------ */ public: // constructor : sets pins as inputs and turns on pullup resistors RotaryEncoder( const String& argName, int argClkPin, int argDtPin, int argPinMode = INPUT_PULLUP); ~RotaryEncoder() {}; // call this from your interrupt function void update(); int getPosition(); void clearPosition(); private: String name; volatile int position; int clkPin; // clock pin int dtPin; // direction pin }; #endif // __C_ROTARY_ENCODER_H__