Skip to content

Commit

Permalink
Fast Filament Change temperature check (MarlinFirmware#18738)
Browse files Browse the repository at this point in the history
  • Loading branch information
InsanityAutomation authored and vgadreau committed Dec 9, 2020
1 parent 1e91eb0 commit 7ee0166
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions Marlin/src/feature/pause.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ fil_change_settings_t fc_settings[EXTRUDERS];
*
* Returns 'true' if heating was completed, 'false' for abort
*/
static bool ensure_safe_temperature(const PauseMode mode=PAUSE_MODE_SAME) {
static bool ensure_safe_temperature(const bool wait=true, const PauseMode mode=PAUSE_MODE_SAME) {

#if ENABLED(PREVENT_COLD_EXTRUSION)
if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) {
Expand All @@ -134,7 +134,13 @@ static bool ensure_safe_temperature(const PauseMode mode=PAUSE_MODE_SAME) {
UNUSED(mode);
#endif

return thermalManager.wait_for_hotend(active_extruder);
if (wait)
return thermalManager.wait_for_hotend(active_extruder);

while (ABS(thermalManager.degHotend(active_extruder) - thermalManager.degTargetHotend(active_extruder)) > TEMP_WINDOW)
idle();

return true;
}

/**
Expand All @@ -156,7 +162,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
) {
TERN(HAS_LCD_MENU,,UNUSED(show_lcd));

if (!ensure_safe_temperature(mode)) {
if (!ensure_safe_temperature(false, mode)) {
#if HAS_LCD_MENU
if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_STATUS, mode);
#endif
Expand Down Expand Up @@ -291,7 +297,7 @@ bool unload_filament(const float &unload_length, const bool show_lcd/*=false*/,
constexpr float mix_multiplier = 1.0;
#endif

if (!ensure_safe_temperature(mode)) {
if (!ensure_safe_temperature(false, mode)) {
#if HAS_LCD_MENU
if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_STATUS);
#endif
Expand Down Expand Up @@ -498,7 +504,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
HOTEND_LOOP() thermalManager.reset_hotend_idle_timer(e);

// Wait for the heaters to reach the target temperatures
ensure_safe_temperature();
ensure_safe_temperature(false);

// Show the prompt to continue
show_continue_prompt(is_reload);
Expand Down Expand Up @@ -587,6 +593,8 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
// Unretract
unscaled_e_move(PAUSE_PARK_RETRACT_LENGTH, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE));

ensure_safe_temperature();

// Intelligent resuming
#if ENABLED(FWRETRACT)
// If retracted before goto pause
Expand Down

0 comments on commit 7ee0166

Please sign in to comment.