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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user