Cooler (for Laser) - M143, M193 (#21255)
This commit is contained in:
		
				
					committed by
					
						 Scott Lahteine
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							95136abc47
						
					
				
				
					commit
					db4d9b7fcf
				
			| @@ -78,6 +78,16 @@ | ||||
|   #define STATUS_CUTTER_WIDTH 0 | ||||
| #endif | ||||
|  | ||||
| // | ||||
| // Laser Cooler | ||||
| // | ||||
| #if !STATUS_COOLER_WIDTH && HAS_COOLER | ||||
|   #include "status/cooler.h" | ||||
| #endif | ||||
| #ifndef STATUS_COOLER_WIDTH | ||||
|   #define STATUS_COOLER_WIDTH 0 | ||||
| #endif | ||||
|  | ||||
| // | ||||
| // Bed | ||||
| // | ||||
| @@ -498,6 +508,47 @@ | ||||
|  | ||||
| #endif | ||||
|  | ||||
| // | ||||
| // Cooler Bitmap Properties | ||||
| // | ||||
| #ifndef STATUS_COOLER_BYTEWIDTH | ||||
|   #define STATUS_COOLER_BYTEWIDTH BW(STATUS_COOLER_WIDTH) | ||||
| #endif | ||||
| #if STATUS_COOLER_WIDTH | ||||
|  | ||||
|   #ifndef STATUS_COOLER_X | ||||
|     #define STATUS_COOLER_X (LCD_PIXEL_WIDTH - (STATUS_COOLER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_CUTTER_BYTEWIDTH) * 8) | ||||
|   #endif | ||||
|  | ||||
|   #ifndef STATUS_COOLER_HEIGHT | ||||
|     #ifdef STATUS_COOLER_ANIM | ||||
|       #define STATUS_COOLER_HEIGHT(S) ((S) ? sizeof(status_cooler_on_bmp) / (STATUS_COOLER_BYTEWIDTH) : sizeof(status_cooler_bmp) / (STATUS_COOLER_BYTEWIDTH)) | ||||
|     #else | ||||
|       #define STATUS_COOLER_HEIGHT(S) (sizeof(status_cooler_bmp) / (STATUS_COOLER_BYTEWIDTH)) | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   #ifndef STATUS_COOLER_Y | ||||
|     #define STATUS_COOLER_Y(S) (18 - STATUS_COOLER_HEIGHT(S)) | ||||
|   #endif | ||||
|  | ||||
|   #ifndef STATUS_COOLER_TEXT_X | ||||
|     #define STATUS_COOLER_TEXT_X (STATUS_COOLER_X + 8) | ||||
|   #endif | ||||
|  | ||||
|   static_assert( | ||||
|     sizeof(status_cooler_bmp) == (STATUS_COOLER_BYTEWIDTH) * (STATUS_COOLER_HEIGHT(0)), | ||||
|     "Status cooler bitmap (status_cooler_bmp) dimensions don't match data." | ||||
|   ); | ||||
|   #ifdef STATUS_COOLER_ANIM | ||||
|     static_assert( | ||||
|       sizeof(status_cooler_on_bmp) == (STATUS_COOLER_BYTEWIDTH) * (STATUS_COOLER_HEIGHT(1)), | ||||
|       "Status cooler bitmap (status_cooler_on_bmp) dimensions don't match data." | ||||
|     ); | ||||
|   #endif | ||||
|  | ||||
| #endif | ||||
|  | ||||
| // | ||||
| // Bed Bitmap Properties | ||||
| // | ||||
| @@ -585,6 +636,10 @@ | ||||
| #if HAS_CUTTER && !DO_DRAW_BED | ||||
|   #define DO_DRAW_CUTTER 1 | ||||
| #endif | ||||
| #if HAS_COOLER | ||||
|   #define DO_DRAW_COOLER 1 | ||||
| #endif | ||||
|  | ||||
| #if HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4 | ||||
|   #define DO_DRAW_CHAMBER 1 | ||||
| #endif | ||||
| @@ -603,6 +658,9 @@ | ||||
| #if BOTH(DO_DRAW_CUTTER, STATUS_CUTTER_ANIM) | ||||
|   #define ANIM_CUTTER 1 | ||||
| #endif | ||||
| #if BOTH(DO_DRAW_COOLER, STATUS_COOLER_ANIM) | ||||
|   #define ANIM_COOLER 1 | ||||
| #endif | ||||
| #if ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER || ANIM_CUTTER | ||||
|   #define ANIM_HBCC 1 | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										70
									
								
								Marlin/src/lcd/dogm/status/cooler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								Marlin/src/lcd/dogm/status/cooler.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| /** | ||||
|  * Marlin 3D Printer Firmware | ||||
|  * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||||
|  * | ||||
|  * Based on Sprinter and grbl. | ||||
|  * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  */ | ||||
| #pragma once | ||||
|  | ||||
| // | ||||
| // lcd/dogm/status/cooler.h - Status Screen Laser Cooler bitmaps | ||||
| // | ||||
|  | ||||
| #define STATUS_COOLER_WIDTH 16 | ||||
|  | ||||
| #ifdef STATUS_COOLER_ANIM | ||||
|  | ||||
|   const unsigned char status_cooler_on_bmp[] PROGMEM = { | ||||
|     B00010000,B00001000, | ||||
|     B00010010,B01001001, | ||||
|     B01010100,B00101010, | ||||
|     B00111000,B00011100, | ||||
|     B11111110,B11111111, | ||||
|     B00111000,B00011100, | ||||
|     B01010100,B00101010, | ||||
|     B10010000,B10001001, | ||||
|     B00010000,B10000000, | ||||
|     B00000100,B10010000, | ||||
|     B00000010,B10100000, | ||||
|     B00000001,B11000000, | ||||
|     B00011111,B11111100, | ||||
|     B00000001,B11000000, | ||||
|     B00000010,B10100000, | ||||
|     B00000100,B10010000 | ||||
|   }; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| const unsigned char status_cooler_bmp[] PROGMEM = { | ||||
|   B00010000,B00001000, | ||||
|   B00010010,B01001001, | ||||
|   B01010100,B00101010, | ||||
|   B00101000,B00010100, | ||||
|   B11000111,B01100011, | ||||
|   B00101000,B00010100, | ||||
|   B01010100,B00101010, | ||||
|   B10010000,B10001001, | ||||
|   B00010000,B10000000, | ||||
|   B00000100,B10010000, | ||||
|   B00000010,B10100000, | ||||
|   B00000001,B01000000, | ||||
|   B00011110,B00111100, | ||||
|   B00000001,B01000000, | ||||
|   B00000010,B10100000, | ||||
|   B00000100,B10010000 | ||||
| }; | ||||
| @@ -86,6 +86,7 @@ | ||||
|     HEATBIT_HOTEND, | ||||
|     HEATBIT_BED = HOTENDS, | ||||
|     HEATBIT_CHAMBER, | ||||
|     HEATBIT_COOLER, | ||||
|     HEATBIT_CUTTER | ||||
|   }; | ||||
|   IF<(HEATBIT_CUTTER > 7), uint16_t, uint8_t>::type heat_bits; | ||||
| @@ -111,6 +112,11 @@ | ||||
| #else | ||||
|   #define CUTTER_ALT() false | ||||
| #endif | ||||
| #if ANIM_COOLER | ||||
|   #define COOLER_ALT(N) TEST(heat_bits, HEATBIT_COOLER) | ||||
| #else | ||||
|   #define COOLER_ALT() false | ||||
| #endif | ||||
|  | ||||
| #if DO_DRAW_HOTENDS | ||||
|   #define MAX_HOTEND_DRAW _MIN(HOTENDS, ((LCD_PIXEL_WIDTH - (STATUS_LOGO_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8) / (STATUS_HEATERS_XSPACE))) | ||||
| @@ -361,18 +367,22 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t tx, cons | ||||
| #endif // DO_DRAW_BED | ||||
|  | ||||
| #if DO_DRAW_CHAMBER | ||||
|  | ||||
|   FORCE_INLINE void _draw_chamber_status() { | ||||
|     #if HAS_HEATED_CHAMBER | ||||
|       if (PAGE_UNDER(7)) | ||||
|         _draw_centered_temp(thermalManager.degTargetChamber() + 0.5f, STATUS_CHAMBER_TEXT_X, 7); | ||||
|     #endif | ||||
|  | ||||
|     if (PAGE_CONTAINS(28 - INFO_FONT_ASCENT, 28 - 1)) | ||||
|       _draw_centered_temp(thermalManager.degChamber() + 0.5f, STATUS_CHAMBER_TEXT_X, 28); | ||||
|   } | ||||
| #endif | ||||
|  | ||||
| #endif // DO_DRAW_CHAMBER | ||||
| #if DO_DRAW_COOLER | ||||
|   FORCE_INLINE void _draw_cooler_status() { | ||||
|     if (PAGE_CONTAINS(28 - INFO_FONT_ASCENT, 28 - 1)) | ||||
|       _draw_centered_temp(thermalManager.degCooler(), STATUS_COOLER_TEXT_X, 28); | ||||
|   } | ||||
| #endif | ||||
|  | ||||
| // | ||||
| // Before homing, blink '123' <-> '???'. | ||||
| @@ -447,6 +457,9 @@ void MarlinUI::draw_status_screen() { | ||||
|       #if DO_DRAW_CHAMBER && HAS_HEATED_CHAMBER | ||||
|         if (thermalManager.isHeatingChamber()) SBI(new_bits, HEATBIT_CHAMBER); | ||||
|       #endif | ||||
|       #if DO_DRAW_COOLER && HAS_COOLER | ||||
|         if (thermalManager.isLaserCooling()) SBI(new_bits, HEATBIT_COOLER); | ||||
|       #endif | ||||
|       if (TERN0(ANIM_CUTTER, cutter.enabled())) SBI(new_bits, HEATBIT_CUTTER); | ||||
|       heat_bits = new_bits; | ||||
|     #endif | ||||
| @@ -631,12 +644,28 @@ void MarlinUI::draw_status_screen() { | ||||
|       } | ||||
|     #endif | ||||
|  | ||||
|     // Laser Cooler | ||||
|     #if DO_DRAW_COOLER | ||||
|       #if ANIM_COOLER | ||||
|         #define COOLER_BITMAP(S) ((S) ? status_cooler_bmp : status_cooler_on_bmp) | ||||
|       #else | ||||
|         #define COOLER_BITMAP(S) status_cooler_bmp | ||||
|       #endif | ||||
|       const uint8_t coolery = STATUS_COOLER_Y(COOLER_ALT()), | ||||
|                     coolerh = STATUS_COOLER_HEIGHT(COOLER_ALT()); | ||||
|       if (PAGE_CONTAINS(coolery, coolery + coolerh - 1)) | ||||
|         u8g.drawBitmapP(STATUS_COOLER_X, coolery, STATUS_COOLER_BYTEWIDTH, coolerh, COOLER_BITMAP(COOLER_ALT())); | ||||
|     #endif | ||||
|  | ||||
|     // Heated Bed | ||||
|     TERN_(DO_DRAW_BED, _draw_bed_status(blink)); | ||||
|  | ||||
|     // Heated Chamber | ||||
|     TERN_(DO_DRAW_CHAMBER, _draw_chamber_status()); | ||||
|  | ||||
|     // Cooler | ||||
|     TERN_(DO_DRAW_COOLER, _draw_cooler_status()); | ||||
|  | ||||
|     // Fan, if a bitmap was provided | ||||
|     #if DO_DRAW_FAN | ||||
|       if (PAGE_CONTAINS(STATUS_FAN_TEXT_Y - INFO_FONT_ASCENT, STATUS_FAN_TEXT_Y - 1)) { | ||||
|   | ||||
| @@ -176,6 +176,7 @@ namespace ExtUI { | ||||
|           case BED: thermalManager.reset_bed_idle_timer(); return; | ||||
|         #endif | ||||
|         TERN_(HAS_HEATED_CHAMBER, case CHAMBER: return); // Chamber has no idle timer | ||||
|         TERN_(HAS_COOLER, case COOLER: return); // Cooler has no idle timer | ||||
|         default: | ||||
|           TERN_(HAS_HOTEND, thermalManager.reset_hotend_idle_timer(heater - H0)); | ||||
|           break; | ||||
| @@ -904,22 +905,23 @@ namespace ExtUI { | ||||
|       value *= TOUCH_UI_LCD_TEMP_SCALING; | ||||
|     #endif | ||||
|     enableHeater(heater); | ||||
|     #if HAS_HEATED_CHAMBER | ||||
|       if (heater == CHAMBER) | ||||
|         thermalManager.setTargetChamber(LROUND(constrain(value, 0, CHAMBER_MAXTEMP - 10))); | ||||
|       else | ||||
|     #endif | ||||
|     #if HAS_HEATED_BED | ||||
|       if (heater == BED) | ||||
|         thermalManager.setTargetBed(LROUND(constrain(value, 0, BED_MAX_TARGET))); | ||||
|       else | ||||
|     #endif | ||||
|       { | ||||
|     switch (heater) { | ||||
|       #if HAS_HEATED_CHAMBER | ||||
|         case CHAMBER: thermalManager.setTargetChamber(LROUND(constrain(value, 0, CHAMBER_MAXTEMP - 10))); break; | ||||
|       #endif | ||||
|       #if HAS_COOLER | ||||
|         case COOLER: thermalManager.setTargetCooler(LROUND(constrain(value, 0, COOLER_MAXTEMP))); break; | ||||
|       #endif | ||||
|       #if HAS_HEATED_BED | ||||
|         case BED: thermalManager.setTargetBed(LROUND(constrain(value, 0, BED_MAX_TARGET))); break; | ||||
|       #endif | ||||
|       default: { | ||||
|         #if HAS_HOTEND | ||||
|           const int16_t e = heater - H0; | ||||
|           thermalManager.setTargetHotend(LROUND(constrain(value, 0, thermalManager.heater_maxtemp[e] - HOTEND_OVERSHOOT)), e); | ||||
|         #endif | ||||
|       } | ||||
|       } break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   void setTargetTemp_celsius(float value, const extruder_t extruder) { | ||||
|   | ||||
| @@ -55,7 +55,7 @@ namespace ExtUI { | ||||
|  | ||||
|   enum axis_t     : uint8_t { X, Y, Z, X2, Y2, Z2, Z3, Z4 }; | ||||
|   enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5, E6, E7 }; | ||||
|   enum heater_t   : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER }; | ||||
|   enum heater_t   : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER, COOLER }; | ||||
|   enum fan_t      : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 }; | ||||
|   enum result_t   : uint8_t { PID_BAD_EXTRUDER_NUM, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE }; | ||||
|  | ||||
|   | ||||
| @@ -276,6 +276,9 @@ namespace Language_en { | ||||
|   PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Nozzle Standby"); | ||||
|   PROGMEM Language_Str MSG_BED                             = _UxGT("Bed"); | ||||
|   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Enclosure"); | ||||
|   PROGMEM Language_Str MSG_COOLER                          = _UxGT("Laser Coolant"); | ||||
|   PROGMEM Language_Str MSG_COOLER_TOGGLE                   = _UxGT("Toggle Cooler"); | ||||
|   PROGMEM Language_Str MSG_LASER                           = _UxGT("Laser"); | ||||
|   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan Speed"); | ||||
|   PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan Speed ~"); | ||||
|   PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Stored Fan ~"); | ||||
| @@ -482,6 +485,8 @@ namespace Language_en { | ||||
|   PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("THERMAL RUNAWAY"); | ||||
|   PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("BED THERMAL RUNAWAY"); | ||||
|   PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER         = _UxGT("CHAMBER T. RUNAWAY"); | ||||
|   PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER          = _UxGT("Cooler Runaway"); | ||||
|   PROGMEM Language_Str MSG_COOLING_FAILED                  = _UxGT("Cooling Failed"); | ||||
|   PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: MAXTEMP"); | ||||
|   PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: MINTEMP"); | ||||
|   PROGMEM Language_Str MSG_HALTED                          = _UxGT("PRINTER HALTED"); | ||||
| @@ -497,6 +502,7 @@ namespace Language_en { | ||||
|   PROGMEM Language_Str MSG_PROBE_COOLING                   = _UxGT("Probe Cooling..."); | ||||
|   PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Chamber Heating..."); | ||||
|   PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Chamber Cooling..."); | ||||
|   PROGMEM Language_Str MSG_LASER_COOLING                   = _UxGT("Laser Cooling..."); | ||||
|   PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Calibration"); | ||||
|   PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrate X"); | ||||
|   PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrate Y"); | ||||
|   | ||||
| @@ -195,6 +195,16 @@ void menu_info_thermistors() { | ||||
|     STATIC_ITEM(TERN(WATCH_CHAMBER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_COOLER | ||||
|     #undef THERMISTOR_ID | ||||
|     #define THERMISTOR_ID TEMP_SENSOR_COOLER | ||||
|     #include "../thermistornames.h" | ||||
|     STATIC_ITEM_P(PSTR("COOL: " THERMISTOR_NAME), SS_INVERT); | ||||
|     PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(COOLER_MINTEMP), SS_LEFT); | ||||
|     PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(COOLER_MAXTEMP), SS_LEFT); | ||||
|     STATIC_ITEM(TERN(WATCH_COOLER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); | ||||
|   #endif | ||||
|  | ||||
|   END_SCREEN(); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -35,6 +35,10 @@ | ||||
|   #include "../../module/motion.h" | ||||
| #endif | ||||
|  | ||||
| #if HAS_COOLER | ||||
|   #include "../../feature/cooler.h" | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(SINGLENOZZLE_STANDBY_TEMP) | ||||
|   #include "../../module/tool_change.h" | ||||
| #endif | ||||
| @@ -68,6 +72,10 @@ void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t i | ||||
|   #if HAS_HEATED_BED | ||||
|     inline void _preheat_bed(const uint8_t m) { thermalManager.lcd_preheat(-1, -1, m); } | ||||
|   #endif | ||||
|   #if HAS_COOLER | ||||
|     inline void _precool_laser(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, -1); } | ||||
|     void do_precool_laser_m() { _precool_laser(editable.int8, thermalManager.temp_cooler.target); } | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_TEMP_HOTEND && HAS_HEATED_BED | ||||
|     inline void _preheat_both(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, m); } | ||||
| @@ -143,6 +151,10 @@ void menu_temperature() { | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_COOLER | ||||
|     if (thermalManager.temp_cooler.target == 0) thermalManager.temp_cooler.target = COOLER_DEFAULT_TEMP; | ||||
|   #endif | ||||
|  | ||||
|   START_MENU(); | ||||
|   BACK_ITEM(MSG_MAIN); | ||||
|  | ||||
| @@ -176,6 +188,15 @@ void menu_temperature() { | ||||
|     EDIT_ITEM_FAST(int3, MSG_CHAMBER, &thermalManager.temp_chamber.target, 0, CHAMBER_MAXTEMP - 10, thermalManager.start_watching_chamber); | ||||
|   #endif | ||||
|  | ||||
|   // | ||||
|   // Cooler: | ||||
|   // | ||||
|   #if HAS_COOLER | ||||
|     editable.state = cooler.is_enabled(); | ||||
|     EDIT_ITEM(bool, MSG_COOLER(TOGGLE), &cooler.state, []{ if (editable.state) cooler.disable(); else cooler.enable(); }); | ||||
|     EDIT_ITEM_FAST(int3, MSG_COOLER, &thermalManager.temp_cooler.target, COOLER_MINTEMP + 2, COOLER_MAXTEMP - 2, thermalManager.start_watching_cooler); | ||||
|   #endif | ||||
|  | ||||
|   // | ||||
|   // Fan Speed: | ||||
|   // | ||||
| @@ -232,7 +253,7 @@ void menu_temperature() { | ||||
|       editable.int8 = m; | ||||
|       #if HOTENDS > 1 || HAS_HEATED_BED | ||||
|         SUBMENU_S(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m); | ||||
|       #else | ||||
|       #elif HAS_HOTEND | ||||
|         ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m); | ||||
|       #endif | ||||
|     } | ||||
|   | ||||
| @@ -94,6 +94,9 @@ | ||||
| #ifndef COLOR_CHAMBER | ||||
|   #define COLOR_CHAMBER           COLOR_DARK_ORANGE | ||||
| #endif | ||||
| #ifndef COLOR_COOLER | ||||
|   #define COLOR_COOLER            COLOR_DARK_ORANGE | ||||
| #endif | ||||
| #ifndef COLOR_FAN | ||||
|   #define COLOR_FAN               COLOR_AQUA | ||||
| #endif | ||||
|   | ||||
| @@ -202,6 +202,12 @@ void Touch::touch(touch_control_t *control) { | ||||
|           MenuItem_int3::action((const char *)GET_TEXT_F(MSG_CHAMBER), &thermalManager.temp_chamber.target, 0, CHAMBER_MAXTEMP - 10, thermalManager.start_watching_chamber); | ||||
|         } | ||||
|       #endif | ||||
|       #if HAS_COOLER | ||||
|         else if (heater == H_COOLER) { | ||||
|           MenuItem_int3::action((const char *)GET_TEXT_F(MSG_COOLER), &thermalManager.temp_cooler.target, 0, COOLER_MAXTEMP - 8, thermalManager.start_watching_cooler); | ||||
|         } | ||||
|       #endif | ||||
|  | ||||
|       break; | ||||
|     case FAN: | ||||
|       ui.clear_lcd(); | ||||
|   | ||||
| @@ -136,6 +136,12 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) { | ||||
|       #endif | ||||
|     } | ||||
|   #endif | ||||
|   #if HAS_TEMP_COOLER | ||||
|     else if (Heater == H_COOLER) { | ||||
|       currentTemperature = thermalManager.degCooler(); | ||||
|       targetTemperature = TERN(HAS_COOLER, thermalManager.degTargetCooler(), ABSOLUTE_ZERO); | ||||
|     } | ||||
|   #endif | ||||
|   else return; | ||||
|  | ||||
|   TERN_(TOUCH_SCREEN, if (targetTemperature >= 0) touch.add_control(HEATER, x, y, 64, 100, Heater)); | ||||
| @@ -159,6 +165,13 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) { | ||||
|       image = targetTemperature > 0 ? imgChamberHeated : imgChamber; | ||||
|     } | ||||
|   #endif | ||||
|   #if HAS_TEMP_COOLER | ||||
|     else if (Heater == H_COOLER) { | ||||
|       if (currentTemperature <= 26) Color = COLOR_COLD; | ||||
|       if (currentTemperature > 26) Color = COLOR_RED; | ||||
|       image = targetTemperature > 26 ? imgCoolerHot : imgCooler; | ||||
|     } | ||||
|   #endif | ||||
|  | ||||
|   tft.add_image(0, 18, image, Color); | ||||
|  | ||||
|   | ||||
| @@ -136,6 +136,12 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) { | ||||
|       #endif | ||||
|     } | ||||
|   #endif | ||||
|   #if HAS_TEMP_COOLER | ||||
|     else if (Heater == H_COOLER) { | ||||
|       currentTemperature = thermalManager.degCooler(); | ||||
|       targetTemperature = TERN(HAS_COOLER, thermalManager.degTargetCooler(), ABSOLUTE_ZERO); | ||||
|     } | ||||
|   #endif | ||||
|   else return; | ||||
|  | ||||
|   TERN_(TOUCH_SCREEN, if (targetTemperature >= 0) touch.add_control(HEATER, x, y, 80, 120, Heater)); | ||||
|   | ||||
| @@ -62,6 +62,10 @@ void menu_item(const uint8_t row, bool sel = false); | ||||
|   #define ITEM_CHAMBER    2 | ||||
|   #define ITEM_FAN        3 | ||||
|   #define ITEMS_COUNT     4 | ||||
| #elif HAS_TEMP_COOLER | ||||
|   #define ITEM_COOLER     0 | ||||
|   #define ITEM_FAN        1 | ||||
|   #define ITEMS_COUNT     2 | ||||
| #elif HOTENDS > 1 | ||||
|   #define ITEM_E0         0 | ||||
|   #define ITEM_E1         1 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user