Add pingpong mode with speed, time, and randomness settings

- Add pingpong oscillation mode that alternates motor direction
- Settings: base speed (10-100%), time before return (0.5-10s)
- Randomness controls for both speed (0-50%) and time (0-50%)
- Web UI with sliders and start/stop buttons
- API endpoints: /pingpong/start and /pingpong/stop
- Real-time status polling shows pingpong active state
This commit is contained in:
devdesk
2026-02-05 17:06:12 +02:00
parent e2fe9aa495
commit ba27db4f55
3 changed files with 313 additions and 19 deletions

View File

@@ -21,6 +21,15 @@ public:
// Callback for stall events
void setStallCallback(void (*callback)(float current));
// Pingpong mode
void startPingpong(int speed, int timeMs, int speedRandomPercent, int timeRandomPercent);
void stopPingpong();
bool isPingpongActive();
int getPingpongSpeed();
int getPingpongTime();
int getPingpongSpeedRandom();
int getPingpongTimeRandom();
private:
int _speed = 0;
@@ -31,9 +40,22 @@ private:
unsigned long _stallStartTime = 0;
void (*_stallCallback)(float current) = nullptr;
// Pingpong state
bool _pingpongActive = false;
int _pingpongBaseSpeed = 50;
int _pingpongBaseTime = 2000;
int _pingpongSpeedRandomPercent = 0;
int _pingpongTimeRandomPercent = 0;
int _pingpongCurrentSpeed = 50;
int _pingpongCurrentTime = 2000;
unsigned long _pingpongLastSwitch = 0;
int _pingpongDirection = 1;
void applyMotorState();
float readCurrentSense(int pin);
void checkStall();
void updatePingpong();
int applyRandomness(int baseValue, int randomPercent);
};
extern MotorController motor;