diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 220955c81..c4b6756d0 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -2818,7 +2818,10 @@ void kill_screen(const char* lcd_msg) { manual_move_offset = 0.0; manual_move_axis = (int8_t)NO_AXIS; - // Set a blocking flag so no new moves can be added until all segments are done + // DELTA and SCARA machines use segmented moves, which could fill the planner during the call to + // move_to_destination. This will cause idle() to be called, which can then call this function while the + // previous invocation is being blocked. Modifications to manual_move_offset shouldn't be made while + // processing_manual_move is true or the planner will get out of sync. processing_manual_move = true; prepare_move_to_destination(); // will call set_current_from_destination() processing_manual_move = false; @@ -2930,11 +2933,11 @@ void kill_screen(const char* lcd_msg) { } encoderPosition = 0; if (lcdDrawUpdate) { - const float pos = current_position[axis] + const float pos = (processing_manual_move ? destination[axis] : current_position[axis] #if IS_KINEMATIC + manual_move_offset #endif - ; + ); lcd_implementation_drawedit(name, move_menu_scale >= 0.1 ? ftostr41sign(pos) : ftostr43sign(pos)); } }