#pragma once class Encoder { public: Encoder(); Encoder(unsigned char pin, unsigned char transitionsPerRotation); float GetPulsesPerSecond(); float GetRevolutionsPerSecond(); void ResetDistance(); float GetRotationDistance(); void Update(float timeStep); virtual void StartCountingRevolutions(); virtual float RestartCountingRevolutions(); protected: static void InterruptHandler(); static volatile unsigned char transitionCount; unsigned char transitionsPerRotation; float rps; float distance; // this is direction agnostic };