Fix issues with no hotend / bed / fan (#18395)

This commit is contained in:
Scott Lahteine
2020-06-24 19:44:50 -05:00
committed by GitHub
parent b0aad414ec
commit 4275466f49
19 changed files with 732 additions and 585 deletions

View File

@@ -24,9 +24,9 @@
// Temperature Menu
//
#include "../../inc/MarlinConfigPre.h"
#include "../../inc/MarlinConfig.h"
#if HAS_LCD_MENU
#if HAS_LCD_MENU && HAS_TEMPERATURE
#include "menu.h"
#include "../../module/temperature.h"
@@ -39,23 +39,19 @@
#include "../../module/tool_change.h"
#endif
// Initialized by settings.load()
int16_t MarlinUI::preheat_hotend_temp[2], MarlinUI::preheat_bed_temp[2];
uint8_t MarlinUI::preheat_fan_speed[2];
//
// "Temperature" submenu items
//
void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t indb) {
#if HAS_HOTEND
if (indh >= 0 && ui.preheat_hotend_temp[indh] > 0)
setTargetHotend(_MIN(thermalManager.heater_maxtemp[e] - HOTEND_OVERSHOOT, ui.preheat_hotend_temp[indh]), e);
if (indh >= 0 && ui.material_preset[indh].hotend_temp > 0)
setTargetHotend(_MIN(thermalManager.heater_maxtemp[e] - HOTEND_OVERSHOOT, ui.material_preset[indh].hotend_temp), e);
#else
UNUSED(e); UNUSED(indh);
#endif
#if HAS_HEATED_BED
if (indb >= 0 && ui.preheat_bed_temp[indb] > 0) setTargetBed(ui.preheat_bed_temp[indb]);
if (indb >= 0 && ui.material_preset[indb].bed_temp > 0) setTargetBed(ui.material_preset[indb].bed_temp);
#else
UNUSED(indb);
#endif
@@ -64,7 +60,7 @@ void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t i
#if FAN_COUNT > 1
active_extruder < FAN_COUNT ? active_extruder :
#endif
0), ui.preheat_fan_speed[indh]
0), ui.material_preset[indh].fan_speed
);
#endif
ui.return_to_status();
@@ -82,68 +78,66 @@ void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t i
#if HAS_TEMP_HOTEND || HAS_HEATED_BED
#define _PREHEAT_ITEMS(M,N) do{ \
ACTION_ITEM_N(N, MSG_PREHEAT_##M##_H, []{ _preheat_both(M-1, MenuItemBase::itemIndex); }); \
ACTION_ITEM_N(N, MSG_PREHEAT_##M##_END_E, []{ _preheat_end(M-1, MenuItemBase::itemIndex); }); \
}while(0)
#if HAS_HEATED_BED
#define PREHEAT_ITEMS(M,N) _PREHEAT_ITEMS(M,N)
#if HAS_TEMP_HOTEND && HAS_HEATED_BED
#define _PREHEAT_ITEMS(M,E) do{ \
ACTION_ITEM_N_P(E, msg_preheat_h[M], []{ _preheat_both(M, MenuItemBase::itemIndex); }); \
ACTION_ITEM_N_P(E, msg_preheat_end_e[M], []{ _preheat_end(M, MenuItemBase::itemIndex); }); \
}while(0)
#if HAS_HEATED_BED
#define PREHEAT_ITEMS(M,E) _PREHEAT_ITEMS(M,E)
#endif
#else
#define PREHEAT_ITEMS(M,N) \
ACTION_ITEM_N(N, MSG_PREHEAT_##M##_H, []{ _preheat_end(M-1, MenuItemBase::itemIndex); })
#define PREHEAT_ITEMS(M,E) ACTION_ITEM_N(E, msg_preheat_h[M], []{ _preheat_end(M, MenuItemBase::itemIndex); })
#endif
void menu_preheat_m1() {
void menu_preheat_m(const uint8_t m) {
editable.int8 = m;
#if HOTENDS == 1
PGM_P msg_preheat[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1), GET_TEXT(MSG_PREHEAT_2), GET_TEXT(MSG_PREHEAT_3), GET_TEXT(MSG_PREHEAT_4), GET_TEXT(MSG_PREHEAT_5));
PGM_P msg_preheat_end[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_END), GET_TEXT(MSG_PREHEAT_2_END), GET_TEXT(MSG_PREHEAT_3_END), GET_TEXT(MSG_PREHEAT_4_END), GET_TEXT(MSG_PREHEAT_5_END));
#elif HAS_MULTI_HOTEND
PGM_P msg_preheat_all[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_ALL), GET_TEXT(MSG_PREHEAT_2_ALL), GET_TEXT(MSG_PREHEAT_3_ALL), GET_TEXT(MSG_PREHEAT_4_ALL), GET_TEXT(MSG_PREHEAT_5_ALL));
#endif
PGM_P msg_preheat_end_e[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_END_E), GET_TEXT(MSG_PREHEAT_2_END_E), GET_TEXT(MSG_PREHEAT_3_END_E), GET_TEXT(MSG_PREHEAT_4_END_E), GET_TEXT(MSG_PREHEAT_5_END_E));
PGM_P msg_preheat_bed[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_BEDONLY), GET_TEXT(MSG_PREHEAT_2_BEDONLY), GET_TEXT(MSG_PREHEAT_3_BEDONLY), GET_TEXT(MSG_PREHEAT_4_BEDONLY), GET_TEXT(MSG_PREHEAT_5_BEDONLY));
PGM_P msg_preheat_h[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_H), GET_TEXT(MSG_PREHEAT_2_H), GET_TEXT(MSG_PREHEAT_3_H), GET_TEXT(MSG_PREHEAT_4_H), GET_TEXT(MSG_PREHEAT_5_H));
START_MENU();
BACK_ITEM(MSG_TEMPERATURE);
#if HOTENDS == 1
#if HAS_HEATED_BED
ACTION_ITEM(MSG_PREHEAT_1, []{ _preheat_both(0, 0); });
ACTION_ITEM(MSG_PREHEAT_1_END, []{ _preheat_end(0, 0); });
ACTION_ITEM_P(msg_preheat[m], []{ _preheat_both(editable.int8, 0); });
ACTION_ITEM_P(msg_preheat_end[m], []{ _preheat_end(editable.int8, 0); });
#else
ACTION_ITEM(MSG_PREHEAT_1, []{ _preheat_end(0, 0); });
ACTION_ITEM_P(msg_preheat[m], []{ _preheat_end(editable.int8, 0); });
#endif
#elif HAS_MULTI_HOTEND
#if HAS_HEATED_BED
_PREHEAT_ITEMS(1,0);
_PREHEAT_ITEMS(editable.int8,0);
#endif
LOOP_S_L_N(n, 1, HOTENDS) PREHEAT_ITEMS(1,n);
ACTION_ITEM(MSG_PREHEAT_1_ALL, []() {
TERN_(HAS_HEATED_BED, _preheat_bed(0));
HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], e);
LOOP_S_L_N(n, 1, HOTENDS) PREHEAT_ITEMS(editable.int8,n);
ACTION_ITEM_P(msg_preheat_all[m], []() {
TERN_(HAS_HEATED_BED, _preheat_bed(editable.int8));
HOTEND_LOOP() thermalManager.setTargetHotend(ui.material_preset[editable.int8].hotend_temp, e);
});
#endif // HAS_MULTI_HOTEND
#if HAS_HEATED_BED
ACTION_ITEM(MSG_PREHEAT_1_BEDONLY, []{ _preheat_bed(0); });
ACTION_ITEM_P(msg_preheat_bed[m], []{ _preheat_bed(editable.int8); });
#endif
END_MENU();
}
void menu_preheat_m2() {
START_MENU();
BACK_ITEM(MSG_TEMPERATURE);
#if HOTENDS == 1
#if HAS_HEATED_BED
ACTION_ITEM(MSG_PREHEAT_2, []{ _preheat_both(1, 0); });
ACTION_ITEM(MSG_PREHEAT_2_END, []{ _preheat_end(1, 0); });
#else
ACTION_ITEM(MSG_PREHEAT_2, []{ _preheat_end(1, 0); });
void menu_preheat_m1() { menu_preheat_m(0); }
void menu_preheat_m2() { menu_preheat_m(1); }
#if PREHEAT_COUNT >= 3
void menu_preheat_m3() { menu_preheat_m(2); }
#if PREHEAT_COUNT >= 4
void menu_preheat_m4() { menu_preheat_m(3); }
#if PREHEAT_COUNT >= 5
void menu_preheat_m5() { menu_preheat_m(4); }
#endif
#elif HAS_MULTI_HOTEND
#if HAS_HEATED_BED
_PREHEAT_ITEMS(2,0);
#endif
LOOP_S_L_N(n, 1, HOTENDS) PREHEAT_ITEMS(2,n);
ACTION_ITEM(MSG_PREHEAT_2_ALL, []() {
TERN_(HAS_HEATED_BED, _preheat_bed(1));
HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], e);
});
#endif // HAS_MULTI_HOTEND
#if HAS_HEATED_BED
ACTION_ITEM(MSG_PREHEAT_2_BEDONLY, []{ _preheat_bed(1); });
#endif
END_MENU();
}
#endif
void lcd_cooldown() {
thermalManager.zero_fan_speeds();
@@ -269,12 +263,30 @@ void menu_temperature() {
//
// Preheat for Material 1 and 2
//
#if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || TEMP_SENSOR_5 != 0 || TEMP_SENSOR_6 != 0 || TEMP_SENSOR_7 != 0 || HAS_HEATED_BED
#if HOTENDS > 1 || HAS_HEATED_BED
SUBMENU(MSG_PREHEAT_1, menu_preheat_m1);
SUBMENU(MSG_PREHEAT_2, menu_preheat_m2);
#if PREHEAT_COUNT >= 3
SUBMENU(MSG_PREHEAT_3, menu_preheat_m3);
#if PREHEAT_COUNT >= 4
SUBMENU(MSG_PREHEAT_4, menu_preheat_m4);
#if PREHEAT_COUNT >= 5
SUBMENU(MSG_PREHEAT_5, menu_preheat_m5);
#endif
#endif
#endif
#else
ACTION_ITEM(MSG_PREHEAT_1, []{ _preheat_end(0, 0); });
ACTION_ITEM(MSG_PREHEAT_2, []{ _preheat_end(1, 0); });
#if PREHEAT_COUNT >= 3
ACTION_ITEM(MSG_PREHEAT_3, []{ _preheat_end(2, 0); });
#if PREHEAT_COUNT >= 3
ACTION_ITEM(MSG_PREHEAT_4, []{ _preheat_end(3, 0); });
#if PREHEAT_COUNT >= 3
ACTION_ITEM(MSG_PREHEAT_5, []{ _preheat_end(4, 0); });
#endif
#endif
#endif
#endif
//
@@ -288,4 +300,4 @@ void menu_temperature() {
END_MENU();
}
#endif // HAS_LCD_MENU
#endif // HAS_LCD_MENU && HAS_TEMPERATURE