From cb46cb8480c33ffc9f6361b96ed200986a3bd9ac Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 23 Apr 2018 17:13:01 -0500 Subject: [PATCH] Add HAS_HEATED_BED conditional (#10495) --- Marlin/src/HAL/HAL_STM32F1/HAL.cpp | 6 +- Marlin/src/feature/leds/tempstat.cpp | 2 +- Marlin/src/feature/power_loss_recovery.cpp | 8 +- Marlin/src/feature/power_loss_recovery.h | 5 +- Marlin/src/gcode/bedlevel/G26.cpp | 4 +- Marlin/src/gcode/gcode.cpp | 2 +- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/gcode/temperature/M140_M190.cpp | 4 +- Marlin/src/inc/Conditionals_post.h | 8 +- Marlin/src/lcd/dogm/dogm_bitmaps.h | 8 +- Marlin/src/lcd/dogm/status_screen_DOGM.h | 40 +++- .../src/lcd/dogm/status_screen_lite_ST7920.h | 16 +- Marlin/src/lcd/ultralcd.cpp | 28 +-- Marlin/src/lcd/ultralcd_impl_HD44780.h | 18 +- Marlin/src/module/motion.cpp | 2 +- Marlin/src/module/probe.cpp | 4 +- Marlin/src/module/probe.h | 2 +- Marlin/src/module/temperature.cpp | 214 ++++++++++-------- Marlin/src/module/temperature.h | 190 ++++++++-------- 19 files changed, 303 insertions(+), 260 deletions(-) diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL.cpp index d1ec010ea8..e900f4a32a 100644 --- a/Marlin/src/HAL/HAL_STM32F1/HAL.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/HAL.cpp @@ -80,7 +80,7 @@ uint8 adc_pins[] = { #if HAS_TEMP_4 TEMP_4_PIN, #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED TEMP_BED_PIN, #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) @@ -104,7 +104,7 @@ enum TEMP_PINS : char { #if HAS_TEMP_4 TEMP_4, #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED TEMP_BED, #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) @@ -211,7 +211,7 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) { #if HAS_TEMP_4 case TEMP_4_PIN: pin_index = TEMP_4; break; #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED case TEMP_BED_PIN: pin_index = TEMP_BED; break; #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) diff --git a/Marlin/src/feature/leds/tempstat.cpp b/Marlin/src/feature/leds/tempstat.cpp index 8f2be49f2a..5ab0d2efab 100644 --- a/Marlin/src/feature/leds/tempstat.cpp +++ b/Marlin/src/feature/leds/tempstat.cpp @@ -37,7 +37,7 @@ void handle_status_leds(void) { if (ELAPSED(millis(), next_status_led_update_ms)) { next_status_led_update_ms += 500; // Update every 0.5s float max_temp = 0.0; - #if HAS_TEMP_BED + #if HAS_HEATED_BED max_temp = MAX3(max_temp, thermalManager.degTargetBed(), thermalManager.degBed()); #endif HOTEND_LOOP() diff --git a/Marlin/src/feature/power_loss_recovery.cpp b/Marlin/src/feature/power_loss_recovery.cpp index 343952367d..b879a26341 100644 --- a/Marlin/src/feature/power_loss_recovery.cpp +++ b/Marlin/src/feature/power_loss_recovery.cpp @@ -67,7 +67,9 @@ static char sd_filename[MAXPATHNAMELENGTH]; SERIAL_PROTOCOLPAIR("leveling: ", int(job_recovery_info.leveling)); SERIAL_PROTOCOLLNPAIR(" fade: ", int(job_recovery_info.fade)); #endif - SERIAL_PROTOCOLLNPAIR("target_temperature_bed: ", job_recovery_info.target_temperature_bed); + #if HAS_HEATED_BED + SERIAL_PROTOCOLLNPAIR("target_temperature_bed: ", job_recovery_info.target_temperature_bed); + #endif SERIAL_PROTOCOLLNPAIR("cmd_queue_index_r: ", job_recovery_info.cmd_queue_index_r); SERIAL_PROTOCOLLNPAIR("commands_in_queue: ", job_recovery_info.commands_in_queue); if (recovery) @@ -196,7 +198,9 @@ void save_job_recovery_info() { COPY(job_recovery_info.current_position, current_position); job_recovery_info.feedrate = feedrate_mm_s; COPY(job_recovery_info.target_temperature, thermalManager.target_temperature); - job_recovery_info.target_temperature_bed = thermalManager.target_temperature_bed; + #if HAS_HEATED_BED + job_recovery_info.target_temperature_bed = thermalManager.target_temperature_bed; + #endif COPY(job_recovery_info.fanSpeeds, fanSpeeds); #if HAS_LEVELING diff --git a/Marlin/src/feature/power_loss_recovery.h b/Marlin/src/feature/power_loss_recovery.h index 2cab07e4a1..d08b500247 100644 --- a/Marlin/src/feature/power_loss_recovery.h +++ b/Marlin/src/feature/power_loss_recovery.h @@ -41,9 +41,12 @@ typedef struct { // Machine state float current_position[NUM_AXIS], feedrate; int16_t target_temperature[HOTENDS], - target_temperature_bed, fanSpeeds[FAN_COUNT]; + #if HAS_HEATED_BED + int16_t target_temperature_bed; + #endif + #if HAS_LEVELING bool leveling; float fade; diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index 6f2748d398..5a15c9945b 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -417,7 +417,7 @@ inline bool look_for_lines_to_connect() { */ inline bool turn_on_heaters() { millis_t next = millis() + 5000UL; - #if HAS_TEMP_BED + #if HAS_HEATED_BED #if ENABLED(ULTRA_LCD) if (g26_bed_temp > 25) { lcd_setstatusPGM(PSTR("G26 Heating Bed."), 99); @@ -839,7 +839,7 @@ void GcodeSuite::G26() { #endif if (!g26_keep_heaters_on) { - #if HAS_TEMP_BED + #if HAS_HEATED_BED thermalManager.setTargetBed(0); #endif thermalManager.setTargetHotend(0, 0); diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 88c9555c5b..b9ded9863a 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -365,7 +365,7 @@ void GcodeSuite::process_parsed_command( case 113: M113(); break; // M113: Set Host Keepalive interval #endif - #if HAS_HEATER_BED && HAS_TEMP_BED + #if HAS_HEATED_BED case 140: M140(); break; // M140: Set bed temperature case 190: M190(); break; // M190: Wait for bed temperature to reach target #endif diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index c9f557c005..cb8e62b79e 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -547,7 +547,7 @@ private: #endif #endif - #if HAS_HEATER_BED && HAS_TEMP_BED + #if HAS_HEATED_BED static void M140(); static void M190(); #endif diff --git a/Marlin/src/gcode/temperature/M140_M190.cpp b/Marlin/src/gcode/temperature/M140_M190.cpp index c4c3d4efe8..a8af02e591 100644 --- a/Marlin/src/gcode/temperature/M140_M190.cpp +++ b/Marlin/src/gcode/temperature/M140_M190.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if HAS_HEATER_BED && HAS_TEMP_BED +#if HAS_HEATED_BED #include "../gcode.h" #include "../../module/temperature.h" @@ -177,4 +177,4 @@ void GcodeSuite::M190() { #endif } -#endif // HAS_HEATER_BED && HAS_TEMP_BED +#endif // HAS_HEATED_BED diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 4f5e26a47c..387dbf0198 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -764,7 +764,6 @@ #define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675)) #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2) #define HAS_TEMP_CHAMBER (PIN_EXISTS(TEMP_CHAMBER) && TEMP_SENSOR_CHAMBER != 0 && TEMP_SENSOR_CHAMBER > -2) -#define HAS_TEMP_SENSOR (HAS_TEMP_HOTEND || HAS_TEMP_BED || HAS_TEMP_CHAMBER) // Heaters #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0)) @@ -774,8 +773,11 @@ #define HAS_HEATER_4 (PIN_EXISTS(HEATER_4)) #define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED)) +#define HAS_HEATED_BED (HAS_TEMP_BED && HAS_HEATER_BED) +#define HAS_TEMP_SENSOR (HAS_TEMP_HOTEND || HAS_HEATED_BED || HAS_TEMP_CHAMBER) + // Thermal protection -#define HAS_THERMALLY_PROTECTED_BED (ENABLED(THERMAL_PROTECTION_BED) && HAS_TEMP_BED && HAS_HEATER_BED) +#define HAS_THERMALLY_PROTECTED_BED (HAS_HEATED_BED && ENABLED(THERMAL_PROTECTION_BED)) #define WATCH_HOTENDS (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0) #define WATCH_THE_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0) @@ -897,7 +899,7 @@ /** * Heated bed requires settings */ -#if HAS_HEATER_BED +#if HAS_HEATED_BED #ifndef MAX_BED_POWER #define MAX_BED_POWER 255 #endif diff --git a/Marlin/src/lcd/dogm/dogm_bitmaps.h b/Marlin/src/lcd/dogm/dogm_bitmaps.h index 7411c8a953..94e4664051 100644 --- a/Marlin/src/lcd/dogm/dogm_bitmaps.h +++ b/Marlin/src/lcd/dogm/dogm_bitmaps.h @@ -21,7 +21,7 @@ */ /** - * Standard Marlin Boot Screen bitmaps + * Standard Marlin Boot and Status Screen bitmaps * * Use the Marlin Bitmap Converter to make your own: * http://marlinfw.org/tools/u8glib/converter.html @@ -136,7 +136,7 @@ // STATUS_SCREEN_HOTEND_TEXT_X(i) to modify draw locations. #include "../../../_Statusscreen.h" -#elif HAS_TEMP_BED +#elif HAS_HEATED_BED #define STATUS_SCREEN_X ( 8 + (HOTENDS ? 0 : 64)) #define STATUS_SCREENWIDTH (120 - (HOTENDS ? 0 : 64)) @@ -321,7 +321,7 @@ }; #endif // HOTENDS -#else // !HAS_TEMP_BED +#else // !HAS_HEATED_BED #define STATUS_SCREEN_X ( 8 + (HOTENDS ? 0 : 96)) #define STATUS_SCREENWIDTH (120 - (HOTENDS ? 0 : 96)) @@ -507,7 +507,7 @@ #endif // HOTENDS -#endif // !HAS_TEMP_BED +#endif // !HAS_HEATED_BED #if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) || ENABLED(MESH_EDIT_GFX_OVERLAY) diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.h b/Marlin/src/lcd/dogm/status_screen_DOGM.h index 21d98af057..65f1f4e512 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.h +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.h @@ -45,7 +45,7 @@ FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater, cons UNUSED(blink); #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED const bool isBed = heater < 0; #else constexpr bool isBed = false; @@ -53,32 +53,48 @@ FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater, cons if (PAGE_UNDER(7)) { #if HEATER_IDLE_HANDLER - const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) : - #if HAS_TEMP_BED - thermalManager.is_bed_idle() - #else - false + const bool is_idle = ( + #if HAS_HEATED_BED + isBed ? thermalManager.is_bed_idle() : #endif + thermalManager.is_heater_idle(heater) ); if (blink || !is_idle) #endif - _draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); } + _draw_centered_temp(0.5 + ( + #if HAS_HEATED_BED + isBed ? thermalManager.degTargetBed() : + #endif + thermalManager.degTargetHotend(heater) + ), x, 7 + ); + } if (PAGE_CONTAINS(21, 28)) - _draw_centered_temp((isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)) + 0.5, x, 28); + _draw_centered_temp(0.5 + ( + #if HAS_HEATED_BED + isBed ? thermalManager.degBed() : + #endif + thermalManager.degHotend(heater) + ), x, 28 + ); if (PAGE_CONTAINS(17, 20)) { const uint8_t h = isBed ? 7 : HEAT_INDICATOR_X, y = isBed ? 18 : 17; - if (isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater)) { + if ( + #if HAS_HEATED_BED + isBed ? thermalManager.isHeatingBed() : + #endif + thermalManager.isHeatingHotend(heater) + ) { u8g.setColorIndex(0); // white on black u8g.drawBox(x + h, y, 2, 2); u8g.setColorIndex(1); // black on white } - else { + else u8g.drawBox(x + h, y, 2, 2); - } } } @@ -199,7 +215,7 @@ static void lcd_implementation_status_screen() { HOTEND_LOOP() _draw_heater_status(STATUS_SCREEN_HOTEND_TEXT_X(e), e, blink); // Heated bed - #if HOTENDS < 4 && HAS_TEMP_BED + #if HOTENDS < 4 && HAS_HEATED_BED _draw_heater_status(STATUS_SCREEN_BED_TEXT_X, -1, blink); #endif diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h index 125e1868f6..78d8794720 100644 --- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h +++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h @@ -525,12 +525,12 @@ void ST7920_Lite_Status_Screen::draw_heat_icon(const bool whichIcon, const bool static struct { bool E1_show_target : 1; bool E2_show_target : 1; - #if HAS_HEATER_BED + #if HAS_HEATED_BED bool bed_show_target : 1; #endif } display_state = { true, true - #if HAS_HEATER_BED + #if HAS_HEATED_BED , true #endif }; @@ -569,7 +569,7 @@ void ST7920_Lite_Status_Screen::draw_extruder_2_temp(const int16_t temp, const i display_state.E2_show_target = show_target; } -#if HAS_HEATER_BED +#if HAS_HEATED_BED void ST7920_Lite_Status_Screen::draw_bed_temp(const int16_t temp, const int16_t target, bool forceUpdate) { const bool show_target = target && FAR(temp, target); draw_temps(2 @@ -680,7 +680,7 @@ bool ST7920_Lite_Status_Screen::indicators_changed() { #if EXTRUDERS == 2 const int16_t extruder_2_target = thermalManager.degTargetHotend(1); #endif - #if HAS_HEATER_BED + #if HAS_HEATED_BED const int16_t bed_target = thermalManager.degTargetBed(); #endif static uint16_t last_checksum = 0; @@ -688,7 +688,7 @@ bool ST7920_Lite_Status_Screen::indicators_changed() { #if EXTRUDERS == 2 ^ extruder_2_target #endif - #if HAS_HEATER_BED + #if HAS_HEATED_BED ^ bed_target #endif ; @@ -709,7 +709,7 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) { const int16_t extruder_2_temp = thermalManager.degHotend(1), extruder_2_target = thermalManager.degTargetHotend(1); #endif - #if HAS_HEATER_BED + #if HAS_HEATED_BED const int16_t bed_temp = thermalManager.degBed(), bed_target = thermalManager.degTargetBed(); #endif @@ -718,7 +718,7 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) { #if EXTRUDERS == 2 draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate); #endif - #if HAS_HEATER_BED + #if HAS_HEATED_BED draw_bed_temp(bed_temp, bed_target, forceUpdate); #endif draw_fan_speed(fan_speed); @@ -727,7 +727,7 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) { // Update the fan and bed animations if (fan_speed > 0) draw_fan_icon(blink); - #if HAS_HEATER_BED + #if HAS_HEATED_BED if (bed_target > 0) draw_heat_icon(blink, true); else diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index af19eade33..1535dffa66 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -893,9 +893,11 @@ void kill_screen(const char* lcd_msg) { #endif )); - // Restore the bed temperature - sprintf_P(cmd, PSTR("M190 S%i"), job_recovery_info.target_temperature_bed); - enqueue_and_echo_command(cmd); + #if HAS_HEATED_BED + // Restore the bed temperature + sprintf_P(cmd, PSTR("M190 S%i"), job_recovery_info.target_temperature_bed); + enqueue_and_echo_command(cmd); + #endif // Restore all hotend temperatures HOTEND_LOOP() { @@ -1431,7 +1433,7 @@ void kill_screen(const char* lcd_msg) { // // Bed: // - #if HAS_TEMP_BED + #if HAS_HEATED_BED MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.target_temperature_bed, 0, BED_MAXTEMP - 15, watch_temp_callback_bed); #endif @@ -2136,7 +2138,7 @@ void kill_screen(const char* lcd_msg) { x_plot = 0, y_plot = 0; - #if HAS_TEMP_BED + #if HAS_HEATED_BED static int16_t custom_bed_temp = 50; #endif @@ -2146,7 +2148,7 @@ void kill_screen(const char* lcd_msg) { void _lcd_ubl_build_custom_mesh() { char UBL_LCD_GCODE[20]; enqueue_and_echo_commands_P(PSTR("G28")); - #if HAS_TEMP_BED + #if HAS_HEATED_BED sprintf_P(UBL_LCD_GCODE, PSTR("M190 S%i"), custom_bed_temp); lcd_enqueue_command(UBL_LCD_GCODE); #endif @@ -2167,7 +2169,7 @@ void kill_screen(const char* lcd_msg) { START_MENU(); MENU_BACK(MSG_UBL_BUILD_MESH_MENU); MENU_ITEM_EDIT(int3, MSG_UBL_CUSTOM_HOTEND_TEMP, &custom_hotend_temp, EXTRUDE_MINTEMP, (HEATER_0_MAXTEMP - 10)); - #if HAS_TEMP_BED + #if HAS_HEATED_BED MENU_ITEM_EDIT(int3, MSG_UBL_CUSTOM_BED_TEMP, &custom_bed_temp, BED_MINTEMP, (BED_MAXTEMP - 15)); #endif MENU_ITEM(function, MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_build_custom_mesh); @@ -2226,7 +2228,7 @@ void kill_screen(const char* lcd_msg) { void _lcd_ubl_validate_custom_mesh() { char UBL_LCD_GCODE[24]; const int temp = - #if HAS_TEMP_BED + #if HAS_HEATED_BED custom_bed_temp #else 0 @@ -2249,7 +2251,7 @@ void kill_screen(const char* lcd_msg) { void _lcd_ubl_validate_mesh() { START_MENU(); MENU_BACK(MSG_UBL_TOOLS); - #if HAS_TEMP_BED + #if HAS_HEATED_BED MENU_ITEM(gcode, MSG_UBL_VALIDATE_PLA_MESH, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_1_TEMP_BED) " H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P")); MENU_ITEM(gcode, MSG_UBL_VALIDATE_ABS_MESH, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_2_TEMP_BED) " H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P")); #else @@ -2353,7 +2355,7 @@ void kill_screen(const char* lcd_msg) { void _lcd_ubl_build_mesh() { START_MENU(); MENU_BACK(MSG_UBL_TOOLS); - #if HAS_TEMP_BED + #if HAS_HEATED_BED MENU_ITEM(gcode, MSG_UBL_BUILD_PLA_MESH, PSTR( "G28\n" "M190 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\n" @@ -2746,7 +2748,7 @@ void kill_screen(const char* lcd_msg) { // bool has_heat = false; HOTEND_LOOP() if (thermalManager.target_temperature[HOTEND_INDEX]) { has_heat = true; break; } - #if HAS_TEMP_BED + #if HAS_HEATED_BED if (thermalManager.target_temperature_bed) has_heat = true; #endif if (has_heat) MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown); @@ -3466,7 +3468,7 @@ void kill_screen(const char* lcd_msg) { // // Bed: // - #if HAS_TEMP_BED + #if HAS_HEATED_BED MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.target_temperature_bed, 0, BED_MAXTEMP - 15, watch_temp_callback_bed); #endif @@ -5117,7 +5119,7 @@ void lcd_update() { } #endif - #endif + #endif // ULTIPANEL #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT) diff --git a/Marlin/src/lcd/ultralcd_impl_HD44780.h b/Marlin/src/lcd/ultralcd_impl_HD44780.h index 5ff58c0980..960a0f7606 100644 --- a/Marlin/src/lcd/ultralcd_impl_HD44780.h +++ b/Marlin/src/lcd/ultralcd_impl_HD44780.h @@ -476,15 +476,14 @@ FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr, } FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, const bool blink) { - #if TEMP_SENSOR_BED + #if HAS_HEATED_BED const bool isBed = heater < 0; + const float t1 = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)), + t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)); #else - constexpr bool isBed = false; + const float t1 = thermalManager.degHotend(heater), t2 = thermalManager.degTargetHotend(heater); #endif - const float t1 = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)), - t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)); - if (prefix >= 0) lcd_put_wchar(prefix); lcd_put_u8str(itostr3(t1 + 0.5)); @@ -493,12 +492,11 @@ FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, co #if !HEATER_IDLE_HANDLER UNUSED(blink); #else - const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) : - #if HAS_TEMP_BED - thermalManager.is_bed_idle() - #else - false + const bool is_idle = ( + #if HAS_HEATED_BED + isBed ? thermalManager.is_bed_idle() : #endif + thermalManager.is_heater_idle(heater) ); if (!blink && is_idle) { diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index a9f6898a05..93641b7102 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1056,7 +1056,7 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa } #endif - #if HOMING_Z_WITH_PROBE && HAS_TEMP_BED && ENABLED(WAIT_FOR_BED_HEATER) + #if HOMING_Z_WITH_PROBE && HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) // Wait for bed to heat back up between probing points if (axis == Z_AXIS && distance < 0 && thermalManager.isHeatingBed()) { serialprintPGM(msg_wait_for_bed_heating); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 46b1e328da..b3169b5221 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -483,7 +483,7 @@ bool set_probe_deployed(const bool deploy) { * @return true to indicate an error */ -#if HAS_TEMP_BED && ENABLED(WAIT_FOR_BED_HEATER) +#if HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) const char msg_wait_for_bed_heating[25] PROGMEM = "Wait for bed heating...\n"; #endif @@ -492,7 +492,7 @@ static bool do_probe_move(const float z, const float fr_mm_m) { if (DEBUGGING(LEVELING)) DEBUG_POS(">>> do_probe_move", current_position); #endif - #if HAS_TEMP_BED && ENABLED(WAIT_FOR_BED_HEATER) + #if HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) // Wait for bed to heat back up between probing points if (thermalManager.isHeatingBed()) { serialprintPGM(msg_wait_for_bed_heating); diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index eceb1bb924..3e507581e3 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -44,7 +44,7 @@ float probe_pt(const float &rx, const float &ry, const ProbePtRaise raise_after=PROBE_PT_NONE, const uint8_t verbose_level=0, const bool probe_relative=true); #define DEPLOY_PROBE() set_probe_deployed(true) #define STOW_PROBE() set_probe_deployed(false) - #if HAS_TEMP_BED && ENABLED(WAIT_FOR_BED_HEATER) + #if HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) extern const char msg_wait_for_bed_heating[25]; #endif #else diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 046c1cf4f9..f383c3406e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -63,7 +63,7 @@ Temperature thermalManager; * Macros to include the heater id in temp errors. The compiler's dead-code * elimination should (hopefully) optimize out the unused strings. */ -#if HAS_TEMP_BED +#if HAS_HEATED_BED #define TEMP_ERR_PSTR(MSG, E) \ (E) == -1 ? PSTR(MSG ## _BED) : \ (HOTENDS > 1 && (E) == 1) ? PSTR(MSG_E2 " " MSG) : \ @@ -82,21 +82,51 @@ Temperature thermalManager; // public: -float Temperature::current_temperature[HOTENDS] = { 0.0 }, - Temperature::current_temperature_chamber = 0.0, - Temperature::current_temperature_bed = 0.0; - +float Temperature::current_temperature[HOTENDS] = { 0.0 }; int16_t Temperature::current_temperature_raw[HOTENDS] = { 0 }, - Temperature::target_temperature[HOTENDS] = { 0 }, - Temperature::current_temperature_chamber_raw = 0, - Temperature::current_temperature_bed_raw = 0; + Temperature::target_temperature[HOTENDS] = { 0 }; #if ENABLED(AUTO_POWER_E_FANS) int16_t Temperature::autofan_speed[HOTENDS] = { 0 }; #endif -#if HAS_HEATER_BED - int16_t Temperature::target_temperature_bed = 0; +#if HAS_HEATED_BED + float Temperature::current_temperature_bed = 0.0; + int16_t Temperature::current_temperature_bed_raw = 0, + Temperature::target_temperature_bed = 0; + uint8_t Temperature::soft_pwm_amount_bed; + #ifdef BED_MINTEMP + int16_t Temperature::bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; + #endif + #ifdef BED_MAXTEMP + int16_t Temperature::bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP; + #endif + #if WATCH_THE_BED + uint16_t Temperature::watch_target_bed_temp = 0; + millis_t Temperature::watch_bed_next_ms = 0; + #endif + #if ENABLED(PIDTEMPBED) + float Temperature::bedKp, Temperature::bedKi, Temperature::bedKd, // Initialized by settings.load() + Temperature::temp_iState_bed = { 0 }, + Temperature::temp_dState_bed = { 0 }, + Temperature::pTerm_bed, + Temperature::iTerm_bed, + Temperature::dTerm_bed, + Temperature::pid_error_bed; + #else + millis_t Temperature::next_bed_check_ms; + #endif + uint16_t Temperature::raw_temp_bed_value = 0; + #if HEATER_IDLE_HANDLER + millis_t Temperature::bed_idle_timeout_ms = 0; + bool Temperature::bed_idle_timeout_exceeded = false; + #endif +#endif // HAS_HEATED_BED + +#if HAS_TEMP_CHAMBER + float Temperature::current_temperature_chamber = 0.0; + int16_t Temperature::current_temperature_chamber_raw = 0; + uint16_t Temperature::raw_temp_chamber_value = 0; #endif // Initialized by settings.load() @@ -114,11 +144,6 @@ int16_t Temperature::current_temperature_raw[HOTENDS] = { 0 }, #endif #endif -// Initialized by settings.load() -#if ENABLED(PIDTEMPBED) - float Temperature::bedKp, Temperature::bedKi, Temperature::bedKd; -#endif - #if ENABLED(BABYSTEPPING) volatile int Temperature::babystepsTodo[XYZ] = { 0 }; #endif @@ -128,11 +153,6 @@ int16_t Temperature::current_temperature_raw[HOTENDS] = { 0 }, millis_t Temperature::watch_heater_next_ms[HOTENDS] = { 0 }; #endif -#if WATCH_THE_BED - uint16_t Temperature::watch_target_bed_temp = 0; - millis_t Temperature::watch_bed_next_ms = 0; -#endif - #if ENABLED(PREVENT_COLD_EXTRUSION) bool Temperature::allow_cold_extrude = false; int16_t Temperature::extrude_min_temp = EXTRUDE_MINTEMP; @@ -169,20 +189,7 @@ volatile bool Temperature::temp_meas_ready = false; bool Temperature::pid_reset[HOTENDS]; #endif -#if ENABLED(PIDTEMPBED) - float Temperature::temp_iState_bed = { 0 }, - Temperature::temp_dState_bed = { 0 }, - Temperature::pTerm_bed, - Temperature::iTerm_bed, - Temperature::dTerm_bed, - Temperature::pid_error_bed; -#else - millis_t Temperature::next_bed_check_ms; -#endif - -uint16_t Temperature::raw_temp_value[MAX_EXTRUDERS] = { 0 }, - Temperature::raw_temp_chamber_value = 0, - Temperature::raw_temp_bed_value = 0; +uint16_t Temperature::raw_temp_value[MAX_EXTRUDERS] = { 0 }; // Init min and max temp with extreme values to prevent false errors during startup int16_t Temperature::minttemp_raw[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP, HEATER_3_RAW_LO_TEMP, HEATER_4_RAW_LO_TEMP), @@ -198,14 +205,6 @@ int16_t Temperature::minttemp_raw[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_RAW_LO_TE millis_t Temperature::preheat_end_time[HOTENDS] = { 0 }; #endif -#ifdef BED_MINTEMP - int16_t Temperature::bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; -#endif - -#ifdef BED_MAXTEMP - int16_t Temperature::bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP; -#endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) int8_t Temperature::meas_shift_index; // Index of a delayed sample in buffer #endif @@ -214,8 +213,7 @@ int16_t Temperature::minttemp_raw[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_RAW_LO_TE millis_t Temperature::next_auto_fan_check_ms = 0; #endif -uint8_t Temperature::soft_pwm_amount[HOTENDS], - Temperature::soft_pwm_amount_bed; +uint8_t Temperature::soft_pwm_amount[HOTENDS]; #if ENABLED(FAN_SOFT_PWM) uint8_t Temperature::soft_pwm_amount_fan[FAN_COUNT], @@ -233,10 +231,6 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], #if HEATER_IDLE_HANDLER millis_t Temperature::heater_idle_timeout_ms[HOTENDS] = { 0 }; bool Temperature::heater_idle_timeout_exceeded[HOTENDS] = { false }; - #if HAS_TEMP_BED - millis_t Temperature::bed_idle_timeout_ms = 0; - bool Temperature::bed_idle_timeout_exceeded = false; - #endif #endif #if ENABLED(ADC_KEYPAD) @@ -546,8 +540,13 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], Temperature::Temperature() { } -int Temperature::getHeaterPower(int heater) { - return heater < 0 ? soft_pwm_amount_bed : soft_pwm_amount[heater]; +int Temperature::getHeaterPower(const int heater) { + return ( + #if HAS_HEATED_BED + heater < 0 ? soft_pwm_amount_bed : + #endif + soft_pwm_amount[heater] + ); } #if HAS_AUTO_FAN @@ -618,6 +617,7 @@ void Temperature::_temp_error(const int8_t e, const char * const serial_msg, con void Temperature::max_temp_error(const int8_t e) { _temp_error(e, PSTR(MSG_T_MAXTEMP), TEMP_ERR_PSTR(MSG_ERR_MAXTEMP, e)); } + void Temperature::min_temp_error(const int8_t e) { _temp_error(e, PSTR(MSG_T_MINTEMP), TEMP_ERR_PSTR(MSG_ERR_MINTEMP, e)); } @@ -857,29 +857,29 @@ void Temperature::manage_heater() { } #endif // FILAMENT_WIDTH_SENSOR - #if WATCH_THE_BED - // Make sure temperature is increasing - if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) { // Time to check the bed? - if (degBed() < watch_target_bed_temp) // Failed to increase enough? - _temp_error(-1, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, -1)); - else // Start again if the target is still far off - start_watching_bed(); - } - #endif // WATCH_THE_BED + #if HAS_HEATED_BED - #if DISABLED(PIDTEMPBED) - if (PENDING(ms, next_bed_check_ms) + #if WATCH_THE_BED + // Make sure temperature is increasing + if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) { // Time to check the bed? + if (degBed() < watch_target_bed_temp) // Failed to increase enough? + _temp_error(-1, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, -1)); + else // Start again if the target is still far off + start_watching_bed(); + } + #endif // WATCH_THE_BED + + #if DISABLED(PIDTEMPBED) + if (PENDING(ms, next_bed_check_ms) + #if ENABLED(PROBING_HEATERS_OFF) && ENABLED(BED_LIMIT_SWITCHING) + && paused == last_pause_state + #endif + ) return; + next_bed_check_ms = ms + BED_CHECK_INTERVAL; #if ENABLED(PROBING_HEATERS_OFF) && ENABLED(BED_LIMIT_SWITCHING) - && paused == last_pause_state + last_pause_state = paused; #endif - ) return; - next_bed_check_ms = ms + BED_CHECK_INTERVAL; - #if ENABLED(PROBING_HEATERS_OFF) && ENABLED(BED_LIMIT_SWITCHING) - last_pause_state = paused; #endif - #endif - - #if HAS_TEMP_BED #if HEATER_IDLE_HANDLER if (!bed_idle_timeout_exceeded && bed_idle_timeout_ms && ELAPSED(ms, bed_idle_timeout_ms)) @@ -920,7 +920,7 @@ void Temperature::manage_heater() { } #endif } - #endif // HAS_TEMP_BED + #endif // HAS_HEATED_BED } #define PGM_RD_W(x) (short)pgm_read_word(&x) @@ -968,7 +968,7 @@ float Temperature::analog2temp(const int raw, const uint8_t e) { return ((raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN)) + TEMP_SENSOR_AD595_OFFSET; } -#if HAS_TEMP_BED +#if HAS_HEATED_BED // Derived from RepRap FiveD extruder::getTemperature() // For bed temperature measurement. float Temperature::analog2tempBed(const int raw) { @@ -1002,7 +1002,7 @@ float Temperature::analog2temp(const int raw, const uint8_t e) { #endif } -#endif // HAS_TEMP_BED +#endif // HAS_HEATED_BED #if HAS_TEMP_CHAMBER // Derived from RepRap FiveD extruder::getTemperature() @@ -1052,7 +1052,7 @@ void Temperature::updateTemperaturesFromRawValues() { #endif HOTEND_LOOP() current_temperature[e] = Temperature::analog2temp(current_temperature_raw[e], e); - #if HAS_TEMP_BED + #if HAS_HEATED_BED current_temperature_bed = Temperature::analog2tempBed(current_temperature_bed_raw); #endif #if HAS_TEMP_CHAMBER @@ -1149,7 +1149,7 @@ void Temperature::init() { #if HAS_HEATER_4 OUT_WRITE(HEATER_3_PIN, HEATER_4_INVERTING); #endif - #if HAS_HEATER_BED + #if HAS_HEATED_BED OUT_WRITE(HEATER_BED_PIN, HEATER_BED_INVERTING); #endif @@ -1204,7 +1204,7 @@ void Temperature::init() { #if HAS_TEMP_4 HAL_ANALOG_SELECT(TEMP_4_PIN); #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED HAL_ANALOG_SELECT(TEMP_BED_PIN); #endif #if HAS_TEMP_CHAMBER @@ -1345,7 +1345,7 @@ void Temperature::init() { #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_TEMP_BED + #if HAS_HEATED_BED #ifdef BED_MINTEMP while (analog2tempBed(bed_minttemp_raw) < BED_MINTEMP) { #if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP @@ -1364,7 +1364,7 @@ void Temperature::init() { #endif } #endif // BED_MAXTEMP - #endif // HAS_TEMP_BED + #endif // HAS_HEATED_BED #if ENABLED(PROBING_HEATERS_OFF) paused = false; @@ -1483,7 +1483,7 @@ void Temperature::init() { #if HEATER_IDLE_HANDLER // If the heater idle timeout expires, restart if ((heater_id >= 0 && heater_idle_timeout_exceeded[heater_id]) - #if HAS_TEMP_BED + #if HAS_HEATED_BED || (heater_id < 0 && bed_idle_timeout_exceeded) #endif ) { @@ -1529,7 +1529,10 @@ void Temperature::disable_all_heaters() { #endif HOTEND_LOOP() setTargetHotend(0, e); - setTargetBed(0); + + #if HAS_HEATED_BED + setTargetBed(0); + #endif // Unpause and reset everything #if ENABLED(PROBING_HEATERS_OFF) @@ -1561,10 +1564,10 @@ void Temperature::disable_all_heaters() { #endif // HOTENDS > 1 #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED target_temperature_bed = 0; soft_pwm_amount_bed = 0; - #if HAS_HEATER_BED + #if HAS_HEATED_BED WRITE_HEATER_BED(LOW); #endif #endif @@ -1577,13 +1580,13 @@ void Temperature::disable_all_heaters() { paused = p; if (p) { HOTEND_LOOP() start_heater_idle_timer(e, 0); // timeout immediately - #if HAS_TEMP_BED + #if HAS_HEATED_BED start_bed_idle_timer(0); // timeout immediately #endif } else { HOTEND_LOOP() reset_heater_idle_timer(e); - #if HAS_TEMP_BED + #if HAS_HEATED_BED reset_bed_idle_timer(); #endif } @@ -1687,8 +1690,13 @@ void Temperature::set_current_temp_raw() { #endif #endif #endif - current_temperature_bed_raw = raw_temp_bed_value; - current_temperature_chamber_raw = raw_temp_chamber_value; + + #if HAS_HEATED_BED + current_temperature_bed_raw = raw_temp_bed_value; + #endif + #if HAS_TEMP_CHAMBER + current_temperature_chamber_raw = raw_temp_chamber_value; + #endif temp_meas_ready = true; } @@ -1759,7 +1767,7 @@ void Temperature::isr() { #endif // HOTENDS > 3 #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATER_BED + #if HAS_HEATED_BED ISR_STATICS(BED); #endif @@ -1800,7 +1808,7 @@ void Temperature::isr() { #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATER_BED + #if HAS_HEATED_BED soft_pwm_count_BED = (soft_pwm_count_BED & pwm_mask) + soft_pwm_amount_bed; WRITE_HEATER_BED(soft_pwm_count_BED > pwm_mask ? HIGH : LOW); #endif @@ -1835,7 +1843,7 @@ void Temperature::isr() { #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATER_BED + #if HAS_HEATED_BED if (soft_pwm_count_BED <= pwm_count_tmp) WRITE_HEATER_BED(LOW); #endif @@ -1916,7 +1924,7 @@ void Temperature::isr() { #endif // HOTENDS > 3 #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATER_BED + #if HAS_HEATED_BED _SLOW_PWM_ROUTINE(BED, soft_pwm_amount_bed); // BED #endif @@ -1935,7 +1943,7 @@ void Temperature::isr() { #endif // HOTENDS > 3 #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATER_BED + #if HAS_HEATED_BED PWM_OFF_ROUTINE(BED); // BED #endif @@ -1995,7 +2003,7 @@ void Temperature::isr() { #endif // HOTENDS > 3 #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATER_BED + #if HAS_HEATED_BED if (state_timer_heater_BED > 0) state_timer_heater_BED--; #endif } // ((pwm_count >> SOFT_PWM_SCALE) & 0x3F) == 0 @@ -2044,7 +2052,7 @@ void Temperature::isr() { break; #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED case PrepareTemp_BED: HAL_START_ADC(TEMP_BED_PIN); break; @@ -2147,8 +2155,14 @@ void Temperature::isr() { #endif ZERO(raw_temp_value); - raw_temp_bed_value = 0; - raw_temp_chamber_value = 0; + + #if HAS_HEATED_BED + raw_temp_bed_value = 0; + #endif + + #if HAS_TEMP_CHAMBER + raw_temp_chamber_value = 0; + #endif #define TEMPDIR(N) ((HEATER_##N##_RAW_LO_TEMP) > (HEATER_##N##_RAW_HI_TEMP) ? -1 : 1) @@ -2194,7 +2208,7 @@ void Temperature::isr() { #endif } - #if HAS_TEMP_BED + #if HAS_HEATED_BED #if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP #define GEBED <= #else @@ -2262,15 +2276,15 @@ void Temperature::isr() { #endif , const int8_t e=-3 ) { - #if !(HAS_TEMP_BED && HAS_TEMP_HOTEND && HAS_TEMP_CHAMBER) && HOTENDS <= 1 + #if !(HAS_HEATED_BED && HAS_TEMP_HOTEND && HAS_TEMP_CHAMBER) && HOTENDS <= 1 UNUSED(e); #endif SERIAL_PROTOCOLCHAR_P(port, ' '); SERIAL_PROTOCOLCHAR_P(port, - #if HAS_TEMP_CHAMBER && HAS_TEMP_BED && HAS_TEMP_HOTEND + #if HAS_TEMP_CHAMBER && HAS_HEATED_BED && HAS_TEMP_HOTEND e == -2 ? 'C' : e == -1 ? 'B' : 'T' - #elif HAS_TEMP_BED && HAS_TEMP_HOTEND + #elif HAS_HEATED_BED && HAS_TEMP_HOTEND e == -1 ? 'B' : 'T' #elif HAS_TEMP_HOTEND 'T' @@ -2306,7 +2320,7 @@ void Temperature::isr() { #endif ); #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED print_heater_state(degBed(), degTargetBed() #if ENABLED(SHOW_TEMP_ADC_VALUES) , rawBedTemp() @@ -2338,7 +2352,7 @@ void Temperature::isr() { #endif SERIAL_PROTOCOLPGM_P(port, " @:"); SERIAL_PROTOCOL_P(port, getHeaterPower(gcode.target_extruder)); - #if HAS_TEMP_BED + #if HAS_HEATED_BED SERIAL_PROTOCOLPGM_P(port, " B@:"); SERIAL_PROTOCOL_P(port, getHeaterPower(-1)); #endif diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 44e12507fc..2abac6f116 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -70,7 +70,7 @@ enum ADCSensorState : char { PrepareTemp_4, MeasureTemp_4, #endif - #if HAS_TEMP_BED + #if HAS_HEATED_BED PrepareTemp_BED, MeasureTemp_BED, #endif @@ -108,35 +108,21 @@ enum ADCSensorState : char { #define unscalePID_d(d) ( (d) * PID_dT ) #endif -#if !HAS_HEATER_BED - constexpr int16_t target_temperature_bed = 0; -#endif - class Temperature { public: - static float current_temperature[HOTENDS], - current_temperature_chamber, - current_temperature_bed; + static volatile bool in_temp_isr; + + static float current_temperature[HOTENDS]; static int16_t current_temperature_raw[HOTENDS], - target_temperature[HOTENDS], - current_temperature_chamber_raw, - current_temperature_bed_raw; + target_temperature[HOTENDS]; + static uint8_t soft_pwm_amount[HOTENDS]; #if ENABLED(AUTO_POWER_E_FANS) static int16_t autofan_speed[HOTENDS]; #endif - #if HAS_HEATER_BED - static int16_t target_temperature_bed; - #endif - - static volatile bool in_temp_isr; - - static uint8_t soft_pwm_amount[HOTENDS], - soft_pwm_amount_bed; - #if ENABLED(FAN_SOFT_PWM) static uint8_t soft_pwm_amount_fan[FAN_COUNT], soft_pwm_count_fan[FAN_COUNT]; @@ -164,24 +150,24 @@ class Temperature { #endif - #if ENABLED(PIDTEMPBED) - static float bedKp, bedKi, bedKd; + #if HAS_HEATED_BED + static float current_temperature_bed; + static int16_t current_temperature_bed_raw, target_temperature_bed; + static uint8_t soft_pwm_amount_bed; + #if ENABLED(PIDTEMPBED) + static float bedKp, bedKi, bedKd; + #endif + #endif + + #if HAS_TEMP_CHAMBER + static float current_temperature_chamber; + static int16_t current_temperature_chamber_raw; #endif #if ENABLED(BABYSTEPPING) static volatile int babystepsTodo[3]; #endif - #if WATCH_HOTENDS - static uint16_t watch_target_temp[HOTENDS]; - static millis_t watch_heater_next_ms[HOTENDS]; - #endif - - #if WATCH_THE_BED - static uint16_t watch_target_bed_temp; - static millis_t watch_bed_next_ms; - #endif - #if ENABLED(PREVENT_COLD_EXTRUSION) static bool allow_cold_extrude; static int16_t extrude_min_temp; @@ -209,8 +195,15 @@ class Temperature { private: #if EARLY_WATCHDOG - // If temperature controller is running - static bool inited; + static bool inited; // If temperature controller is running + #endif + + static volatile bool temp_meas_ready; + static uint16_t raw_temp_value[MAX_EXTRUDERS]; + + #if WATCH_HOTENDS + static uint16_t watch_target_temp[HOTENDS]; + static millis_t watch_heater_next_ms[HOTENDS]; #endif #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) @@ -218,8 +211,6 @@ class Temperature { static float redundant_temperature; #endif - static volatile bool temp_meas_ready; - #if ENABLED(PIDTEMP) static float temp_iState[HOTENDS], temp_dState[HOTENDS], @@ -238,27 +229,45 @@ class Temperature { static bool pid_reset[HOTENDS]; #endif - #if ENABLED(PIDTEMPBED) - static float temp_iState_bed, - temp_dState_bed, - pTerm_bed, - iTerm_bed, - dTerm_bed, - pid_error_bed; - #else - static millis_t next_bed_check_ms; - #endif - - static uint16_t raw_temp_value[MAX_EXTRUDERS], - raw_temp_chamber_value, - raw_temp_bed_value; - // Init min and max temp with extreme values to prevent false errors during startup static int16_t minttemp_raw[HOTENDS], maxttemp_raw[HOTENDS], minttemp[HOTENDS], maxttemp[HOTENDS]; + #if HAS_HEATED_BED + static uint16_t raw_temp_bed_value; + #if WATCH_THE_BED + static uint16_t watch_target_bed_temp; + static millis_t watch_bed_next_ms; + #endif + #if ENABLED(PIDTEMPBED) + static float temp_iState_bed, + temp_dState_bed, + pTerm_bed, + iTerm_bed, + dTerm_bed, + pid_error_bed; + #else + static millis_t next_bed_check_ms; + #endif + #if HEATER_IDLE_HANDLER + static millis_t bed_idle_timeout_ms; + static bool bed_idle_timeout_exceeded; + #endif + #ifdef BED_MINTEMP + static int16_t bed_minttemp_raw; + #endif + #ifdef BED_MAXTEMP + static int16_t bed_maxttemp_raw; + #endif + #endif + + #if HAS_TEMP_CHAMBER + static uint16_t raw_temp_chamber_value; + #endif + + #ifdef MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED static uint8_t consecutive_low_temperature_error[HOTENDS]; #endif @@ -267,14 +276,6 @@ class Temperature { static millis_t preheat_end_time[HOTENDS]; #endif - #ifdef BED_MINTEMP - static int16_t bed_minttemp_raw; - #endif - - #ifdef BED_MAXTEMP - static int16_t bed_maxttemp_raw; - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) static int8_t meas_shift_index; // Index of a delayed sample in buffer #endif @@ -294,10 +295,6 @@ class Temperature { #if HEATER_IDLE_HANDLER static millis_t heater_idle_timeout_ms[HOTENDS]; static bool heater_idle_timeout_exceeded[HOTENDS]; - #if HAS_TEMP_BED - static millis_t bed_idle_timeout_ms; - static bool bed_idle_timeout_exceeded; - #endif #endif public: @@ -319,7 +316,7 @@ class Temperature { */ static float analog2temp(const int raw, const uint8_t e); - #if HAS_TEMP_BED + #if HAS_HEATED_BED static float analog2tempBed(const int raw); #endif #if HAS_TEMP_CHAMBER @@ -378,8 +375,6 @@ class Temperature { #endif return current_temperature[HOTEND_INDEX]; } - FORCE_INLINE static float degBed() { return current_temperature_bed; } - FORCE_INLINE static float degChamber() { return current_temperature_chamber; } #if ENABLED(SHOW_TEMP_ADC_VALUES) FORCE_INLINE static int16_t rawHotendTemp(const uint8_t e) { @@ -388,8 +383,6 @@ class Temperature { #endif return current_temperature_raw[HOTEND_INDEX]; } - FORCE_INLINE static int16_t rawBedTemp() { return current_temperature_bed_raw; } - FORCE_INLINE static int16_t rawChamberTemp() { return current_temperature_chamber_raw; } #endif FORCE_INLINE static int16_t degTargetHotend(const uint8_t e) { @@ -399,16 +392,10 @@ class Temperature { return target_temperature[HOTEND_INDEX]; } - FORCE_INLINE static int16_t degTargetBed() { return target_temperature_bed; } - #if WATCH_HOTENDS static void start_watching_heater(const uint8_t e = 0); #endif - #if WATCH_THE_BED - static void start_watching_bed(); - #endif - static void setTargetHotend(const int16_t celsius, const uint8_t e) { #if HOTENDS == 1 UNUSED(e); @@ -428,8 +415,30 @@ class Temperature { #endif } - static void setTargetBed(const int16_t celsius) { - #if HAS_HEATER_BED + FORCE_INLINE static bool isHeatingHotend(const uint8_t e) { + #if HOTENDS == 1 + UNUSED(e); + #endif + return target_temperature[HOTEND_INDEX] > current_temperature[HOTEND_INDEX]; + } + + FORCE_INLINE static bool isCoolingHotend(const uint8_t e) { + #if HOTENDS == 1 + UNUSED(e); + #endif + return target_temperature[HOTEND_INDEX] < current_temperature[HOTEND_INDEX]; + } + + #if HAS_HEATED_BED + #if ENABLED(SHOW_TEMP_ADC_VALUES) + FORCE_INLINE static int16_t rawBedTemp() { return current_temperature_bed_raw; } + #endif + FORCE_INLINE static float degBed() { return current_temperature_bed; } + FORCE_INLINE static int16_t degTargetBed() { return target_temperature_bed; } + FORCE_INLINE static bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; } + FORCE_INLINE static bool isCoolingBed() { return target_temperature_bed < current_temperature_bed; } + + static void setTargetBed(const int16_t celsius) { #if ENABLED(AUTO_POWER_CONTROL) powerManager.power_on(); #endif @@ -443,24 +452,19 @@ class Temperature { #if WATCH_THE_BED start_watching_bed(); #endif - #endif - } + } - FORCE_INLINE static bool isHeatingHotend(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); + #if WATCH_THE_BED + static void start_watching_bed(); #endif - return target_temperature[HOTEND_INDEX] > current_temperature[HOTEND_INDEX]; - } - FORCE_INLINE static bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; } + #endif - FORCE_INLINE static bool isCoolingHotend(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); + #if HAS_TEMP_CHAMBER + #if ENABLED(SHOW_TEMP_ADC_VALUES) + FORCE_INLINE static int16_t rawChamberTemp() { return current_temperature_chamber_raw; } #endif - return target_temperature[HOTEND_INDEX] < current_temperature[HOTEND_INDEX]; - } - FORCE_INLINE static bool isCoolingBed() { return target_temperature_bed < current_temperature_bed; } + FORCE_INLINE static float degChamber() { return current_temperature_chamber; } + #endif FORCE_INLINE static bool wait_for_heating(const uint8_t e) { return degTargetHotend(e) > TEMP_HYSTERESIS && abs(degHotend(e) - degTargetHotend(e)) > TEMP_HYSTERESIS; @@ -469,7 +473,7 @@ class Temperature { /** * The software PWM power for a heater */ - static int getHeaterPower(int heater); + static int getHeaterPower(const int heater); /** * Switch off all heaters, set all target temperatures to 0 @@ -562,7 +566,7 @@ class Temperature { return heater_idle_timeout_exceeded[HOTEND_INDEX]; } - #if HAS_TEMP_BED + #if HAS_HEATED_BED static void start_bed_idle_timer(const millis_t timeout_ms) { bed_idle_timeout_ms = millis() + timeout_ms; bed_idle_timeout_exceeded = false; @@ -627,7 +631,7 @@ class Temperature { #if ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED - typedef enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway } TRstate; + enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway }; static void thermal_runaway_protection(TRState * const state, millis_t * const timer, const float ¤t, const float &target, const int8_t heater_id, const uint16_t period_seconds, const uint16_t hysteresis_degc);