|
@ -4488,6 +4488,13 @@ inline void gcode_M105() { |
|
|
|
|
|
|
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#ifndef MIN_COOLING_SLOPE_DEG |
|
|
|
|
|
#define MIN_COOLING_SLOPE_DEG 1.50 |
|
|
|
|
|
#endif |
|
|
|
|
|
#ifndef MIN_COOLING_SLOPE_TIME |
|
|
|
|
|
#define MIN_COOLING_SLOPE_TIME 60 |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* M109: Sxxx Wait for extruder(s) to reach temperature. Waits only when heating. |
|
|
* M109: Sxxx Wait for extruder(s) to reach temperature. Waits only when heating. |
|
|
* Rxxx Wait for extruder(s) to reach temperature. Waits when heating and cooling. |
|
|
* Rxxx Wait for extruder(s) to reach temperature. Waits when heating and cooling. |
|
@ -4600,11 +4607,11 @@ inline void gcode_M109() { |
|
|
|
|
|
|
|
|
// Prevent a wait-forever situation if R is misused i.e. M109 R0
|
|
|
// Prevent a wait-forever situation if R is misused i.e. M109 R0
|
|
|
if (wants_to_cool) { |
|
|
if (wants_to_cool) { |
|
|
if (temp < (EXTRUDE_MINTEMP) / 2) break; // always break at (default) 85°
|
|
|
// break after MIN_COOLING_SLOPE_TIME seconds
|
|
|
// break after 20 seconds if cooling stalls
|
|
|
// if the temperature did not drop at least MIN_COOLING_SLOPE_DEG
|
|
|
if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) { |
|
|
if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) { |
|
|
if (old_temp - temp < 1.0) break; |
|
|
if (old_temp - temp < MIN_COOLING_SLOPE_DEG) break; |
|
|
next_cool_check_ms = now + 20000; |
|
|
next_cool_check_ms = now + 1000UL * MIN_COOLING_SLOPE_TIME; |
|
|
old_temp = temp; |
|
|
old_temp = temp; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -4617,6 +4624,13 @@ inline void gcode_M109() { |
|
|
|
|
|
|
|
|
#if HAS_TEMP_BED |
|
|
#if HAS_TEMP_BED |
|
|
|
|
|
|
|
|
|
|
|
#ifndef MIN_COOLING_SLOPE_DEG_BED |
|
|
|
|
|
#define MIN_COOLING_SLOPE_DEG_BED 1.50 |
|
|
|
|
|
#endif |
|
|
|
|
|
#ifndef MIN_COOLING_SLOPE_TIME_BED |
|
|
|
|
|
#define MIN_COOLING_SLOPE_TIME_BED 60 |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* M190: Sxxx Wait for bed current temp to reach target temp. Waits only when heating |
|
|
* M190: Sxxx Wait for bed current temp to reach target temp. Waits only when heating |
|
|
* Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling |
|
|
* Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling |
|
@ -4709,11 +4723,11 @@ inline void gcode_M109() { |
|
|
|
|
|
|
|
|
// Prevent a wait-forever situation if R is misused i.e. M190 R0
|
|
|
// Prevent a wait-forever situation if R is misused i.e. M190 R0
|
|
|
if (wants_to_cool) { |
|
|
if (wants_to_cool) { |
|
|
if (temp < 30.0) break; // always break at 30°
|
|
|
// break after MIN_COOLING_SLOPE_TIME_BED seconds
|
|
|
// break after 20 seconds if cooling stalls
|
|
|
// if the temperature did not drop at least MIN_COOLING_SLOPE_DEG_BED
|
|
|
if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) { |
|
|
if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) { |
|
|
if (old_temp - temp < 1.0) break; |
|
|
if (old_temp - temp < MIN_COOLING_SLOPE_DEG_BED) break; |
|
|
next_cool_check_ms = now + 20000; |
|
|
next_cool_check_ms = now + 1000UL * MIN_COOLING_SLOPE_TIME_BED; |
|
|
old_temp = temp; |
|
|
old_temp = temp; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|