#pragma once #include #include #include #include class InputController { public: InputController(uint8_t buttonPin, uint8_t encoderPinA, uint8_t encoderPinB); void begin(); void update(); void onPressHandler(std::function handler); void onDoublePressHandler(std::function handler); void onLongPressHandler(std::function handler); void onEncoderRotateHandler(std::function handler); void releaseHandlers(); private: OneButton button; RotaryEncoder encoder; uint8_t buttonPin; uint8_t encoderPinA; uint8_t encoderPinB; std::function pressHandler = nullptr; std::function doublePressHandler = nullptr; std::function longPressHandler = nullptr; std::function encoderRotateHandler = nullptr; int lastPosition; void onButtonClick(); void onButtonDoubleClick(); void onButtonLongPress(); void onEncoderRotate(int delta); static void handleEncoderInterrupt(); static void handleButtonInterrupt(); }; extern InputController inputController;