#ifndef MOTOR_H #define MOTOR_H #include #include "config.h" class MotorController { public: void begin(); void setSpeed(int speed); // 0-100 percentage void setDirection(int dir); // -1=reverse, 0=stop, 1=forward void stop(); void update(); // Call in loop() for stall detection int getSpeed(); int getDirection(); float getCurrentRight(); // Current in amps (forward direction) float getCurrentLeft(); // Current in amps (reverse direction) float getCurrentActive(); // Current from active direction bool isStalled(); // True if stall detected // Callback for stall events void setStallCallback(void (*callback)(float current)); private: int _speed = 0; int _direction = 0; float _currentRight = 0; float _currentLeft = 0; bool _stalled = false; unsigned long _stallStartTime = 0; void (*_stallCallback)(float current) = nullptr; void applyMotorState(); float readCurrentSense(int pin); void checkStall(); }; extern MotorController motor; #endif