mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-23 12:04:19 +00:00
Improve probe preheat behavior (#21033)
Co-authored-by: InsanityAutomation <d.menzel@insanityautomation.com> Co-authored-by: Scott Lahteine <github@thinkyhead.com>
This commit is contained in:
parent
1f21a499d4
commit
42d00b13df
@ -818,22 +818,6 @@
|
||||
#define TOTAL_PROBING MULTIPLE_PROBING
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(PREHEAT_BEFORE_PROBING)
|
||||
#ifndef PROBING_NOZZLE_TEMP
|
||||
#define PROBING_NOZZLE_TEMP 0
|
||||
#endif
|
||||
#ifndef PROBING_BED_TEMP
|
||||
#define PROBING_BED_TEMP 0
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(PREHEAT_BEFORE_LEVELING)
|
||||
#ifndef LEVELING_NOZZLE_TEMP
|
||||
#define LEVELING_NOZZLE_TEMP 0
|
||||
#endif
|
||||
#ifndef LEVELING_BED_TEMP
|
||||
#define LEVELING_BED_TEMP 0
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
// Clear probe pin settings when no probe is selected
|
||||
#undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
|
||||
|
@ -327,30 +327,61 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
|
||||
|
||||
#if EITHER(PREHEAT_BEFORE_PROBING, PREHEAT_BEFORE_LEVELING)
|
||||
|
||||
#if ENABLED(PREHEAT_BEFORE_PROBING)
|
||||
#ifndef PROBING_NOZZLE_TEMP
|
||||
#define PROBING_NOZZLE_TEMP 0
|
||||
#endif
|
||||
#ifndef PROBING_BED_TEMP
|
||||
#define PROBING_BED_TEMP 0
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(PREHEAT_BEFORE_LEVELING)
|
||||
#ifndef LEVELING_NOZZLE_TEMP
|
||||
#define LEVELING_NOZZLE_TEMP 0
|
||||
#endif
|
||||
#ifndef LEVELING_BED_TEMP
|
||||
#define LEVELING_BED_TEMP 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Do preheating as required before leveling or probing
|
||||
* Do preheating as required before leveling or probing.
|
||||
* - If a preheat input is higher than the current target, raise the target temperature.
|
||||
* - If a preheat input is higher than the current temperature, wait for stabilization.
|
||||
*/
|
||||
void Probe::preheat_for_probing(const uint16_t hotend_temp, const uint16_t bed_temp) {
|
||||
#if PROBING_NOZZLE_TEMP || LEVELING_NOZZLE_TEMP
|
||||
#if HAS_HOTEND && (PROBING_NOZZLE_TEMP || LEVELING_NOZZLE_TEMP)
|
||||
#define WAIT_FOR_NOZZLE_HEAT
|
||||
#endif
|
||||
#if PROBING_BED_TEMP || LEVELING_BED_TEMP
|
||||
#if HAS_HEATED_BED && (PROBING_BED_TEMP || LEVELING_BED_TEMP)
|
||||
#define WAIT_FOR_BED_HEAT
|
||||
#endif
|
||||
const uint16_t hotendPreheat = TERN0(WAIT_FOR_NOZZLE_HEAT, thermalManager.degHotend(0) < hotend_temp) ? hotend_temp : 0,
|
||||
bedPreheat = TERN0(WAIT_FOR_BED_HEAT, thermalManager.degBed() < bed_temp) ? bed_temp : 0;
|
||||
|
||||
DEBUG_ECHOPGM("Preheating ");
|
||||
if (hotendPreheat) {
|
||||
DEBUG_ECHOPAIR("hotend (", hotendPreheat, ") ");
|
||||
if (bedPreheat) DEBUG_ECHOPGM("and ");
|
||||
}
|
||||
if (bedPreheat) DEBUG_ECHOPAIR("bed (", bedPreheat, ") ");
|
||||
|
||||
#if ENABLED(WAIT_FOR_NOZZLE_HEAT)
|
||||
const uint16_t hotendPreheat = hotend_temp > thermalManager.degTargetHotend(0) ? hotend_temp : 0;
|
||||
if (hotendPreheat) {
|
||||
DEBUG_ECHOPAIR("hotend (", hotendPreheat, ")");
|
||||
thermalManager.setTargetHotend(hotendPreheat, 0);
|
||||
}
|
||||
#elif ENABLED(WAIT_FOR_BED_HEAT)
|
||||
constexpr uint16_t hotendPreheat = 0;
|
||||
#endif
|
||||
|
||||
#if ENABLED(WAIT_FOR_BED_HEAT)
|
||||
const uint16_t bedPreheat = bed_temp > thermalManager.degTargetBed() ? bed_temp : 0;
|
||||
if (bedPreheat) {
|
||||
if (hotendPreheat) DEBUG_ECHOPGM(" and ");
|
||||
DEBUG_ECHOPAIR("bed (", bedPreheat, ")");
|
||||
thermalManager.setTargetBed(bedPreheat);
|
||||
}
|
||||
#endif
|
||||
|
||||
DEBUG_EOL();
|
||||
|
||||
TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotendPreheat) thermalManager.setTargetHotend(hotendPreheat, 0));
|
||||
TERN_(WAIT_FOR_BED_HEAT, if (bedPreheat) thermalManager.setTargetBed(bedPreheat));
|
||||
TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotendPreheat) thermalManager.wait_for_hotend(0));
|
||||
TERN_(WAIT_FOR_BED_HEAT, if (bedPreheat) thermalManager.wait_for_bed_heating());
|
||||
TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.degHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0));
|
||||
TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.degBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating());
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user