From f1757f30cbf4ea7a4964cc9cf30f9d3faa114444 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 28 Nov 2017 17:10:18 +0100 Subject: [PATCH] Fix Watchdog time out during long lasting DELTA moves During long lasting moves of a delta machine neither the temperatures are maintained nor buttons checked nor ... . The fix is to call 'manage_heater()' and 'idle()' every now and then in the loop where the move is segmented. The code is abot the same as in G2_G3 wher we had the same problem with too large circles lasting too long. Fixing #7510 --- Marlin/Marlin_main.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 39dc5dc44..1ad21dad4 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -12746,6 +12746,14 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { // Calculate and execute the segments for (uint16_t s = segments + 1; --s;) { + + static millis_t next_idle_ms = millis() + 200UL; + thermalManager.manage_heater(); // This returns immediately if not really needed. + if (ELAPSED(millis(), next_idle_ms)) { + next_idle_ms = millis() + 200UL; + idle(); + } + LOOP_XYZE(i) raw[i] += segment_distance[i]; #if ENABLED(DELTA) DELTA_RAW_IK(); // Delta can inline its kinematics