From 117fc872a77ccce5bd7f389359ddfa60d70f7638 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 10 Dec 2017 21:29:10 -0600 Subject: [PATCH] Update current position in M852 --- Marlin/src/gcode/calibrate/M852.cpp | 47 ++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/Marlin/src/gcode/calibrate/M852.cpp b/Marlin/src/gcode/calibrate/M852.cpp index 66d950a2b6..97af08a009 100644 --- a/Marlin/src/gcode/calibrate/M852.cpp +++ b/Marlin/src/gcode/calibrate/M852.cpp @@ -36,37 +36,47 @@ * K[yz_factor] - New YZ skew factor */ void GcodeSuite::M852() { - const bool ijk = parser.seen('I') || parser.seen('S') - #if ENABLED(SKEW_CORRECTION_FOR_Z) - || parser.seen('J') || parser.seen('K') - #endif - ; - bool badval = false; + uint8_t ijk = 0, badval = 0, setval = 0; if (parser.seen('I') || parser.seen('S')) { + ++ijk; const float value = parser.value_linear_units(); - if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) - planner.xy_skew_factor = value; + if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) { + if (planner.xy_skew_factor != value) { + planner.xy_skew_factor = value; + ++setval; + } + } else - badval = true; + ++badval; } #if ENABLED(SKEW_CORRECTION_FOR_Z) if (parser.seen('J')) { + ++ijk; const float value = parser.value_linear_units(); - if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) - planner.xz_skew_factor = value; + if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) { + if (planner.xz_skew_factor != value) { + planner.xz_skew_factor = value; + ++setval; + } + } else - badval = true; + ++badval; } if (parser.seen('K')) { + ++ijk; const float value = parser.value_linear_units(); - if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) - planner.yz_skew_factor = value; + if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) { + if (planner.yz_skew_factor != value) { + planner.yz_skew_factor = value; + ++setval; + } + } else - badval = true; + ++badval; } #endif @@ -74,6 +84,13 @@ void GcodeSuite::M852() { if (badval) SERIAL_ECHOLNPGM(MSG_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " MSG_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX)); + // When skew is changed the current position changes + if (setval) { + set_current_from_steppers_for_axis(ALL_AXES); + SYNC_PLAN_POSITION_KINEMATIC(); + report_current_position(); + } + if (!ijk) { SERIAL_ECHO_START(); SERIAL_ECHOPAIR(MSG_SKEW_FACTOR " XY: ", planner.xy_skew_factor);