From 84ae7d5f729d66af9c11066bc789d9cafe61e36f Mon Sep 17 00:00:00 2001
From: studiodyne <42887851+studiodyne@users.noreply.github.com>
Date: Sun, 27 Nov 2022 04:29:13 +0100
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20MILLISECONDS=5FPREHEAT=5FT?=
 =?UTF-8?q?IME=20/=20mintemp=20(#24967)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Marlin/src/inc/SanityCheck.h      | 4 ++--
 Marlin/src/module/temperature.cpp | 9 ++++++++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 766b69fcb98..b2e4dc9de0f 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -2330,8 +2330,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
   #endif
   #if MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED < 5
     #error "Thermistor 66 requires MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED ≥ 5."
-  #elif MILLISECONDS_PREHEAT_TIME < 30000
-    #error "Thermistor 66 requires MILLISECONDS_PREHEAT_TIME ≥ 30000."
+  #elif MILLISECONDS_PREHEAT_TIME < 15000
+    #error "Thermistor 66 requires MILLISECONDS_PREHEAT_TIME ≥ 15000, but 30000 or higher is recommended."
   #endif
   #undef _BAD_MINTEMP
 #endif
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index 8742cf36dfb..fb3953841b7 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -2406,8 +2406,15 @@ void Temperature::updateTemperaturesFromRawValues() {
       if ((neg && r < temp_range[e].raw_max) || (pos && r > temp_range[e].raw_max))
         max_temp_error((heater_id_t)e);
 
+      /**
+      // DEBUG PREHEATING TIME
+      SERIAL_ECHOLNPGM("\nExtruder = ", e, " Preheat On/Off = ", is_preheating(e));
+      const float test_is_preheating = (preheat_end_time[HOTEND_INDEX] - millis()) * 0.001f;
+      if (test_is_preheating < 31) SERIAL_ECHOLNPGM("Extruder = ", e, " Preheat remaining time = ", test_is_preheating, "s", "\n");
+      //*/
+
       const bool heater_on = temp_hotend[e].target > 0;
-      if (heater_on && ((neg && r > temp_range[e].raw_min) || (pos && r < temp_range[e].raw_min))) {
+      if (heater_on && !is_preheating(e) && ((neg && r > temp_range[e].raw_min) || (pos && r < temp_range[e].raw_min))) {
         if (TERN1(MULTI_MAX_CONSECUTIVE_LOW_TEMP_ERR, ++consecutive_low_temperature_error[e] >= MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED))
           min_temp_error((heater_id_t)e);
       }