@@ -166,8 +166,14 @@ typedef struct {
166166
167167select_t select_page{0 }, select_file{0 }, select_print{0 }, select_prepare{0 }
168168 , select_control{0 }, select_axis{0 }, select_temp{0 }, select_motion{0 }, select_tune{0 }
169- , select_advset{0 }, select_PLA{0 }, select_ABS{0 }
170- , select_speed{0 }, select_acc{0 }, select_jerk{0 }, select_step{0 }, select_item{0 };
169+ , select_advset{0 }, select_speed{0 }, select_acc{0 }, select_jerk{0 }, select_step{0 }, select_item{0 };
170+
171+ #if HAS_PREHEAT
172+ select_t select_PLA{0 };
173+ #if PREHEAT_COUNT > 1
174+ select_t select_ABS{0 };
175+ #endif
176+ #endif
171177
172178uint8_t index_file = MROWS,
173179 index_prepare = MROWS,
@@ -492,8 +498,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
492498#define PREPARE_CASE_DISA 2
493499#define PREPARE_CASE_HOME 3
494500#define PREPARE_CASE_ZOFF (PREPARE_CASE_HOME + ENABLED(HAS_ZOFFSET_ITEM))
495- #define PREPARE_CASE_PLA (PREPARE_CASE_ZOFF + ENABLED(HAS_HOTEND ))
496- #define PREPARE_CASE_ABS (PREPARE_CASE_PLA + ENABLED(HAS_HOTEND ))
501+ #define PREPARE_CASE_PLA (PREPARE_CASE_ZOFF + ENABLED(HAS_PREHEAT ))
502+ #define PREPARE_CASE_ABS (PREPARE_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1 ) ))
497503#define PREPARE_CASE_COOL (PREPARE_CASE_ABS + EITHER(HAS_HOTEND, HAS_HEATED_BED))
498504#define PREPARE_CASE_LANG (PREPARE_CASE_COOL + 1 )
499505#define PREPARE_CASE_TOTAL PREPARE_CASE_LANG
@@ -517,8 +523,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
517523#define TEMP_CASE_TEMP (0 + ENABLED(HAS_HOTEND))
518524#define TEMP_CASE_BED (TEMP_CASE_TEMP + ENABLED(HAS_HEATED_BED))
519525#define TEMP_CASE_FAN (TEMP_CASE_BED + ENABLED(HAS_FAN))
520- #define TEMP_CASE_PLA (TEMP_CASE_FAN + ENABLED(HAS_HOTEND ))
521- #define TEMP_CASE_ABS (TEMP_CASE_PLA + ENABLED(HAS_HOTEND ))
526+ #define TEMP_CASE_PLA (TEMP_CASE_FAN + ENABLED(HAS_PREHEAT ))
527+ #define TEMP_CASE_ABS (TEMP_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1 ) ))
522528#define TEMP_CASE_TOTAL TEMP_CASE_ABS
523529
524530#define PREHEAT_CASE_TEMP (0 + ENABLED(HAS_HOTEND))
@@ -785,6 +791,8 @@ void Draw_Prepare_Menu() {
785791 #if PREHEAT_COUNT > 1
786792 if (PVISI (PREPARE_CASE_ABS)) Item_Prepare_ABS (PSCROL (PREPARE_CASE_ABS)); // Preheat ABS
787793 #endif
794+ #endif
795+ #if HAS_HOTEND || HAS_HEATED_BED
788796 if (PVISI (PREPARE_CASE_COOL)) Item_Prepare_Cool (PSCROL (PREPARE_CASE_COOL)); // Cooldown
789797 #endif
790798 if (PVISI (PREPARE_CASE_LANG)) Item_Prepare_Lang (PSCROL (PREPARE_CASE_LANG)); // Language CN/EN
@@ -2664,10 +2672,10 @@ void HMI_Prepare() {
26642672 // Draw "More" icon for sub-menus
26652673 if (index_prepare < 7 ) Draw_More_Icon (MROWS - index_prepare + 1 );
26662674
2667- #if HAS_HOTEND
2675+ #if PREHEAT_COUNT > 1
26682676 if (index_prepare == PREPARE_CASE_ABS) Item_Prepare_ABS (MROWS);
26692677 #endif
2670- #if HAS_PREHEAT
2678+ #if HAS_HOTEND || HAS_HEATED_BED
26712679 if (index_prepare == PREPARE_CASE_COOL) Item_Prepare_Cool (MROWS);
26722680 #endif
26732681 if (index_prepare == PREPARE_CASE_LANG) Item_Prepare_Lang (MROWS);
@@ -2743,23 +2751,21 @@ void HMI_Prepare() {
27432751 break ;
27442752 #endif
27452753 #if HAS_PREHEAT
2746- case PREPARE_CASE_PLA:
2747- TERN_ (HAS_HOTEND, thermalManager.setTargetHotend (ui.material_preset [0 ].hotend_temp , 0 ));
2748- TERN_ (HAS_HEATED_BED, thermalManager.setTargetBed (ui.material_preset [0 ].bed_temp ));
2749- TERN_ (HAS_FAN, thermalManager.set_fan_speed (0 , ui.material_preset [0 ].fan_speed ));
2750- break ;
2751- case PREPARE_CASE_ABS:
2752- TERN_ (HAS_HOTEND, thermalManager.setTargetHotend (ui.material_preset [1 ].hotend_temp , 0 ));
2753- TERN_ (HAS_HEATED_BED, thermalManager.setTargetBed (ui.material_preset [1 ].bed_temp ));
2754- TERN_ (HAS_FAN, thermalManager.set_fan_speed (0 , ui.material_preset [1 ].fan_speed ));
2755- break ;
2754+ case PREPARE_CASE_PLA: ui.preheat_all (0 ); break ;
2755+ #if PREHEAT_COUNT > 1
2756+ case PREPARE_CASE_ABS: ui.preheat_all (1 ); break ;
2757+ #endif
2758+ #endif
2759+
2760+ #if HAS_HOTEND || HAS_HEATED_BED
27562761 case PREPARE_CASE_COOL:
27572762 TERN_ (HAS_FAN, thermalManager.zero_fan_speeds ());
27582763 #if HAS_HOTEND || HAS_HEATED_BED
27592764 thermalManager.disable_all_heaters ();
27602765 #endif
27612766 break ;
27622767 #endif
2768+
27632769 case PREPARE_CASE_LANG:
27642770 HMI_ToggleLanguage ();
27652771 Draw_Prepare_Menu ();
@@ -2784,9 +2790,11 @@ void Draw_Temperature_Menu() {
27842790 #if HAS_FAN
27852791 Item_AreaCopy (115 , 134 , 170 , 146 , TEMP_CASE_FAN);
27862792 #endif
2787- #if HAS_HOTEND
2793+ #if HAS_PREHEAT
27882794 Item_AreaCopy (100 , 89 , 178 , 101 , TEMP_CASE_PLA);
2789- Item_AreaCopy (180 , 89 , 260 , 100 , TEMP_CASE_ABS);
2795+ #if PREHEAT_COUNT > 1
2796+ Item_AreaCopy (180 , 89 , 260 , 100 , TEMP_CASE_ABS);
2797+ #endif
27902798 #endif
27912799 }
27922800 else {
@@ -2805,30 +2813,33 @@ void Draw_Temperature_Menu() {
28052813 #if HAS_FAN
28062814 DWIN_Draw_Label (TEMP_CASE_FAN, GET_TEXT_F (MSG_FAN_SPEED));
28072815 #endif
2808- #if HAS_HOTEND
2816+ #if HAS_PREHEAT
28092817 DWIN_Draw_Label (TEMP_CASE_PLA, F (PREHEAT_1_LABEL " Preheat Settings" ));
2810- DWIN_Draw_Label (TEMP_CASE_ABS, F (PREHEAT_2_LABEL " Preheat Settings" ));
2818+ #if PREHEAT_COUNT > 1
2819+ DWIN_Draw_Label (TEMP_CASE_ABS, F (PREHEAT_2_LABEL " Preheat Settings" ));
2820+ #endif
28112821 #endif
28122822 #else
28132823 #if HAS_HOTEND
2814- Item_AreaCopy (197 , 104 , 238 , 114 , TEMP_CASE_TEMP); // "Nozzle"
2815- Item_AreaCopy (1 , 89 , 83 , 101 , TEMP_CASE_TEMP, 44 ); // "Temperature"
2824+ Item_AreaCopy (197 , 104 , 238 , 114 , TEMP_CASE_TEMP); // "Nozzle"
2825+ Item_AreaCopy (1 , 89 , 83 , 101 , TEMP_CASE_TEMP, 44 ); // "Temperature"
28162826 #endif
28172827 #if HAS_HEATED_BED
2818- Item_AreaCopy (240 , 104 , 264 , 114 , TEMP_CASE_BED); // "Bed"
2819- Item_AreaCopy (1 , 89 , 83 , 101 , TEMP_CASE_BED, 27 ); // "Temperature"
2828+ Item_AreaCopy (240 , 104 , 264 , 114 , TEMP_CASE_BED); // "Bed"
2829+ Item_AreaCopy (1 , 89 , 83 , 101 , TEMP_CASE_BED, 27 ); // "Temperature"
28202830 #endif
28212831 #if HAS_FAN
2822- Item_AreaCopy ( 1 , 119 , 61 , 132 , TEMP_CASE_FAN); // "Fan speed"
2832+ Item_AreaCopy ( 1 , 119 , 61 , 132 , TEMP_CASE_FAN); // "Fan speed"
28232833 #endif
2824- #if HAS_HOTEND
2825- Item_AreaCopy (107 , 76 , 156 , 86 , TEMP_CASE_PLA); // "Preheat"
2826- say_pla_en (52 , TEMP_CASE_PLA); // "PLA"
2827- Item_AreaCopy (150 , 135 , 202 , 148 , TEMP_CASE_PLA, 79 ); // "Settings"
2828-
2829- Item_AreaCopy (107 , 76 , 156 , 86 , TEMP_CASE_ABS); // "Preheat"
2830- say_abs_en (52 , TEMP_CASE_ABS); // "ABS"
2831- Item_AreaCopy (150 , 135 , 202 , 148 , TEMP_CASE_ABS, 81 ); // "Settings"
2834+ #if HAS_PREHEAT
2835+ Item_AreaCopy (107 , 76 , 156 , 86 , TEMP_CASE_PLA); // "Preheat"
2836+ say_pla_en (52 , TEMP_CASE_PLA); // "PLA"
2837+ Item_AreaCopy (150 , 135 , 202 , 148 , TEMP_CASE_PLA, 79 ); // "Settings"
2838+ #if PREHEAT_COUNT > 1
2839+ Item_AreaCopy (107 , 76 , 156 , 86 , TEMP_CASE_ABS); // "Preheat"
2840+ say_abs_en (52 , TEMP_CASE_ABS); // "ABS"
2841+ Item_AreaCopy (150 , 135 , 202 , 148 , TEMP_CASE_ABS, 81 ); // "Settings"
2842+ #endif
28322843 #endif
28332844 #endif
28342845 }
@@ -2851,12 +2862,12 @@ void Draw_Temperature_Menu() {
28512862 _TMENU_ICON (TEMP_CASE_FAN);
28522863 Draw_Edit_Integer3 (i, thermalManager.fan_speed [0 ]);
28532864 #endif
2854- #if HAS_HOTEND
2865+ #if HAS_PREHEAT
28552866 // PLA/ABS items have submenus
2856- _TMENU_ICON (TEMP_CASE_PLA);
2857- Draw_More_Icon (i);
2858- _TMENU_ICON (TEMP_CASE_ABS);
2859- Draw_More_Icon (i);
2867+ _TMENU_ICON (TEMP_CASE_PLA); Draw_More_Icon (i);
2868+ # if PREHEAT_COUNT > 1
2869+ _TMENU_ICON (TEMP_CASE_ABS); Draw_More_Icon (i );
2870+ # endif
28602871 #endif
28612872}
28622873
@@ -3076,6 +3087,7 @@ void HMI_Temperature() {
30763087 EncoderRate.enabled = true ;
30773088 break ;
30783089 #endif
3090+
30793091 #if HAS_PREHEAT
30803092 case TEMP_CASE_PLA: {
30813093 checkkey = PLAPreheat;
@@ -3153,7 +3165,8 @@ void HMI_Temperature() {
31533165 Draw_Menu_Line (++i, ICON_WriteEEPROM);
31543166 #endif
31553167 } break ;
3156- #endif
3168+ #endif // HAS_PREHEAT
3169+
31573170 #if PREHEAT_COUNT > 1
31583171 case TEMP_CASE_ABS: { // ABS preheat setting
31593172 checkkey = ABSPreheat;
@@ -3236,7 +3249,7 @@ void HMI_Temperature() {
32363249
32373250 } break ;
32383251
3239- #endif // HAS_HOTEND
3252+ #endif // PREHEAT_COUNT > 1
32403253 }
32413254 }
32423255 DWIN_UpdateLCD ();
@@ -3579,14 +3592,12 @@ void HMI_AdvSet() {
35793592
35803593 #if HAS_HOTEND
35813594 case ADVSET_CASE_HEPID:
3582- thermalManager.setTargetHotend (ui.material_preset [0 ].hotend_temp , 0 );
35833595 thermalManager.PID_autotune (ui.material_preset [0 ].hotend_temp , H_E0, 10 , true );
35843596 break ;
35853597 #endif
35863598
35873599 #if HAS_HEATED_BED
35883600 case ADVSET_CASE_BEDPID:
3589- thermalManager.setTargetBed (ui.material_preset [0 ].bed_temp );
35903601 thermalManager.PID_autotune (ui.material_preset [0 ].bed_temp , H_BED, 10 , true );
35913602 break ;
35923603 #endif
@@ -3881,63 +3892,65 @@ void HMI_Tune() {
38813892 DWIN_UpdateLCD ();
38823893 }
38833894
3884- // ABS Preheat
3885- void HMI_ABSPreheatSetting () {
3886- EncoderState encoder_diffState = get_encoder_state ();
3887- if (encoder_diffState == ENCODER_DIFF_NO) return ;
3888-
3889- // Avoid flicker by updating only the previous menu
3890- if (encoder_diffState == ENCODER_DIFF_CW) {
3891- if (select_ABS.inc (1 + PREHEAT_CASE_TOTAL)) Move_Highlight (1 , select_ABS.now );
3892- }
3893- else if (encoder_diffState == ENCODER_DIFF_CCW) {
3894- if (select_ABS.dec ()) Move_Highlight (-1 , select_ABS.now );
3895- }
3896- else if (encoder_diffState == ENCODER_DIFF_ENTER) {
3897- switch (select_ABS.now ) {
3898- case CASE_BACK:
3899- checkkey = TemperatureID;
3900- select_temp.now = TEMP_CASE_ABS;
3901- HMI_ValueStruct.show_mode = -1 ;
3902- Draw_Temperature_Menu ();
3903- break ;
3904- #if HAS_HOTEND
3905- case PREHEAT_CASE_TEMP:
3906- checkkey = ETemp;
3907- HMI_ValueStruct.E_Temp = ui.material_preset [1 ].hotend_temp ;
3908- Draw_Edit_Integer3 (PREHEAT_CASE_TEMP, ui.material_preset [1 ].hotend_temp , true );
3909- EncoderRate.enabled = true ;
3910- break ;
3911- #endif
3912- #if HAS_HEATED_BED
3913- case PREHEAT_CASE_BED:
3914- checkkey = BedTemp;
3915- HMI_ValueStruct.Bed_Temp = ui.material_preset [1 ].bed_temp ;
3916- Draw_Edit_Integer3 (PREHEAT_CASE_BED, ui.material_preset [1 ].bed_temp , true );
3917- EncoderRate.enabled = true ;
3918- break ;
3919- #endif
3920- #if HAS_FAN
3921- case PREHEAT_CASE_FAN:
3922- checkkey = FanSpeed;
3923- HMI_ValueStruct.Fan_speed = ui.material_preset [1 ].fan_speed ;
3924- Draw_Edit_Integer3 (PREHEAT_CASE_FAN, ui.material_preset [1 ].fan_speed , true );
3925- EncoderRate.enabled = true ;
3895+ #if PREHEAT_COUNT > 1
3896+ // ABS Preheat
3897+ void HMI_ABSPreheatSetting () {
3898+ EncoderState encoder_diffState = get_encoder_state ();
3899+ if (encoder_diffState == ENCODER_DIFF_NO) return ;
3900+
3901+ // Avoid flicker by updating only the previous menu
3902+ if (encoder_diffState == ENCODER_DIFF_CW) {
3903+ if (select_ABS.inc (1 + PREHEAT_CASE_TOTAL)) Move_Highlight (1 , select_ABS.now );
3904+ }
3905+ else if (encoder_diffState == ENCODER_DIFF_CCW) {
3906+ if (select_ABS.dec ()) Move_Highlight (-1 , select_ABS.now );
3907+ }
3908+ else if (encoder_diffState == ENCODER_DIFF_ENTER) {
3909+ switch (select_ABS.now ) {
3910+ case CASE_BACK:
3911+ checkkey = TemperatureID;
3912+ select_temp.now = TEMP_CASE_ABS;
3913+ HMI_ValueStruct.show_mode = -1 ;
3914+ Draw_Temperature_Menu ();
39263915 break ;
3927- #endif
3928- #if ENABLED(EEPROM_SETTINGS)
3929- case PREHEAT_CASE_SAVE: {
3930- const bool success = settings.save ();
3931- HMI_AudioFeedback (success);
3932- } break ;
3933- #endif
3934- default : break ;
3916+ #if HAS_HOTEND
3917+ case PREHEAT_CASE_TEMP:
3918+ checkkey = ETemp;
3919+ HMI_ValueStruct.E_Temp = ui.material_preset [1 ].hotend_temp ;
3920+ Draw_Edit_Integer3 (PREHEAT_CASE_TEMP, ui.material_preset [1 ].hotend_temp , true );
3921+ EncoderRate.enabled = true ;
3922+ break ;
3923+ #endif
3924+ #if HAS_HEATED_BED
3925+ case PREHEAT_CASE_BED:
3926+ checkkey = BedTemp;
3927+ HMI_ValueStruct.Bed_Temp = ui.material_preset [1 ].bed_temp ;
3928+ Draw_Edit_Integer3 (PREHEAT_CASE_BED, ui.material_preset [1 ].bed_temp , true );
3929+ EncoderRate.enabled = true ;
3930+ break ;
3931+ #endif
3932+ #if HAS_FAN
3933+ case PREHEAT_CASE_FAN:
3934+ checkkey = FanSpeed;
3935+ HMI_ValueStruct.Fan_speed = ui.material_preset [1 ].fan_speed ;
3936+ Draw_Edit_Integer3 (PREHEAT_CASE_FAN, ui.material_preset [1 ].fan_speed , true );
3937+ EncoderRate.enabled = true ;
3938+ break ;
3939+ #endif
3940+ #if ENABLED(EEPROM_SETTINGS)
3941+ case PREHEAT_CASE_SAVE: {
3942+ const bool success = settings.save ();
3943+ HMI_AudioFeedback (success);
3944+ } break ;
3945+ #endif
3946+ default : break ;
3947+ }
39353948 }
3949+ DWIN_UpdateLCD ();
39363950 }
3937- DWIN_UpdateLCD ();
3938- }
3951+ #endif // PREHEAT_COUNT > 1
39393952
3940- #endif
3953+ #endif // HAS_PREHEAT
39413954
39423955// Max Speed
39433956void HMI_MaxSpeed () {
@@ -4241,7 +4254,9 @@ void DWIN_HandleScreen() {
42414254 case Tune: HMI_Tune (); break ;
42424255 #if HAS_PREHEAT
42434256 case PLAPreheat: HMI_PLAPreheatSetting (); break ;
4244- case ABSPreheat: HMI_ABSPreheatSetting (); break ;
4257+ #if PREHEAT_COUNT > 1
4258+ case ABSPreheat: HMI_ABSPreheatSetting (); break ;
4259+ #endif
42454260 #endif
42464261 case MaxSpeed: HMI_MaxSpeed (); break ;
42474262 case MaxAcceleration: HMI_MaxAcceleration (); break ;
0 commit comments