From 29ad078fda7042a54710c7523a8255df49f291be Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 2 Nov 2025 21:48:24 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=F0=9F=8C=A1=EF=B8=8F=20Refactor=20?= =?UTF-8?q?AUTOTEMP,=20apply=20to=20LCD=20temp=20change=20(#28155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #28154 --- Marlin/src/core/language.h | 1 + Marlin/src/gcode/gcode.h | 3 ++ Marlin/src/gcode/temp/M104_M109.cpp | 20 +++++++- Marlin/src/lcd/menu/menu_advanced.cpp | 6 +-- Marlin/src/lcd/menu/menu_temperature.cpp | 2 +- Marlin/src/lcd/menu/menu_tune.cpp | 9 ++-- Marlin/src/lcd/tft/touch.cpp | 5 +- Marlin/src/module/planner.cpp | 60 ++--------------------- Marlin/src/module/planner.h | 29 +++-------- Marlin/src/module/settings.cpp | 25 +++++----- Marlin/src/module/temperature.cpp | 62 ++++++++++++++++++++++-- Marlin/src/module/temperature.h | 53 +++++++++++++++++++- Marlin/src/module/tool_change.cpp | 2 +- buildroot/tests/mega2560 | 2 +- 14 files changed, 170 insertions(+), 109 deletions(-) diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index f2860ae7d4..e0a31db9ab 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -296,6 +296,7 @@ #define STR_TOOL_CHANGING "Tool-changing" #define STR_HOTEND_OFFSETS "Hotend offsets" #define STR_SERVO_ANGLES "Servo Angles" +#define STR_AUTOTEMP "Auto Temp Control" #define STR_HOTEND_PID "Hotend PID" #define STR_BED_PID "Bed PID" #define STR_CHAMBER_PID "Chamber PID" diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index effbd85449..a08ae769fe 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -766,6 +766,9 @@ private: static void M104_M109(const bool isM109); FORCE_INLINE static void M104() { M104_M109(false); } FORCE_INLINE static void M109() { M104_M109(true); } + #if ENABLED(AUTOTEMP) + static void M104_report(const bool forReplay=true); + #endif #endif static void M105(); diff --git a/Marlin/src/gcode/temp/M104_M109.cpp b/Marlin/src/gcode/temp/M104_M109.cpp index 4df86edc55..fa6cc948c0 100644 --- a/Marlin/src/gcode/temp/M104_M109.cpp +++ b/Marlin/src/gcode/temp/M104_M109.cpp @@ -70,6 +70,9 @@ * (used by printingIsActive, etc.) and turning off heaters will stop the timer. */ void GcodeSuite::M104_M109(const bool isM109) { + #if ENABLED(AUTOTEMP) + if (!isM109 && !parser.seen_any()) return M104_report(); + #endif if (DEBUGGING(DRYRUN)) return; @@ -125,10 +128,25 @@ void GcodeSuite::M104_M109(const bool isM109) { thermalManager.set_heating_message(target_extruder, !isM109 && got_temp); } - TERN_(AUTOTEMP, planner.autotemp_M104_M109()); + TERN_(AUTOTEMP, thermalManager.autotemp_M104_M109()); if (isM109 && got_temp) (void)thermalManager.wait_for_hotend(target_extruder, no_wait_for_cooling); } +#if ENABLED(AUTOTEMP) + // + // Report AUTOTEMP settings saved to EEPROM + // + void GcodeSuite::M104_report(const bool forReplay/*=true*/) { + TERN_(MARLIN_SMALL_BUILD, return); + report_heading_etc(forReplay, F(STR_AUTOTEMP)); + SERIAL_ECHOLNPGM(" M104" + " S", thermalManager.autotemp.cfg.min, + " B", thermalManager.autotemp.cfg.max, + " F", thermalManager.autotemp.cfg.factor + ); + } +#endif + #endif // HAS_HOTEND diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index fbd07cc549..07516205ff 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -325,9 +325,9 @@ void menu_backlash(); // Autotemp, Min, Max, Fact // #if ALL(AUTOTEMP, HAS_TEMP_HOTEND) - EDIT_ITEM(int3, MSG_MIN, &planner.autotemp.min, 0, thermalManager.hotend_max_target(0)); - EDIT_ITEM(int3, MSG_MAX, &planner.autotemp.max, 0, thermalManager.hotend_max_target(0)); - EDIT_ITEM(float42_52, MSG_FACTOR, &planner.autotemp.factor, 0, 10); + EDIT_ITEM(int3, MSG_MIN, &thermalManager.autotemp.cfg.min, 0, thermalManager.hotend_max_target(0)); + EDIT_ITEM(int3, MSG_MAX, &thermalManager.autotemp.cfg.max, 0, thermalManager.hotend_max_target(0)); + EDIT_ITEM(float42_52, MSG_FACTOR, &thermalManager.autotemp.cfg.factor, 0, 10); #endif // diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 14824ca6b4..14845f5253 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -154,7 +154,7 @@ void menu_temperature() { EDIT_ITEM_FAST(int3, MSG_NOZZLE, &editable.celsius, 0, thermalManager.hotend_max_target(0), []{ thermalManager.setTargetHotend(editable.celsius, 0); }); #elif HAS_MULTI_HOTEND HOTEND_LOOP() { - editable.celsius = thermalManager.temp_hotend[e].target; + editable.celsius = thermalManager.degTargetHotend(e); EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &editable.celsius, 0, thermalManager.hotend_max_target(e), []{ thermalManager.setTargetHotend(editable.celsius, MenuItemBase::itemIndex); }); } #endif diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp index 18d52bb640..8b34b01612 100644 --- a/Marlin/src/lcd/menu/menu_tune.cpp +++ b/Marlin/src/lcd/menu/menu_tune.cpp @@ -125,10 +125,13 @@ void menu_tune() { // Nozzle [1-4]: // #if HOTENDS == 1 - EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, thermalManager.hotend_max_target(0), []{ thermalManager.start_watching_hotend(0); }); + editable.celsius = thermalManager.degTargetHotend(0); + EDIT_ITEM_FAST(int3, MSG_NOZZLE, &editable.celsius, 0, thermalManager.hotend_max_target(0), []{ thermalManager.setTargetHotend(editable.celsius, 0); }); #elif HAS_MULTI_HOTEND - HOTEND_LOOP() - EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &thermalManager.temp_hotend[e].target, 0, thermalManager.hotend_max_target(e), []{ thermalManager.start_watching_hotend(MenuItemBase::itemIndex); }); + HOTEND_LOOP() { + editable.celsius = thermalManager.degTargetHotend(e); + EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &editable.celsius, 0, thermalManager.hotend_max_target(e), []{ thermalManager.setTargetHotend(editable.celsius, MenuItemBase::itemIndex); }); + } #endif #if ENABLED(SINGLENOZZLE_STANDBY_TEMP) diff --git a/Marlin/src/lcd/tft/touch.cpp b/Marlin/src/lcd/tft/touch.cpp index eb62caa273..cefd7cb779 100644 --- a/Marlin/src/lcd/tft/touch.cpp +++ b/Marlin/src/lcd/tft/touch.cpp @@ -236,9 +236,10 @@ void Touch::touch(touch_control_t * const control) { #if HAS_HOTEND #define HOTEND_HEATER(N) TERN0(HAS_MULTI_HOTEND, N) TERN_(HAS_MULTI_HOTEND, MenuItemBase::itemIndex = heater); + editable.celsius = thermalManager.degTargetHotend(HOTEND_HEATER(heater)); MenuItem_int3::action(GET_TEXT_F(TERN(HAS_MULTI_HOTEND, MSG_NOZZLE_N, MSG_NOZZLE)), - &thermalManager.temp_hotend[HOTEND_HEATER(heater)].target, 0, thermalManager.hotend_max_target(HOTEND_HEATER(heater)), - []{ thermalManager.start_watching_hotend(HOTEND_HEATER(MenuItemBase::itemIndex)); } + &editable.celsius, 0, thermalManager.hotend_max_target(HOTEND_HEATER(heater)), + []{ thermalManager.setTargetHotend(editable.celsius, HOTEND_HEATER(MenuItemBase::itemIndex)); } ); #endif break; diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index b4c53fab6b..6534425262 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -211,10 +211,6 @@ uint32_t Planner::max_acceleration_steps_per_s2[DISTINCT_AXES]; // (steps/s^2) D skew_factor_t Planner::skew_factor; // Initialized by settings.load #endif -#if ENABLED(AUTOTEMP) - autotemp_t Planner::autotemp = { AUTOTEMP_MIN, AUTOTEMP_MAX, AUTOTEMP_FACTOR, false }; -#endif - // private: xyze_long_t Planner::position{0}; @@ -1339,7 +1335,8 @@ void Planner::check_axes_activity() { // TERN_(HAS_TAIL_FAN_SPEED, if (fans_need_update) sync_fan_speeds(tail_fan_speed)); - TERN_(AUTOTEMP, autotemp_task()); + // Update hotend temperature based on extruder speed + TERN_(AUTOTEMP, thermalManager.autotemp_task()); #if ENABLED(BARICUDA) TERN_(HAS_HEATER_1, hal.set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); @@ -1349,51 +1346,7 @@ void Planner::check_axes_activity() { #if ENABLED(AUTOTEMP) - #if ENABLED(AUTOTEMP_PROPORTIONAL) - void Planner::_autotemp_update_from_hotend() { - const celsius_t target = thermalManager.degTargetHotend(active_extruder); - autotemp.min = target + AUTOTEMP_MIN_P; - autotemp.max = target + AUTOTEMP_MAX_P; - } - #endif - - /** - * Called after changing tools to: - * - Reset or re-apply the default proportional autotemp factor. - * - Enable autotemp if the factor is non-zero. - */ - void Planner::autotemp_update() { - _autotemp_update_from_hotend(); - autotemp.factor = TERN0(AUTOTEMP_PROPORTIONAL, AUTOTEMP_FACTOR_P); - autotemp.enabled = autotemp.factor != 0; - } - - /** - * Called by the M104/M109 commands after setting Hotend Temperature - */ - void Planner::autotemp_M104_M109() { - _autotemp_update_from_hotend(); - - if (parser.seenval('S')) autotemp.min = parser.value_celsius(); - if (parser.seenval('B')) autotemp.max = parser.value_celsius(); - - // When AUTOTEMP_PROPORTIONAL is enabled, F0 disables autotemp. - // Normally, leaving off F also disables autotemp. - autotemp.factor = parser.seen('F') ? parser.value_float() : TERN0(AUTOTEMP_PROPORTIONAL, AUTOTEMP_FACTOR_P); - autotemp.enabled = autotemp.factor != 0; - } - - /** - * Called every so often to adjust the hotend target temperature - * based on the extrusion speed, which is calculated from the blocks - * currently in the planner. - */ - void Planner::autotemp_task() { - static float oldt = 0.0f; - - if (!autotemp.enabled) return; - if (thermalManager.degTargetHotend(active_extruder) < autotemp.min - 2) return; // Below the min? - + float Planner::get_high_e_speed() { float high = 0.0f; for (uint8_t b = block_buffer_tail; b != block_buffer_head; b = next_block_index(b)) { const block_t * const block = &block_buffer[b]; @@ -1402,12 +1355,7 @@ void Planner::check_axes_activity() { NOLESS(high, se); } } - - float t = autotemp.min + high * autotemp.factor; - LIMIT(t, autotemp.min, autotemp.max); - if (t < oldt) t = t * (1.0f - (AUTOTEMP_OLDWEIGHT)) + oldt * (AUTOTEMP_OLDWEIGHT); - oldt = t; - thermalManager.setTargetHotend(t, active_extruder); + return high; } #endif // AUTOTEMP diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index c001dadd66..14c83b0559 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -32,6 +32,8 @@ #include "../MarlinCore.h" +#include "temperature.h" + #if ENABLED(JD_HANDLE_SMALL_SEGMENTS) // Enable this option for perfect accuracy but maximum // computation. Should be fine on ARM processors. @@ -165,14 +167,6 @@ typedef struct { } block_flags_t; -#if ENABLED(AUTOTEMP) - typedef struct { - celsius_t min, max; - float factor; - bool enabled; - } autotemp_t; -#endif - #if ENABLED(LASER_FEATURE) typedef struct { @@ -679,6 +673,10 @@ class Planner { // Manage fans, paste pressure, etc. static void check_axes_activity(); + #if ENABLED(AUTOTEMP) + static float get_high_e_speed(); + #endif + // Apply fan speeds #if HAS_FAN static void sync_fan_speeds(uint8_t (&fan_speed)[FAN_COUNT]); @@ -1104,13 +1102,6 @@ class Planner { static void clear_block_buffer_runtime(); #endif - #if ENABLED(AUTOTEMP) - static autotemp_t autotemp; - static void autotemp_update(); - static void autotemp_M104_M109(); - static void autotemp_task(); - #endif - #if HAS_LINEAR_E_JERK FORCE_INLINE static void recalculate_max_e_jerk() { const float prop = junction_deviation_mm * SQRT(0.5) / (1.0f - SQRT(0.5)); @@ -1121,14 +1112,6 @@ class Planner { private: - #if ENABLED(AUTOTEMP) - #if ENABLED(AUTOTEMP_PROPORTIONAL) - static void _autotemp_update_from_hotend(); - #else - static void _autotemp_update_from_hotend() {} - #endif - #endif - /** * Get the index of the next / previous block in the ring buffer */ diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 3414d322da..523a3767df 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -271,8 +271,7 @@ typedef struct SettingsDataStruct { // AUTOTEMP // #if ENABLED(AUTOTEMP) - celsius_t planner_autotemp_max, planner_autotemp_min; - float planner_autotemp_factor; + autotemp_cfg_t planner_autotemp_cfg; // M104 S B F #endif // @@ -1012,10 +1011,8 @@ void MarlinSettings::postprocess() { // AUTOTEMP // #if ENABLED(AUTOTEMP) - _FIELD_TEST(planner_autotemp_max); - EEPROM_WRITE(planner.autotemp.max); - EEPROM_WRITE(planner.autotemp.min); - EEPROM_WRITE(planner.autotemp.factor); + _FIELD_TEST(planner_autotemp_cfg); + EEPROM_WRITE(thermalManager.autotemp.cfg); #endif // @@ -2066,9 +2063,8 @@ void MarlinSettings::postprocess() { // AUTOTEMP // #if ENABLED(AUTOTEMP) - EEPROM_READ(planner.autotemp.max); - EEPROM_READ(planner.autotemp.min); - EEPROM_READ(planner.autotemp.factor); + _FIELD_TEST(planner_autotemp_cfg); + EEPROM_READ(thermalManager.autotemp.cfg); #endif // @@ -3450,11 +3446,7 @@ void MarlinSettings::reset() { // // AUTOTEMP // - #if ENABLED(AUTOTEMP) - planner.autotemp.max = AUTOTEMP_MAX; - planner.autotemp.min = AUTOTEMP_MIN; - planner.autotemp.factor = AUTOTEMP_FACTOR; - #endif + TERN_(AUTOTEMP, thermalManager.autotemp.reset()); // // X Axis Twist Compensation @@ -3853,6 +3845,11 @@ void MarlinSettings::reset() { #endif gcode.say_units(); // " (in/mm)" + // + // M104 settings for AUTOTEMP + // + TERN_(AUTOTEMP, gcode.M104_report()); + // // M149 Temperature units // diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index fa84cec25d..5d5ccd3e4d 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -389,6 +389,10 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #endif // HAS_HOTEND +#if ENABLED(AUTOTEMP) + autotemp_t Temperature::autotemp; // Initialized by settings.load +#endif + #if HAS_TEMP_REDUNDANT redundant_info_t Temperature::temp_redundant; #endif @@ -3552,7 +3556,7 @@ void Temperature::init() { void Temperature::disable_all_heaters() { // Disable autotemp, unpause and reset everything - TERN_(AUTOTEMP, planner.autotemp.enabled = false); + TERN_(AUTOTEMP, autotemp.enabled = false); TERN_(PROBING_HEATERS_OFF, pause_heaters(false)); #if HAS_HOTEND @@ -3637,7 +3641,7 @@ void Temperature::disable_all_heaters() { singlenozzle_temp[old_tool] = temp_hotend[0].target; if (singlenozzle_temp[new_tool] && singlenozzle_temp[new_tool] != singlenozzle_temp[old_tool]) { setTargetHotend(singlenozzle_temp[new_tool], 0); - TERN_(AUTOTEMP, planner.autotemp_update()); + TERN_(AUTOTEMP, autotemp_update()); set_heating_message(0); (void)wait_for_hotend(0, false); // Wait for heating or cooling } @@ -4778,7 +4782,7 @@ void Temperature::isr() { OPTARG(G26_CLICK_CAN_CANCEL, const bool click_to_cancel/*=false*/) ) { #if ENABLED(AUTOTEMP) - REMEMBER(1, planner.autotemp.enabled, false); + REMEMBER(1, autotemp.enabled, false); #endif #if TEMP_RESIDENCY_TIME > 0 @@ -4911,6 +4915,58 @@ void Temperature::isr() { #endif // HAS_TEMP_HOTEND + #if ENABLED(AUTOTEMP) + + void Temperature::_autotemp_update_from_hotend() { + TERN_(AUTOTEMP_PROPORTIONAL, autotemp.update(degTargetHotend(active_extruder))); + } + + /** + * Called after changing tools to: + * - Reset or re-apply the default proportional autotemp factor. + * - Enable autotemp if the factor is non-zero. + */ + void Temperature::autotemp_update() { + _autotemp_update_from_hotend(); + autotemp.cfg.factor = TERN0(AUTOTEMP_PROPORTIONAL, AUTOTEMP_FACTOR_P); + autotemp.enabled = autotemp.cfg.factor != 0; + } + + /** + * Called by the M104/M109 commands after setting Hotend Temperature + */ + void Temperature::autotemp_M104_M109() { + _autotemp_update_from_hotend(); + + if (parser.seenval('S')) autotemp.cfg.min = parser.value_celsius(); + if (parser.seenval('B')) autotemp.cfg.max = parser.value_celsius(); + + // When AUTOTEMP_PROPORTIONAL is enabled, F0 disables autotemp. + // Normally, leaving off F also disables autotemp. + autotemp.cfg.factor = parser.seen('F') ? parser.value_float() : TERN0(AUTOTEMP_PROPORTIONAL, AUTOTEMP_FACTOR_P); + autotemp.enabled = autotemp.cfg.factor != 0; + } + + /** + * Called every so often to adjust the hotend target temperature + * based on the extrusion speed, which is calculated from the blocks + * currently in the planner. + */ + void Temperature::autotemp_task() { + if (!autotemp.enabled) return; + if (degTargetHotend(active_extruder) < autotemp.cfg.min - 2) return; // Below the min? + + // Get a highest target proportion greater than zero + float high = planner.get_high_e_speed(); + + // Calculate a new target, with weighted correction for a drop + float t = autotemp.calculate(high); + + _setTargetHotend(t, active_extruder); + } + + #endif // AUTOTEMP + #if HAS_HEATED_BED #ifndef MIN_COOLING_SLOPE_DEG_BED diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 92fae44deb..884a72646e 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -603,6 +603,41 @@ typedef struct { raw_adc_t raw_min, raw_max; celsius_t mintemp, maxtemp; } temp_ #define HAS_FAN_LOGIC 1 #endif +#if ENABLED(AUTOTEMP) + + typedef struct { + celsius_t min, max; + float factor; + } autotemp_cfg_t; + + typedef struct { + autotemp_cfg_t cfg; + bool enabled; + + void reset() { + cfg.min = AUTOTEMP_MIN; + cfg.max = AUTOTEMP_MAX; + cfg.factor = AUTOTEMP_FACTOR; + enabled = false; + } + #if ENABLED(AUTOTEMP_PROPORTIONAL) + void update(const celsius_t t) { + cfg.min = t + AUTOTEMP_MIN_P; + cfg.max = t + AUTOTEMP_MAX_P; + } + #endif + float calculate(const celsius_t high) { + static float oldt = 0; + float t = cfg.min + high * cfg.factor; + NOMORE(t, cfg.max); + if (t < oldt) t = t * (1.0f - (AUTOTEMP_OLDWEIGHT)) + oldt * (AUTOTEMP_OLDWEIGHT); + oldt = t; + return t; + } + } autotemp_t; + +#endif // AUTOTEMP + class Temperature { public: @@ -1001,6 +1036,10 @@ class Temperature { #if HAS_HOTEND + static void _setTargetHotend(const celsius_t celsius, const uint8_t E_NAME) { + temp_hotend[HOTEND_INDEX].target = _MIN(celsius, hotend_max_target(HOTEND_INDEX)); + } + static void setTargetHotend(const celsius_t celsius, const uint8_t E_NAME) { const uint8_t ee = HOTEND_INDEX; #if PREHEAT_TIME_HOTEND_MS > 0 @@ -1010,7 +1049,8 @@ class Temperature { start_hotend_preheat_time(ee); #endif TERN_(AUTO_POWER_CONTROL, if (celsius) powerManager.power_on()); - temp_hotend[ee].target = _MIN(celsius, hotend_max_target(ee)); + _setTargetHotend(celsius, ee); + TERN_(AUTOTEMP, autotemp.enabled = false); start_watching_hotend(ee); } @@ -1052,6 +1092,13 @@ class Temperature { #endif // HAS_HOTEND + #if ENABLED(AUTOTEMP) + static autotemp_t autotemp; + static void autotemp_update(); + static void autotemp_M104_M109(); + static void autotemp_task(); + #endif + #if HAS_HEATED_BED #if ENABLED(SHOW_TEMP_ADC_VALUES) @@ -1349,6 +1396,10 @@ class Temperature { return true; } + #if ENABLED(AUTOTEMP) + static void _autotemp_update_from_hotend(); + #endif + // MAX Thermocouples #if HAS_MAX_TC #define MAX_TC_COUNT TEMP_SENSOR_IS_MAX_TC(0) + TEMP_SENSOR_IS_MAX_TC(1) + TEMP_SENSOR_IS_MAX_TC(2) + TEMP_SENSOR_IS_MAX_TC(REDUNDANT) diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index baf4ad813e..85254ea598 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -1581,7 +1581,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { // Migrate the temperature to the new hotend #if HAS_MULTI_HOTEND thermalManager.setTargetHotend(thermalManager.degTargetHotend(active_extruder), migration_extruder); - TERN_(AUTOTEMP, planner.autotemp_update()); + TERN_(AUTOTEMP, thermalManager.autotemp_update()); thermalManager.set_heating_message(0); thermalManager.wait_for_hotend(active_extruder); #endif diff --git a/buildroot/tests/mega2560 b/buildroot/tests/mega2560 index befb17e1f7..f323602954 100755 --- a/buildroot/tests/mega2560 +++ b/buildroot/tests/mega2560 @@ -82,7 +82,7 @@ opt_set DEFAULT_AXIS_STEPS_PER_UNIT '{ 4000 }' \ MANUAL_FEEDRATE '{ 4*60 }' \ AXIS_RELATIVE_MODES '{ false }' \ HOMING_BUMP_MM '{}' HOMING_BUMP_DIVISOR '{}' HOMING_FEEDRATE_MM_M '{}' -opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER +opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER AUTOTEMP AUTOTEMP_PROPORTIONAL opt_disable X_DRIVER_TYPE Y_DRIVER_TYPE Z_DRIVER_TYPE exec_test $1 $2 "E Axis Only | DOGM MarlinUI" "$3"