TM: Restore extruder autofan state when stopping/resuming

During thermal errors all fans are set to full speed.

When the print is resumed or stopped *and* the thermal error is gone,
also restore the autofan state.

Fixes #3893
This commit is contained in:
Yuri D'Elia 2023-01-15 17:32:56 +01:00 committed by DRracer
parent 128a23544d
commit 16922c2643
3 changed files with 20 additions and 1 deletions

View File

@ -294,3 +294,13 @@ void hotendFanSetFullSpeed()
#endif //FAN_SOFT_PWM
fanSpeed = 255;
}
void hotendDefaultAutoFanState()
{
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1)
#ifdef EXTRUDER_ALTFAN_DETECT
altfanStatus.altfanOverride = eeprom_read_byte((uint8_t*)EEPROM_ALTFAN_OVERRIDE);
#endif
setExtruderAutoFanState(1);
#endif
}

View File

@ -33,3 +33,4 @@ void checkExtruderAutoFans();
void checkFans();
void hotendFanSetFullSpeed();
void hotendDefaultAutoFanState();

View File

@ -5435,7 +5435,12 @@ void lcd_resume_print()
st_synchronize();
custom_message_type = CustomMsg::Resuming;
isPrintPaused = false;
Stopped = false; // resume processing USB commands again
// resume processing USB commands again and restore hotend fan state (in case the print was
// stopped due to a thermal error)
hotendDefaultAutoFanState();
Stopped = false;
restore_print_from_ram_and_continue(default_retraction);
pause_time += (_millis() - start_pause_print); //accumulate time when print is paused for correct statistics calculation
refresh_cmd_timeout();
@ -6073,6 +6078,9 @@ void lcd_print_stop_finish()
} else {
// Turn off the print fan
fanSpeed = 0;
// restore the auto hotend state
hotendDefaultAutoFanState();
}
if (mmu_enabled) extr_unload(); //M702 C