E3V2 DWIN Advanced Settings (#21534)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
parent
8373bd1b71
commit
84e8d4c603
|
@ -154,18 +154,20 @@ typedef struct {
|
||||||
|
|
||||||
select_t select_page{0}, select_file{0}, select_print{0}, select_prepare{0}
|
select_t select_page{0}, select_file{0}, select_print{0}, select_prepare{0}
|
||||||
, select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0}
|
, select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0}
|
||||||
, select_PLA{0}, select_ABS{0}
|
, select_advset{0}, select_PLA{0}, select_ABS{0}
|
||||||
, select_speed{0}
|
, select_speed{0}
|
||||||
, select_acc{0}
|
, select_acc{0}
|
||||||
, select_jerk{0}
|
, select_jerk{0}
|
||||||
, select_step{0}
|
, select_step{0}
|
||||||
|
, select_item{0}
|
||||||
;
|
;
|
||||||
|
|
||||||
uint8_t index_file = MROWS,
|
uint8_t index_file = MROWS,
|
||||||
index_prepare = MROWS,
|
index_prepare = MROWS,
|
||||||
index_control = MROWS,
|
index_control = MROWS,
|
||||||
index_leveling = MROWS,
|
index_leveling = MROWS,
|
||||||
index_tune = MROWS;
|
index_tune = MROWS,
|
||||||
|
index_advset = MROWS;
|
||||||
|
|
||||||
bool dwin_abort_flag = false; // Flag to reset feedrate, return to Home
|
bool dwin_abort_flag = false; // Flag to reset feedrate, return to Home
|
||||||
|
|
||||||
|
@ -462,12 +464,21 @@ void Erase_Menu_Text(const uint8_t line) {
|
||||||
DWIN_Draw_Rectangle(1, Color_Bg_Black, LBLX, MBASE(line) - 14, 271, MBASE(line) + 28);
|
DWIN_Draw_Rectangle(1, Color_Bg_Black, LBLX, MBASE(line) - 14, 271, MBASE(line) + 28);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw_Menu_Line(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr) {
|
void Draw_Menu_Item(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr, bool more=false) {
|
||||||
if (label) DWIN_Draw_String(false, false, font8x16, Color_White, Color_Bg_Black, LBLX, MBASE(line) - 1, (char*)label);
|
if (label) DWIN_Draw_String(false, false, font8x16, Color_White, Color_Bg_Black, LBLX, MBASE(line) - 1, (char*)label);
|
||||||
if (icon) Draw_Menu_Icon(line, icon);
|
if (icon) Draw_Menu_Icon(line, icon);
|
||||||
|
if (more) Draw_More_Icon(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Draw_Menu_Line(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr, bool more=false) {
|
||||||
|
Draw_Menu_Item(line, icon, label, more);
|
||||||
DWIN_Draw_Line(Line_Color, 16, MBASE(line) + 33, 256, MBASE(line) + 34);
|
DWIN_Draw_Line(Line_Color, 16, MBASE(line) + 33, 256, MBASE(line) + 34);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Draw_Chkb_Line(const uint8_t line, const bool mode) {
|
||||||
|
DWIN_Draw_Checkbox(Color_White, Color_Bg_Black, 225, MBASE(line) - 1, mode);
|
||||||
|
}
|
||||||
|
|
||||||
// The "Back" label is always on the first line
|
// The "Back" label is always on the first line
|
||||||
void Draw_Back_Label() {
|
void Draw_Back_Label() {
|
||||||
if (HMI_IsChinese())
|
if (HMI_IsChinese())
|
||||||
|
@ -516,7 +527,8 @@ inline bool Apply_Encoder(const ENCODER_DiffState &encoder_diffState, auto &valr
|
||||||
#define CONTROL_CASE_SAVE (CONTROL_CASE_MOVE + ENABLED(EEPROM_SETTINGS))
|
#define CONTROL_CASE_SAVE (CONTROL_CASE_MOVE + ENABLED(EEPROM_SETTINGS))
|
||||||
#define CONTROL_CASE_LOAD (CONTROL_CASE_SAVE + ENABLED(EEPROM_SETTINGS))
|
#define CONTROL_CASE_LOAD (CONTROL_CASE_SAVE + ENABLED(EEPROM_SETTINGS))
|
||||||
#define CONTROL_CASE_RESET (CONTROL_CASE_LOAD + ENABLED(EEPROM_SETTINGS))
|
#define CONTROL_CASE_RESET (CONTROL_CASE_LOAD + ENABLED(EEPROM_SETTINGS))
|
||||||
#define CONTROL_CASE_INFO (CONTROL_CASE_RESET + 1)
|
#define CONTROL_CASE_ADVSET (CONTROL_CASE_RESET + 1)
|
||||||
|
#define CONTROL_CASE_INFO (CONTROL_CASE_ADVSET + 1)
|
||||||
#define CONTROL_CASE_TOTAL CONTROL_CASE_INFO
|
#define CONTROL_CASE_TOTAL CONTROL_CASE_INFO
|
||||||
|
|
||||||
#define TUNE_CASE_SPEED 1
|
#define TUNE_CASE_SPEED 1
|
||||||
|
@ -539,6 +551,13 @@ inline bool Apply_Encoder(const ENCODER_DiffState &encoder_diffState, auto &valr
|
||||||
#define PREHEAT_CASE_SAVE (PREHEAT_CASE_FAN + ENABLED(EEPROM_SETTINGS))
|
#define PREHEAT_CASE_SAVE (PREHEAT_CASE_FAN + ENABLED(EEPROM_SETTINGS))
|
||||||
#define PREHEAT_CASE_TOTAL PREHEAT_CASE_SAVE
|
#define PREHEAT_CASE_TOTAL PREHEAT_CASE_SAVE
|
||||||
|
|
||||||
|
#define ADVSET_CASE_HOMEOFF 1
|
||||||
|
#define ADVSET_CASE_PROBEOFF (ADVSET_CASE_HOMEOFF + ENABLED(HAS_ONESTEP_LEVELING))
|
||||||
|
#define ADVSET_CASE_HEPID (ADVSET_CASE_PROBEOFF + ENABLED(HAS_HOTEND))
|
||||||
|
#define ADVSET_CASE_BEDPID (ADVSET_CASE_HEPID + ENABLED(HAS_HEATED_BED))
|
||||||
|
#define ADVSET_CASE_PWRLOSSR (ADVSET_CASE_BEDPID + ENABLED(POWER_LOSS_RECOVERY))
|
||||||
|
#define ADVSET_CASE_TOTAL ADVSET_CASE_PWRLOSSR
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw Menus
|
// Draw Menus
|
||||||
//
|
//
|
||||||
|
@ -770,26 +789,36 @@ void Draw_Control_Menu() {
|
||||||
DWIN_Frame_TitleCopy(1, 128, 2, 176, 12); // "Control"
|
DWIN_Frame_TitleCopy(1, 128, 2, 176, 12); // "Control"
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_STRING_TITLES
|
#ifdef USE_STRING_TITLES
|
||||||
DWIN_Draw_Label(CLINE(CONTROL_CASE_TEMP), GET_TEXT_F(MSG_TEMPERATURE));
|
if (CVISI(CONTROL_CASE_TEMP)) DWIN_Draw_Label(CLINE(CONTROL_CASE_TEMP), GET_TEXT_F(MSG_TEMPERATURE));
|
||||||
DWIN_Draw_Label(CLINE(CONTROL_CASE_MOVE), GET_TEXT_F(MSG_MOTION));
|
if (CVISI(CONTROL_CASE_MOVE)) DWIN_Draw_Label(CLINE(CONTROL_CASE_MOVE), GET_TEXT_F(MSG_MOTION));
|
||||||
#if ENABLED(EEPROM_SETTINGS)
|
#if ENABLED(EEPROM_SETTINGS)
|
||||||
DWIN_Draw_Label(CLINE(CONTROL_CASE_SAVE), GET_TEXT_F(MSG_STORE_EEPROM));
|
if (CVISI(CONTROL_CASE_SAVE)) DWIN_Draw_Label(CLINE(CONTROL_CASE_SAVE), GET_TEXT_F(MSG_STORE_EEPROM));
|
||||||
DWIN_Draw_Label(CLINE(CONTROL_CASE_LOAD), GET_TEXT_F(MSG_LOAD_EEPROM));
|
if (CVISI(CONTROL_CASE_LOAD)) DWIN_Draw_Label(CLINE(CONTROL_CASE_LOAD), GET_TEXT_F(MSG_LOAD_EEPROM));
|
||||||
DWIN_Draw_Label(CLINE(CONTROL_CASE_RESET), GET_TEXT_F(MSG_RESTORE_DEFAULTS));
|
if (CVISI(CONTROL_CASE_RESET)) DWIN_Draw_Label(CLINE(CONTROL_CASE_RESET), GET_TEXT_F(MSG_RESTORE_DEFAULTS));
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
DWIN_Frame_AreaCopy(1, 1, 89, 83, 101, LBLX, CLINE(CONTROL_CASE_TEMP)); // Temperature >
|
if (CVISI(CONTROL_CASE_TEMP)) DWIN_Frame_AreaCopy(1, 1, 89, 83, 101, LBLX, CLINE(CONTROL_CASE_TEMP)); // Temperature >
|
||||||
DWIN_Frame_AreaCopy(1, 84, 89, 128, 99, LBLX, CLINE(CONTROL_CASE_MOVE)); // Motion >
|
if (CVISI(CONTROL_CASE_MOVE)) DWIN_Frame_AreaCopy(1, 84, 89, 128, 99, LBLX, CLINE(CONTROL_CASE_MOVE)); // Motion >
|
||||||
#if ENABLED(EEPROM_SETTINGS)
|
#if ENABLED(EEPROM_SETTINGS)
|
||||||
DWIN_Frame_AreaCopy(1, 148, 89, 268, 101, LBLX , CLINE(CONTROL_CASE_SAVE)); // "Store Configuration"
|
if (CVISI(CONTROL_CASE_SAVE)) DWIN_Frame_AreaCopy(1, 148, 89, 268, 101, LBLX , CLINE(CONTROL_CASE_SAVE)); // "Store Configuration"
|
||||||
|
if (CVISI(CONTROL_CASE_LOAD)) {
|
||||||
DWIN_Frame_AreaCopy(1, 26, 104, 57, 114, LBLX , CLINE(CONTROL_CASE_LOAD)); // "Read"
|
DWIN_Frame_AreaCopy(1, 26, 104, 57, 114, LBLX , CLINE(CONTROL_CASE_LOAD)); // "Read"
|
||||||
DWIN_Frame_AreaCopy(1, 182, 89, 268, 101, LBLX + 34, CLINE(CONTROL_CASE_LOAD)); // "Configuration"
|
DWIN_Frame_AreaCopy(1, 182, 89, 268, 101, LBLX + 34, CLINE(CONTROL_CASE_LOAD)); // "Configuration"
|
||||||
|
}
|
||||||
|
if (CVISI(CONTROL_CASE_RESET)) {
|
||||||
DWIN_Frame_AreaCopy(1, 59, 104, 93, 114, LBLX , CLINE(CONTROL_CASE_RESET)); // "Reset"
|
DWIN_Frame_AreaCopy(1, 59, 104, 93, 114, LBLX , CLINE(CONTROL_CASE_RESET)); // "Reset"
|
||||||
DWIN_Frame_AreaCopy(1, 182, 89, 268, 101, LBLX + 37, CLINE(CONTROL_CASE_RESET)); // "Configuration"
|
DWIN_Frame_AreaCopy(1, 182, 89, 268, 101, LBLX + 37, CLINE(CONTROL_CASE_RESET)); // "Configuration"
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CVISI(CONTROL_CASE_ADVSET)) {
|
||||||
|
DWIN_Draw_Label(CLINE(CONTROL_CASE_ADVSET), GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // Advanced Settings
|
||||||
|
Draw_More_Icon(CSCROL(CONTROL_CASE_ADVSET));
|
||||||
|
Draw_Menu_Line(CSCROL(CONTROL_CASE_ADVSET), ICON_AdvSet);
|
||||||
|
}
|
||||||
|
|
||||||
if (CVISI(CONTROL_CASE_INFO)) Item_Control_Info(CLINE(CONTROL_CASE_INFO));
|
if (CVISI(CONTROL_CASE_INFO)) Item_Control_Info(CLINE(CONTROL_CASE_INFO));
|
||||||
|
|
||||||
if (select_control.now && CVISI(select_control.now))
|
if (select_control.now && CVISI(select_control.now))
|
||||||
|
@ -1785,7 +1814,7 @@ void Draw_SDItem(const uint16_t item, int16_t row=-1) {
|
||||||
|
|
||||||
#if ENABLED(SCROLL_LONG_FILENAMES)
|
#if ENABLED(SCROLL_LONG_FILENAMES)
|
||||||
|
|
||||||
void Draw_SDItem_Shifted(int8_t &shift) {
|
void Draw_SDItem_Shifted(uint8_t &shift) {
|
||||||
// Limit to the number of chars past the cutoff
|
// Limit to the number of chars past the cutoff
|
||||||
const size_t len = strlen(shift_name);
|
const size_t len = strlen(shift_name);
|
||||||
NOMORE(shift, _MAX(len - MENU_CHAR_LIMIT, 0U));
|
NOMORE(shift, _MAX(len - MENU_CHAR_LIMIT, 0U));
|
||||||
|
@ -2060,7 +2089,7 @@ void HMI_SelectFile() {
|
||||||
if (ELAPSED(ms, shift_ms)) {
|
if (ELAPSED(ms, shift_ms)) {
|
||||||
const bool was_reset = shift_amt < 0;
|
const bool was_reset = shift_amt < 0;
|
||||||
shift_ms = ms + 375UL + was_reset * 250UL; // ms per character
|
shift_ms = ms + 375UL + was_reset * 250UL; // ms per character
|
||||||
int8_t shift_new = shift_amt + 1; // Try to shift by...
|
uint8_t shift_new = shift_amt + 1; // Try to shift by...
|
||||||
Draw_SDItem_Shifted(shift_new); // Draw the item
|
Draw_SDItem_Shifted(shift_new); // Draw the item
|
||||||
if (!was_reset && shift_new == 0) // Was it limited to 0?
|
if (!was_reset && shift_new == 0) // Was it limited to 0?
|
||||||
shift_ms = 0; // No scrolling needed
|
shift_ms = 0; // No scrolling needed
|
||||||
|
@ -2331,6 +2360,60 @@ void Draw_Move_Menu() {
|
||||||
LOOP_L_N(i, 3 + ENABLED(HAS_HOTEND)) Draw_Menu_Line(i + 1, ICON_MoveX + i);
|
LOOP_L_N(i, 3 + ENABLED(HAS_HOTEND)) Draw_Menu_Line(i + 1, ICON_MoveX + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Draw_AdvSet_Menu() {
|
||||||
|
Clear_Main_Window();
|
||||||
|
|
||||||
|
#if ADVSET_CASE_TOTAL >= 6
|
||||||
|
const int16_t scroll = MROWS - index_advset; // Scrolled-up lines
|
||||||
|
#define ASCROL(L) (scroll + (L))
|
||||||
|
#else
|
||||||
|
#define ASCROL(L) (L)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define AVISI(L) WITHIN(ASCROL(L), 0, MROWS)
|
||||||
|
|
||||||
|
Draw_Title(GET_TEXT_F(MSG_ADVANCED_SETTINGS));
|
||||||
|
|
||||||
|
if (AVISI(0)) Draw_Back_First(select_advset.now == 0);
|
||||||
|
if (AVISI(ADVSET_CASE_HOMEOFF)) Draw_Menu_Line(ASCROL(ADVSET_CASE_HOMEOFF), ICON_HomeOff, GET_TEXT(MSG_SET_HOME_OFFSETS),true); // Home Offset >
|
||||||
|
#if HAS_ONESTEP_LEVELING
|
||||||
|
if (AVISI(ADVSET_CASE_PROBEOFF)) Draw_Menu_Line(ASCROL(ADVSET_CASE_PROBEOFF), ICON_ProbeOff, GET_TEXT(MSG_ZPROBE_OFFSETS),true); // Probe Offset >
|
||||||
|
#endif
|
||||||
|
if (AVISI(ADVSET_CASE_HEPID)) Draw_Menu_Line(ASCROL(ADVSET_CASE_HEPID), ICON_PIDNozzle, "Hotend PID", false); // Nozzle PID
|
||||||
|
if (AVISI(ADVSET_CASE_BEDPID)) Draw_Menu_Line(ASCROL(ADVSET_CASE_BEDPID), ICON_PIDbed, "Bed PID", false); // Bed PID
|
||||||
|
if (AVISI(ADVSET_CASE_PWRLOSSR)) {
|
||||||
|
Draw_Menu_Line(ASCROL(ADVSET_CASE_PWRLOSSR), ICON_Motion, "Power-loss recovery", false); // Power-loss recovery
|
||||||
|
Draw_Chkb_Line(ASCROL(ADVSET_CASE_PWRLOSSR), recovery.enabled);
|
||||||
|
}
|
||||||
|
if (select_advset.now) Draw_Menu_Cursor(ASCROL(select_advset.now));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Draw_HomeOff_Menu() {
|
||||||
|
Clear_Main_Window();
|
||||||
|
Draw_Title(GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // Home Offsets
|
||||||
|
Draw_Back_First(select_item.now == 0);
|
||||||
|
Draw_Menu_Line(1, ICON_HomeOffX, GET_TEXT(MSG_HOME_OFFSET_X)); // Home X Offset
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(1), HMI_ValueStruct.Home_OffX_scaled);
|
||||||
|
Draw_Menu_Line(2, ICON_HomeOffY, GET_TEXT(MSG_HOME_OFFSET_Y)); // Home Y Offset
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(2), HMI_ValueStruct.Home_OffY_scaled);
|
||||||
|
Draw_Menu_Line(3, ICON_HomeOffZ, GET_TEXT(MSG_HOME_OFFSET_Z)); // Home Y Offset
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(3), HMI_ValueStruct.Home_OffZ_scaled);
|
||||||
|
if (select_item.now) Draw_Menu_Cursor(select_item.now);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if HAS_ONESTEP_LEVELING
|
||||||
|
void Draw_ProbeOff_Menu() {
|
||||||
|
Clear_Main_Window();
|
||||||
|
Draw_Title(GET_TEXT_F(MSG_ZPROBE_OFFSETS)); // Probe Offsets
|
||||||
|
Draw_Back_First(select_item.now == 0);
|
||||||
|
Draw_Menu_Line(1, ICON_ProbeOffX, GET_TEXT(MSG_ZPROBE_XOFFSET)); // Probe X Offset
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(1), HMI_ValueStruct.Probe_OffX_scaled);
|
||||||
|
Draw_Menu_Line(2, ICON_ProbeOffY, GET_TEXT(MSG_ZPROBE_YOFFSET)); // Probe Y Offset
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(2), HMI_ValueStruct.Probe_OffY_scaled);
|
||||||
|
if (select_item.now) Draw_Menu_Cursor(select_item.now);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../../../libs/buzzer.h"
|
#include "../../../libs/buzzer.h"
|
||||||
|
|
||||||
void HMI_AudioFeedback(const bool success=true) {
|
void HMI_AudioFeedback(const bool success=true) {
|
||||||
|
@ -2566,14 +2649,20 @@ void HMI_Control() {
|
||||||
if (select_control.inc(1 + CONTROL_CASE_TOTAL)) {
|
if (select_control.inc(1 + CONTROL_CASE_TOTAL)) {
|
||||||
if (select_control.now > MROWS && select_control.now > index_control) {
|
if (select_control.now > MROWS && select_control.now > index_control) {
|
||||||
index_control = select_control.now;
|
index_control = select_control.now;
|
||||||
|
|
||||||
|
// Scroll up and draw a blank bottom line
|
||||||
Scroll_Menu(DWIN_SCROLL_UP);
|
Scroll_Menu(DWIN_SCROLL_UP);
|
||||||
Draw_Menu_Icon(MROWS, ICON_Temperature + index_control - 1);
|
|
||||||
Draw_More_Icon(CONTROL_CASE_TEMP + MROWS - index_control); // Temperature >
|
switch (index_control) { // Last menu items
|
||||||
Draw_More_Icon(CONTROL_CASE_MOVE + MROWS - index_control); // Motion >
|
case CONTROL_CASE_ADVSET: // Advance Settings >
|
||||||
if (index_control > MROWS) {
|
Draw_Menu_Item(MROWS, ICON_AdvSet, GET_TEXT(MSG_ADVANCED_SETTINGS), true);
|
||||||
Draw_More_Icon(CONTROL_CASE_INFO + MROWS - index_control); // Info >
|
break;
|
||||||
Item_Control_Info(MBASE(CONTROL_CASE_INFO - 1));
|
case CONTROL_CASE_INFO: // Info >
|
||||||
|
Draw_Menu_Item(MROWS, ICON_Info, GET_TEXT(MSG_INFO_SCREEN), true);
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Move_Highlight(1, select_control.now + MROWS - index_control);
|
Move_Highlight(1, select_control.now + MROWS - index_control);
|
||||||
|
@ -2585,12 +2674,17 @@ void HMI_Control() {
|
||||||
if (select_control.now < index_control - MROWS) {
|
if (select_control.now < index_control - MROWS) {
|
||||||
index_control--;
|
index_control--;
|
||||||
Scroll_Menu(DWIN_SCROLL_DOWN);
|
Scroll_Menu(DWIN_SCROLL_DOWN);
|
||||||
if (index_control == MROWS)
|
switch (index_control) { // First menu items
|
||||||
|
case MROWS :
|
||||||
Draw_Back_First();
|
Draw_Back_First();
|
||||||
else
|
break;
|
||||||
Draw_Menu_Line(0, ICON_Temperature + select_control.now - 1);
|
case MROWS + 1: // Temperature >
|
||||||
Draw_More_Icon(0 + MROWS - index_control + 1); // Temperature >
|
Draw_Menu_Line(0, ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), true);
|
||||||
Draw_More_Icon(1 + MROWS - index_control + 1); // Motion >
|
break;
|
||||||
|
case MROWS + 2: // Move >
|
||||||
|
Draw_Menu_Line(0, ICON_Motion, GET_TEXT(MSG_MOTION), true);
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Move_Highlight(-1, select_control.now + MROWS - index_control);
|
Move_Highlight(-1, select_control.now + MROWS - index_control);
|
||||||
|
@ -2628,6 +2722,11 @@ void HMI_Control() {
|
||||||
HMI_AudioFeedback();
|
HMI_AudioFeedback();
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
case CONTROL_CASE_ADVSET: // Advance Settings
|
||||||
|
checkkey = AdvSet;
|
||||||
|
select_advset.reset();
|
||||||
|
Draw_AdvSet_Menu();
|
||||||
|
break;
|
||||||
case CONTROL_CASE_INFO: // Info
|
case CONTROL_CASE_INFO: // Info
|
||||||
checkkey = Info;
|
checkkey = Info;
|
||||||
Draw_Info_Menu();
|
Draw_Info_Menu();
|
||||||
|
@ -3227,6 +3326,217 @@ void HMI_Motion() {
|
||||||
DWIN_UpdateLCD();
|
DWIN_UpdateLCD();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Advanced Settings */
|
||||||
|
void HMI_AdvSet() {
|
||||||
|
ENCODER_DiffState encoder_diffState = get_encoder_state();
|
||||||
|
if (encoder_diffState == ENCODER_DIFF_NO) return;
|
||||||
|
|
||||||
|
// Avoid flicker by updating only the previous menu
|
||||||
|
if (encoder_diffState == ENCODER_DIFF_CW) {
|
||||||
|
if (select_advset.inc(1 + ADVSET_CASE_TOTAL)) {
|
||||||
|
if (select_advset.now > MROWS && select_advset.now > index_advset) {
|
||||||
|
index_advset = select_advset.now;
|
||||||
|
|
||||||
|
// Scroll up and draw a blank bottom line
|
||||||
|
Scroll_Menu(DWIN_SCROLL_UP);
|
||||||
|
|
||||||
|
//switch (index_advset) { // Redraw last menu items
|
||||||
|
// default: break;
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Move_Highlight(1, select_advset.now + MROWS - index_advset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (encoder_diffState == ENCODER_DIFF_CCW) {
|
||||||
|
if (select_advset.dec()) {
|
||||||
|
if (select_advset.now < index_advset - MROWS) {
|
||||||
|
index_advset--;
|
||||||
|
Scroll_Menu(DWIN_SCROLL_DOWN);
|
||||||
|
|
||||||
|
//switch (index_advset) { // Redraw first menu items
|
||||||
|
// default: break;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Move_Highlight(-1, select_advset.now + MROWS - index_advset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
|
||||||
|
switch (select_advset.now) {
|
||||||
|
case 0: // Back
|
||||||
|
checkkey = Control;
|
||||||
|
select_control.set(CONTROL_CASE_ADVSET);
|
||||||
|
index_control = CONTROL_CASE_ADVSET;
|
||||||
|
Draw_Control_Menu();
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if HAS_HOME_OFFSET
|
||||||
|
case ADVSET_CASE_HOMEOFF: // Home Offsets
|
||||||
|
checkkey = HomeOff;
|
||||||
|
select_item.reset();
|
||||||
|
HMI_ValueStruct.Home_OffX_scaled = home_offset[X_AXIS] * 10;
|
||||||
|
HMI_ValueStruct.Home_OffY_scaled = home_offset[Y_AXIS] * 10;
|
||||||
|
HMI_ValueStruct.Home_OffZ_scaled = home_offset[Z_AXIS] * 10;
|
||||||
|
Draw_HomeOff_Menu();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_ONESTEP_LEVELING
|
||||||
|
case ADVSET_CASE_PROBEOFF: // Probe Offsets
|
||||||
|
checkkey = ProbeOff;
|
||||||
|
select_item.reset();
|
||||||
|
HMI_ValueStruct.Probe_OffX_scaled = probe.offset.x * 10;
|
||||||
|
HMI_ValueStruct.Probe_OffY_scaled = probe.offset.y * 10;
|
||||||
|
Draw_ProbeOff_Menu();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_HOTEND
|
||||||
|
case ADVSET_CASE_HEPID: // Nozzle PID Autotune
|
||||||
|
thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0);
|
||||||
|
thermalManager.PID_autotune(ui.material_preset[0].hotend_temp, H_E0, 10, true);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_HEATED_BED
|
||||||
|
case ADVSET_CASE_BEDPID: // Bed PID Autotune
|
||||||
|
thermalManager.setTargetBed(ui.material_preset[0].bed_temp);
|
||||||
|
thermalManager.PID_autotune(ui.material_preset[0].bed_temp, H_BED, 10, true);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case ADVSET_CASE_PWRLOSSR: // Power-loss recovery
|
||||||
|
recovery.enable(!recovery.enabled);
|
||||||
|
Draw_Chkb_Line(ADVSET_CASE_PWRLOSSR + MROWS - index_advset, recovery.enabled);
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DWIN_UpdateLCD();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if HAS_HOME_OFFSET
|
||||||
|
|
||||||
|
/* Home Offset */
|
||||||
|
void HMI_HomeOff() {
|
||||||
|
ENCODER_DiffState encoder_diffState = get_encoder_state();
|
||||||
|
if (encoder_diffState == ENCODER_DIFF_NO) return;
|
||||||
|
|
||||||
|
// Avoid flicker by updating only the previous menu
|
||||||
|
if (encoder_diffState == ENCODER_DIFF_CW) {
|
||||||
|
if (select_item.inc(1 + 3)) Move_Highlight(1, select_item.now);
|
||||||
|
}
|
||||||
|
else if (encoder_diffState == ENCODER_DIFF_CCW) {
|
||||||
|
if (select_item.dec()) Move_Highlight(-1, select_item.now);
|
||||||
|
}
|
||||||
|
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
|
||||||
|
switch (select_item.now) {
|
||||||
|
case 0: // Back
|
||||||
|
checkkey = AdvSet;
|
||||||
|
select_advset.set(ADVSET_CASE_HOMEOFF);
|
||||||
|
Draw_AdvSet_Menu();
|
||||||
|
break;
|
||||||
|
case 1: // Home Offset X
|
||||||
|
checkkey = HomeOffX;
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(1), HMI_ValueStruct.Home_OffX_scaled);
|
||||||
|
EncoderRate.enabled = true;
|
||||||
|
break;
|
||||||
|
case 2: // Home Offset Y
|
||||||
|
checkkey = HomeOffY;
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(2), HMI_ValueStruct.Home_OffY_scaled);
|
||||||
|
EncoderRate.enabled = true;
|
||||||
|
break;
|
||||||
|
case 3: // Home Offset Z
|
||||||
|
checkkey = HomeOffZ;
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(3), HMI_ValueStruct.Home_OffZ_scaled);
|
||||||
|
EncoderRate.enabled = true;
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DWIN_UpdateLCD();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HMI_HomeOffN(float &posScaled, const_float_t lo, const_float_t hi) {
|
||||||
|
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
|
||||||
|
if (encoder_diffState != ENCODER_DIFF_NO) {
|
||||||
|
if (Apply_Encoder(encoder_diffState, posScaled)) {
|
||||||
|
checkkey = HomeOff;
|
||||||
|
EncoderRate.enabled = false;
|
||||||
|
set_home_offset(X_AXIS, posScaled / 10);
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(select_item.now), posScaled);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LIMIT(posScaled, lo, hi);
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, UNITFDIGITS, 216, MBASE(select_item.now), posScaled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HMI_HomeOffX() { HMI_HomeOffN(HMI_ValueStruct.Home_OffX_scaled, -500, 500); }
|
||||||
|
void HMI_HomeOffY() { HMI_HomeOffN(HMI_ValueStruct.Home_OffY_scaled, -500, 500); }
|
||||||
|
void HMI_HomeOffZ() { HMI_HomeOffN(HMI_ValueStruct.Home_OffZ_scaled, -20, 20); }
|
||||||
|
|
||||||
|
#endif // HAS_HOME_OFFSET
|
||||||
|
|
||||||
|
#if HAS_ONESTEP_LEVELING
|
||||||
|
/*Probe Offset */
|
||||||
|
void HMI_ProbeOff() {
|
||||||
|
ENCODER_DiffState encoder_diffState = get_encoder_state();
|
||||||
|
if (encoder_diffState == ENCODER_DIFF_NO) return;
|
||||||
|
|
||||||
|
// Avoid flicker by updating only the previous menu
|
||||||
|
if (encoder_diffState == ENCODER_DIFF_CW) {
|
||||||
|
if (select_item.inc(1 + 2)) Move_Highlight(1, select_item.now);
|
||||||
|
}
|
||||||
|
else if (encoder_diffState == ENCODER_DIFF_CCW) {
|
||||||
|
if (select_item.dec()) Move_Highlight(-1, select_item.now);
|
||||||
|
}
|
||||||
|
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
|
||||||
|
switch (select_item.now) {
|
||||||
|
case 0: // Back
|
||||||
|
checkkey = AdvSet;
|
||||||
|
select_advset.set(ADVSET_CASE_PROBEOFF);
|
||||||
|
Draw_AdvSet_Menu();
|
||||||
|
break;
|
||||||
|
case 1: // Probe Offset X
|
||||||
|
checkkey = ProbeOffX;
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(1), HMI_ValueStruct.Probe_OffX_scaled);
|
||||||
|
EncoderRate.enabled = true;
|
||||||
|
break;
|
||||||
|
case 2: // Probe Offset X
|
||||||
|
checkkey = ProbeOffY;
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(2), HMI_ValueStruct.Probe_OffY_scaled);
|
||||||
|
EncoderRate.enabled = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DWIN_UpdateLCD();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HMI_ProbeOffN(float &posScaled, float &offset_ref) {
|
||||||
|
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
|
||||||
|
if (encoder_diffState != ENCODER_DIFF_NO) {
|
||||||
|
if (Apply_Encoder(encoder_diffState, posScaled)) {
|
||||||
|
checkkey = ProbeOff;
|
||||||
|
EncoderRate.enabled = false;
|
||||||
|
offset_ref = posScaled / 10;
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Color_Bg_Black, 3, 1, 216, MBASE(select_item.now), posScaled);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LIMIT(posScaled, -500, 500);
|
||||||
|
DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, UNITFDIGITS, 216, MBASE(select_item.now), posScaled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HMI_ProbeOffX() { HMI_ProbeOffN(HMI_ValueStruct.Probe_OffX_scaled, probe.offset.x); }
|
||||||
|
void HMI_ProbeOffY() { HMI_ProbeOffN(HMI_ValueStruct.Probe_OffY_scaled, probe.offset.y); }
|
||||||
|
|
||||||
|
#endif // HAS_ONESTEP_LEVELING
|
||||||
|
|
||||||
/* Info */
|
/* Info */
|
||||||
void HMI_Info() {
|
void HMI_Info() {
|
||||||
ENCODER_DiffState encoder_diffState = get_encoder_state();
|
ENCODER_DiffState encoder_diffState = get_encoder_state();
|
||||||
|
@ -3735,6 +4045,18 @@ void DWIN_HandleScreen() {
|
||||||
case AxisMove: HMI_AxisMove(); break;
|
case AxisMove: HMI_AxisMove(); break;
|
||||||
case TemperatureID: HMI_Temperature(); break;
|
case TemperatureID: HMI_Temperature(); break;
|
||||||
case Motion: HMI_Motion(); break;
|
case Motion: HMI_Motion(); break;
|
||||||
|
case AdvSet: HMI_AdvSet(); break;
|
||||||
|
#if HAS_HOME_OFFSET
|
||||||
|
case HomeOff: HMI_HomeOff(); break;
|
||||||
|
case HomeOffX: HMI_HomeOffX(); break;
|
||||||
|
case HomeOffY: HMI_HomeOffY(); break;
|
||||||
|
case HomeOffZ: HMI_HomeOffZ(); break;
|
||||||
|
#endif
|
||||||
|
#if HAS_ONESTEP_LEVELING
|
||||||
|
case ProbeOff: HMI_ProbeOff(); break;
|
||||||
|
case ProbeOffX: HMI_ProbeOffX(); break;
|
||||||
|
case ProbeOffY: HMI_ProbeOffY(); break;
|
||||||
|
#endif
|
||||||
case Info: HMI_Info(); break;
|
case Info: HMI_Info(); break;
|
||||||
case Tune: HMI_Tune(); break;
|
case Tune: HMI_Tune(); break;
|
||||||
#if HAS_PREHEAT
|
#if HAS_PREHEAT
|
||||||
|
@ -3801,4 +4123,10 @@ void DWIN_StatusChanged(const char *text) {
|
||||||
DWIN_UpdateLCD();
|
DWIN_UpdateLCD();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GUI extension
|
||||||
|
void DWIN_Draw_Checkbox(uint16_t color, uint16_t bcolor, uint16_t x, uint16_t y, bool mode=false) {
|
||||||
|
DWIN_Draw_String(false,true,font8x16,Select_Color,bcolor,x+4,y,F(mode ? "x" : " "));
|
||||||
|
DWIN_Draw_Rectangle(0,color,x+2,y+2,x+17,y+17);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // DWIN_CREALITY_LCD
|
#endif // DWIN_CREALITY_LCD
|
||||||
|
|
|
@ -63,10 +63,20 @@ enum processID : uint8_t {
|
||||||
MaxJerk_value,
|
MaxJerk_value,
|
||||||
Step,
|
Step,
|
||||||
Step_value,
|
Step_value,
|
||||||
|
HomeOff,
|
||||||
|
HomeOffX,
|
||||||
|
HomeOffY,
|
||||||
|
HomeOffZ,
|
||||||
|
|
||||||
// Last Process ID
|
// Last Process ID
|
||||||
Last_Prepare,
|
Last_Prepare,
|
||||||
|
|
||||||
|
// Advance Settings
|
||||||
|
AdvSet,
|
||||||
|
ProbeOff,
|
||||||
|
ProbeOffX,
|
||||||
|
ProbeOffY,
|
||||||
|
|
||||||
// Back Process ID
|
// Back Process ID
|
||||||
Back_Main,
|
Back_Main,
|
||||||
Back_Print,
|
Back_Print,
|
||||||
|
@ -197,6 +207,17 @@ enum processID : uint8_t {
|
||||||
#define ICON_Info_0 90
|
#define ICON_Info_0 90
|
||||||
#define ICON_Info_1 91
|
#define ICON_Info_1 91
|
||||||
|
|
||||||
|
#define ICON_AdvSet ICON_Language
|
||||||
|
#define ICON_HomeOff ICON_AdvSet
|
||||||
|
#define ICON_HomeOffX ICON_StepX
|
||||||
|
#define ICON_HomeOffY ICON_StepY
|
||||||
|
#define ICON_HomeOffZ ICON_StepZ
|
||||||
|
#define ICON_ProbeOff ICON_AdvSet
|
||||||
|
#define ICON_ProbeOffX ICON_StepX
|
||||||
|
#define ICON_ProbeOffY ICON_StepY
|
||||||
|
#define ICON_PIDNozzle ICON_SetEndTemp
|
||||||
|
#define ICON_PIDbed ICON_SetBedTemp
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 3-.0:The font size, 0x00-0x09, corresponds to the font size below:
|
* 3-.0:The font size, 0x00-0x09, corresponds to the font size below:
|
||||||
* 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
|
* 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
|
||||||
|
@ -256,6 +277,11 @@ typedef struct {
|
||||||
#endif
|
#endif
|
||||||
float offset_value = 0;
|
float offset_value = 0;
|
||||||
int8_t show_mode = 0; // -1: Temperature control 0: Printing temperature
|
int8_t show_mode = 0; // -1: Temperature control 0: Printing temperature
|
||||||
|
float Home_OffX_scaled = 0;
|
||||||
|
float Home_OffY_scaled = 0;
|
||||||
|
float Home_OffZ_scaled = 0;
|
||||||
|
float Probe_OffX_scaled = 0;
|
||||||
|
float Probe_OffY_scaled = 0;
|
||||||
} HMI_value_t;
|
} HMI_value_t;
|
||||||
|
|
||||||
#define DWIN_CHINESE 123
|
#define DWIN_CHINESE 123
|
||||||
|
@ -378,6 +404,7 @@ void DWIN_Update();
|
||||||
void EachMomentUpdate();
|
void EachMomentUpdate();
|
||||||
void DWIN_HandleScreen();
|
void DWIN_HandleScreen();
|
||||||
void DWIN_StatusChanged(const char *text);
|
void DWIN_StatusChanged(const char *text);
|
||||||
|
void DWIN_Draw_Checkbox(uint16_t color, uint16_t bcolor, uint16_t x, uint16_t y, bool mode /* = false*/);
|
||||||
|
|
||||||
inline void DWIN_StartHoming() { HMI_flag.home_flag = true; }
|
inline void DWIN_StartHoming() { HMI_flag.home_flag = true; }
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,9 @@ namespace Language_en {
|
||||||
PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Leveling Done!");
|
PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Leveling Done!");
|
||||||
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
|
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
|
||||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
|
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
|
||||||
|
PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Home Offset X");
|
||||||
|
PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y");
|
||||||
|
PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z");
|
||||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
|
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
|
||||||
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Set Origin");
|
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Set Origin");
|
||||||
PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Assisted Tramming");
|
PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Assisted Tramming");
|
||||||
|
|
|
@ -16,7 +16,8 @@ exec_test $1 $2 "Ender 3 v2" "$3"
|
||||||
use_example_configs "Creality/Ender-3 V2"
|
use_example_configs "Creality/Ender-3 V2"
|
||||||
opt_disable CLASSIC_JERK
|
opt_disable CLASSIC_JERK
|
||||||
opt_add SDCARD_EEPROM_EMULATION
|
opt_add SDCARD_EEPROM_EMULATION
|
||||||
exec_test $1 $2 "Ender 3 v2, SD EEPROM, w/o CLASSIC_JERK" "$3"
|
opt_set TEMP_SENSOR_BED 0
|
||||||
|
exec_test $1 $2 "Ender 3 v2, SD EEPROM, no CLASSIC_JERK, no Bed" "$3"
|
||||||
|
|
||||||
restore_configs
|
restore_configs
|
||||||
opt_set MOTHERBOARD BOARD_CREALITY_V452 SERIAL_PORT 1
|
opt_set MOTHERBOARD BOARD_CREALITY_V452 SERIAL_PORT 1
|
||||||
|
|
Loading…
Reference in a new issue