Archived source flow
Technical notes
Speed input
Each encoder delta changes one maximum-speed setting by twice the delta. The settings are constrained to 0–500 before being passed to AccelStepper; encoder readings are then retained for the next loop.
Independent movement phases
Each axis has its own completion timer and direction phase. After a target is reached and the timer condition passes, generateSteps() selects a random(100, 5000) relative length and the direction phase alternates. Both run() calls are serviced on each loop.
Source limits
Serial is initialized but no UART command parser is present. The encoders adjust speed settings, not a measured motor-position feedback loop. Timer rollover handling, compilation and mechanical behaviour have not been verified.