After the last design (or a Stop), the player sends $SLP (GRBL and FluidNC
sleep), so the motors stop holding and the table is quiet. The page shows
"Motors off"; the next design wakes the controller (reset + unlock) and homes
first, since the arm can be moved by hand while the motors are off. The jog
panel wakes it too. Setting: motion.motors_off_when_done (default true).
Checked on the real Uno: Idle -> $SLP -> Sleep -> reset -> Alarm -> $X -> Idle.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- python3 -m sandtable web: local web page to play designs from a library of
27 built-in patterns, upload .thr or .svg, pause/skip/stop, jog and calibrate.
Reconnects by itself when the USB cable comes back.
- Plays .thr files and built-in generators with an erase spiral between them,
constant ball speed, host-side homing on stock GRBL 1.1 (Uno + CNC shield),
FluidNC for the ESP32 board.
- Home switch guard: patterns never press the switch, so a press means lost
steps and stops the machine at once with an alert.
- lineart.py turns SVG line drawings into one continuous path.
- Tests against a GRBL simulator.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>