Add Planner::sync_from_steppers

Use to sync the planner after an interrupted move (when not overriding
the logical position).
This commit is contained in:
Scott Lahteine 2016-09-21 17:31:32 -05:00
parent be11a8a938
commit 6b9bf8e8fe
3 changed files with 15 additions and 3 deletions

View file

@ -1996,12 +1996,12 @@ static void clean_up_after_endstop_or_probe_move() {
// Clear endstop flags // Clear endstop flags
endstops.hit_on_purpose(); endstops.hit_on_purpose();
// Tell the planner where we actually are
planner.sync_from_steppers();
// Get Z where the steppers were interrupted // Get Z where the steppers were interrupted
set_current_from_steppers_for_axis(Z_AXIS); set_current_from_steppers_for_axis(Z_AXIS);
// Tell the planner where we actually are
SYNC_PLAN_POSITION_KINEMATIC();
#if ENABLED(DEBUG_LEVELING_FEATURE) #if ENABLED(DEBUG_LEVELING_FEATURE)
if (DEBUGGING(LEVELING)) DEBUG_POS("<<< do_probe_move", current_position); if (DEBUGGING(LEVELING)) DEBUG_POS("<<< do_probe_move", current_position);
#endif #endif

View file

@ -1210,6 +1210,13 @@ void Planner::set_position_mm(ARG_X, ARG_Y, ARG_Z, const float &e) {
LOOP_XYZE(i) previous_speed[i] = 0.0; LOOP_XYZE(i) previous_speed[i] = 0.0;
} }
/**
* Sync from the stepper positions. (e.g., after an interrupted move)
*/
void Planner::sync_from_steppers() {
LOOP_XYZE(i) position[i] = stepper.position((AxisEnum)i);
}
/** /**
* Directly set the planner E position (hence the stepper E position). * Directly set the planner E position (hence the stepper E position).
*/ */

View file

@ -242,6 +242,11 @@ class Planner {
*/ */
static void set_position_mm(ARG_X, ARG_Y, ARG_Z, const float& e); static void set_position_mm(ARG_X, ARG_Y, ARG_Z, const float& e);
/**
* Sync from the stepper positions. (e.g., after an interrupted move)
*/
static void sync_from_steppers();
/** /**
* Set the E position (mm) of the planner (and the E stepper) * Set the E position (mm) of the planner (and the E stepper)
*/ */