diff --git a/src/main.cpp b/src/main.cpp index 34ac50b..0c5d274 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -77,6 +77,20 @@ void performHomingAll(); void performHoming1(); void performHoming2(); +// ─── Homing Routines ────────────────────────────────────────────── + +void runSteppersWithNotify() { + stepper1.run(); + stepper2.run(); + if (bleConnected) { + unsigned long now = millis(); + if (now - lastNotify >= NOTIFY_INTERVAL_MS) { + lastNotify = now; + sendPosition(); + } + } +} + // ─── BLE Server Callbacks ───────────────────────────────────────── class ServerCallbacks : public BLEServerCallbacks { void onConnect(BLEServer *) override { @@ -247,34 +261,31 @@ void loop() { void performHomingAll() { // 1. Move against limits (M1 CCW, M2 CCW) - stepper2.moveTo(1024); - stepper1.moveTo(2048); + stepper1.moveTo(1024); + stepper2.moveTo(2048); while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) { - stepper1.run(); - stepper2.run(); - } - stepper1.setCurrentPosition(0); - - // 2. Move to negative limits (CW) - stepper2.moveTo(-1050); - stepper1.move(-1300); // equivalent to moveTo(-1300) since pos is 0 - while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) { - stepper1.run(); - stepper2.run(); + runSteppersWithNotify(); } stepper2.setCurrentPosition(0); - // 3. Move to final home position - stepper2.moveTo(550); - stepper1.moveTo(-530); + // 2. Move to negative limits (CW) + stepper1.moveTo(-1050); + stepper2.move(-1300); while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) { - stepper1.run(); - stepper2.run(); + runSteppersWithNotify(); + } + stepper1.setCurrentPosition(0); + + // 3. Move to final home position + stepper1.moveTo(550); + stepper2.moveTo(-530); + while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) { + runSteppersWithNotify(); } // 4. Set origin relative to this final position - stepper2.setCurrentPosition(-1024); - stepper1.setCurrentPosition(0); + stepper1.setCurrentPosition(-1024); + stepper2.setCurrentPosition(0); stepper1.disableOutputs(); stepper2.disableOutputs(); @@ -282,37 +293,37 @@ void performHomingAll() { } void performHoming1() { - // M1 (Right) stalls going positive (CCW) - stepper1.move(2048); + // M1 (Left) stalls going negative (CW) + stepper1.move(-2048); while (stepper1.distanceToGo() != 0) { - stepper1.run(); + runSteppersWithNotify(); } stepper1.setCurrentPosition(0); - // Move to final home position (CW) - stepper1.moveTo(-530); + // Move to final home position (CCW) + stepper1.moveTo(550); while (stepper1.distanceToGo() != 0) { - stepper1.run(); + runSteppersWithNotify(); } - stepper1.setCurrentPosition(0); + stepper1.setCurrentPosition(-1024); stepper1.disableOutputs(); Serial.println("[S1] Homing complete."); } void performHoming2() { - // M2 (Left) stalls going negative (CW) - stepper2.move(-2048); + // M2 (Right) stalls going positive (CCW) + stepper2.move(2048); while (stepper2.distanceToGo() != 0) { - stepper2.run(); + runSteppersWithNotify(); } stepper2.setCurrentPosition(0); - // Move to final home position (CCW) - stepper2.moveTo(550); + // Move to final home position (CW) + stepper2.moveTo(-530); while (stepper2.distanceToGo() != 0) { - stepper2.run(); + runSteppersWithNotify(); } - stepper2.setCurrentPosition(-1024); + stepper2.setCurrentPosition(0); stepper2.disableOutputs(); Serial.println("[S2] Homing complete."); } diff --git a/web/js/sections/board-control.js b/web/js/sections/board-control.js index 58113aa..ce54c5a 100644 --- a/web/js/sections/board-control.js +++ b/web/js/sections/board-control.js @@ -282,11 +282,6 @@ async function executeMove(spot) { const delta1 = newSteps1 - steps1; const delta2 = newSteps2 - steps2; - steps1 = newSteps1; - steps2 = newSteps2; - saveSteps(); - updatePositionReadout(); - const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`; const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`; @@ -300,6 +295,10 @@ async function executeMove(spot) { UI.log(`BLE error: ${e.message}`, 'error'); } } else { + steps1 = newSteps1; + steps2 = newSteps2; + saveSteps(); + updatePositionReadout(); const simMsg = `[sim] ${cmd1} ${cmd2}`; console.log(simMsg); UI.log(simMsg, 'info'); @@ -359,11 +358,6 @@ export default { isHomed = true; localStorage.setItem('wiji_homed', 'true'); updateHomingUI(); - - steps1 = IK.ARM.HOME_STEPS.m1; - steps2 = IK.ARM.HOME_STEPS.m2; - saveSteps(); - updatePositionReadout(); UI.log('Homing all motors...', 'info'); if (BLE.isConnected()) { @@ -373,6 +367,10 @@ export default { UI.log(e.message, 'error'); } } else { + steps1 = IK.ARM.HOME_STEPS.m1; + steps2 = IK.ARM.HOME_STEPS.m2; + saveSteps(); + updatePositionReadout(); UI.log('[sim] HOMEALL', 'info'); } }); diff --git a/web/js/sections/input-text.js b/web/js/sections/input-text.js index 5fb8c42..f2ba0eb 100644 --- a/web/js/sections/input-text.js +++ b/web/js/sections/input-text.js @@ -280,11 +280,6 @@ async function executeMove(spot) { const delta1 = newSteps1 - steps1; const delta2 = newSteps2 - steps2; - steps1 = newSteps1; - steps2 = newSteps2; - saveSteps(); - updatePosMarker(); - const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`; const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`; @@ -299,6 +294,10 @@ async function executeMove(spot) { return false; } } else { + steps1 = newSteps1; + steps2 = newSteps2; + saveSteps(); + updatePosMarker(); console.log(`[sim] ${cmd1} ${cmd2}`); } return true; @@ -404,11 +403,6 @@ export default { isHomed = true; localStorage.setItem('wiji_homed', 'true'); updateHomingUI(); - - steps1 = IK.ARM.HOME_STEPS.m1; - steps2 = IK.ARM.HOME_STEPS.m2; - saveSteps(); - updatePosMarker(); UI.log('Homing all motors...', 'info'); if (BLE.isConnected()) { @@ -418,6 +412,10 @@ export default { UI.log(e.message, 'error'); } } else { + steps1 = IK.ARM.HOME_STEPS.m1; + steps2 = IK.ARM.HOME_STEPS.m2; + saveSteps(); + updatePosMarker(); UI.log('[sim] HOMEALL', 'info'); } }); diff --git a/web/js/sections/sequence-editor.js b/web/js/sections/sequence-editor.js index 4ae6aa7..2bb8f46 100644 --- a/web/js/sections/sequence-editor.js +++ b/web/js/sections/sequence-editor.js @@ -690,11 +690,6 @@ export default { isHomed = true; localStorage.setItem('wiji_homed', 'true'); updateHomingUI(); - - steps1 = IK.ARM.HOME_STEPS.m1; - steps2 = IK.ARM.HOME_STEPS.m2; - saveSteps(); - updatePositionReadout(); UI.log('Homing all motors...', 'info'); if (BLE.isConnected()) { @@ -704,6 +699,10 @@ export default { UI.log(e.message, 'error'); } } else { + steps1 = IK.ARM.HOME_STEPS.m1; + steps2 = IK.ARM.HOME_STEPS.m2; + saveSteps(); + updatePositionReadout(); UI.log('[sim] HOMEALL', 'info'); } }); diff --git a/web/js/sequence-runner.js b/web/js/sequence-runner.js index 303b12d..903cf09 100644 --- a/web/js/sequence-runner.js +++ b/web/js/sequence-runner.js @@ -69,13 +69,6 @@ export default { const delta1 = newSteps1 - steps1; const delta2 = newSteps2 - steps2; - steps1 = newSteps1; - steps2 = newSteps2; - - if (onStepComplete) { - onStepComplete(steps1, steps2); - } - const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`; const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`; @@ -91,6 +84,12 @@ export default { return false; } } else { + steps1 = newSteps1; + steps2 = newSteps2; + + if (onStepComplete) { + onStepComplete(steps1, steps2); + } console.log(`[sim] ${cmd1} ${cmd2}`); }