Browse Source

🐛 Fix, improve E3V2 Enhanced UI (#22733)

Miguel Risco-Castillo 3 years ago
parent
commit
392a4a6f85
No account linked to committer's email address

+ 1
- 1
Marlin/src/inc/Conditionals_post.h View File

421
   #endif
421
   #endif
422
 #endif
422
 #endif
423
 
423
 
424
-#if ENABLED(DWIN_CREALITY_LCD_JYERSUI)
424
+#if EITHER(DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI)
425
   #define HAS_LCD_BRIGHTNESS 1
425
   #define HAS_LCD_BRIGHTNESS 1
426
 #endif
426
 #endif
427
 
427
 

+ 88
- 70
Marlin/src/lcd/e3v2/enhanced/dwin.cpp View File

163
 
163
 
164
 #if ENABLED(PAUSE_HEAT)
164
 #if ENABLED(PAUSE_HEAT)
165
   #if HAS_HOTEND
165
   #if HAS_HOTEND
166
-    uint16_t resume_hotend_temp = 0;
166
+    celsius_t resume_hotend_temp = 0;
167
   #endif
167
   #endif
168
   #if HAS_HEATED_BED
168
   #if HAS_HEATED_BED
169
-    uint16_t resume_bed_temp = 0;
169
+    celsius_t resume_bed_temp = 0;
170
   #endif
170
   #endif
171
   #if HAS_FAN
171
   #if HAS_FAN
172
     uint16_t resume_fan = 0;
172
     uint16_t resume_fan = 0;
708
     else if (blink && draw_empty)
708
     else if (blink && draw_empty)
709
       DWINUI::Draw_String(HMI_data.Coordinate_Color, HMI_data.Background_Color, x, y, F("     "));
709
       DWINUI::Draw_String(HMI_data.Coordinate_Color, HMI_data.Background_Color, x, y, F("     "));
710
     else
710
     else
711
-      DWINUI::Draw_Signed_Float(HMI_data.Coordinate_Color, HMI_data.Background_Color, 3, 1, x, y, p * 10);
711
+      DWINUI::Draw_Signed_Float(HMI_data.Coordinate_Color, HMI_data.Background_Color, 3, 1, x, y, p);
712
   }
712
   }
713
 }
713
 }
714
 
714
 
805
   static float _offset = 0;
805
   static float _offset = 0;
806
   if (BABY_Z_VAR != _offset) {
806
   if (BABY_Z_VAR != _offset) {
807
     _offset = BABY_Z_VAR;
807
     _offset = BABY_Z_VAR;
808
-    DWINUI::Draw_Signed_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color,  HMI_data.Background_Color, 2, 2, 210, 417, _offset * 100);
808
+    DWINUI::Draw_Signed_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color,  HMI_data.Background_Color, 2, 2, 210, 417, _offset);
809
   }
809
   }
810
 
810
 
811
   _draw_xyz_position(false);
811
   _draw_xyz_position(false);
1030
     DWINUI::Draw_Icon(ICON_Zoffset, 187, 416);
1030
     DWINUI::Draw_Icon(ICON_Zoffset, 187, 416);
1031
   #endif
1031
   #endif
1032
 
1032
 
1033
-  if (BABY_Z_VAR < 0) {
1034
-    DWINUI::Draw_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color, HMI_data.Background_Color, 2, 2, 207, 417, -BABY_Z_VAR * 100);
1035
-    DWINUI::Draw_String(HMI_data.Indicator_Color, 205, 419, F("-"));
1036
-  }
1037
-  else {
1038
-    DWINUI::Draw_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color, HMI_data.Background_Color, 2, 2, 207, 417, BABY_Z_VAR * 100);
1039
-    DWINUI::Draw_String(HMI_data.Indicator_Color, 205, 419, F(" "));
1040
-  }
1033
+  DWINUI::Draw_Signed_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color,  HMI_data.Background_Color, 2, 2, 210, 417, BABY_Z_VAR);
1041
 
1034
 
1042
   DWIN_Draw_Rectangle(1, HMI_data.SplitLine_Color, 0, 449, DWIN_WIDTH, 451);
1035
   DWIN_Draw_Rectangle(1, HMI_data.SplitLine_Color, 0, 449, DWIN_WIDTH, 451);
1043
 
1036
 
1690
   void DWIN_MeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
1683
   void DWIN_MeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
1691
     char msg[33] = "";
1684
     char msg[33] = "";
1692
     char str_1[6] = "";
1685
     char str_1[6] = "";
1693
-    sprintf_P(msg, PSTR(S_FMT " %i/%i Z=%s"), GET_TEXT(MSG_PROBING_MESH), xpos, ypos,
1686
+    sprintf_P(msg, PSTR(S_FMT " %i/%i Z=%s"), GET_TEXT(MSG_PROBING_POINT), xpos, ypos,
1694
       dtostrf(zval, 1, 2, str_1));
1687
       dtostrf(zval, 1, 2, str_1));
1695
     ui.set_status(msg);
1688
     ui.set_status(msg);
1696
   }
1689
   }
1791
   sdprint = card.isPrinting() || sd;
1784
   sdprint = card.isPrinting() || sd;
1792
   _percent_done = 0;
1785
   _percent_done = 0;
1793
   _remain_time = 0;
1786
   _remain_time = 0;
1787
+  HMI_flag.print_finish = false;
1794
   Goto_PrintProcess();
1788
   Goto_PrintProcess();
1795
 }
1789
 }
1796
 
1790
 
1846
   TERN_(HAS_HOTEND, HMI_data.HotendPidT = PREHEAT_1_TEMP_HOTEND);
1840
   TERN_(HAS_HOTEND, HMI_data.HotendPidT = PREHEAT_1_TEMP_HOTEND);
1847
   TERN_(HAS_HEATED_BED, HMI_data.BedPidT = PREHEAT_1_TEMP_BED);
1841
   TERN_(HAS_HEATED_BED, HMI_data.BedPidT = PREHEAT_1_TEMP_BED);
1848
   TERN_(HAS_HOTEND, HMI_data.PidCycles = 5);
1842
   TERN_(HAS_HOTEND, HMI_data.PidCycles = 5);
1843
+  TERN_(PREVENT_COLD_EXTRUSION, HMI_data.ExtMinT = EXTRUDE_MINTEMP);
1849
 }
1844
 }
1850
 
1845
 
1851
 void DWIN_StoreSettings(char *buff) {
1846
 void DWIN_StoreSettings(char *buff) {
1852
-  memcpy(buff, &HMI_data, min(sizeof(HMI_data), eeprom_data_size));
1847
+  memcpy(buff, &HMI_data, _MIN(sizeof(HMI_data), eeprom_data_size));
1853
 }
1848
 }
1854
 
1849
 
1855
 void DWIN_LoadSettings(const char *buff) {
1850
 void DWIN_LoadSettings(const char *buff) {
1856
-  memcpy(&HMI_data, buff, min(sizeof(HMI_data), eeprom_data_size));
1851
+  memcpy(&HMI_data, buff, _MIN(sizeof(HMI_data), eeprom_data_size));
1857
   dwin_zoffset = TERN0(HAS_BED_PROBE, probe.offset.z);
1852
   dwin_zoffset = TERN0(HAS_BED_PROBE, probe.offset.z);
1858
   if (HMI_data.Text_Color == HMI_data.Background_Color) DWIN_SetColorDefaults();
1853
   if (HMI_data.Text_Color == HMI_data.Background_Color) DWIN_SetColorDefaults();
1859
   DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color);
1854
   DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color);
1860
   TERN_(PREVENT_COLD_EXTRUSION, ApplyExtMinT());
1855
   TERN_(PREVENT_COLD_EXTRUSION, ApplyExtMinT());
1856
+  feedrate_percentage = 100;
1861
 }
1857
 }
1862
 
1858
 
1863
 void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
1859
 void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
1970
 //  lo: low limit
1966
 //  lo: low limit
1971
 //  hi: high limit
1967
 //  hi: high limit
1972
 //  dp: decimal places, 0 for integers
1968
 //  dp: decimal places, 0 for integers
1973
-//  val: value
1969
+//  val: value / scaled value
1974
 //  LiveUpdate: live update function when the encoder changes
1970
 //  LiveUpdate: live update function when the encoder changes
1975
 //  Apply: update function when the encoder is pressed
1971
 //  Apply: update function when the encoder is pressed
1976
 void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
1972
 void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
1977
-  last_checkkey = checkkey;
1973
+  last_checkkey = Menu;
1978
   checkkey = process;
1974
   checkkey = process;
1979
   HMI_value.MinValue = lo;
1975
   HMI_value.MinValue = lo;
1980
   HMI_value.MaxValue = hi;
1976
   HMI_value.MaxValue = hi;
1985
   EncoderRate.enabled = true;
1981
   EncoderRate.enabled = true;
1986
 }
1982
 }
1987
 
1983
 
1988
-// Generic onclick event for set values (dp = 0: integer, dp > 0: float)
1984
+// Generic onclick event for integer values
1989
 //  process: process id HMI destiny
1985
 //  process: process id HMI destiny
1990
 //  lo: scaled low limit
1986
 //  lo: scaled low limit
1991
 //  hi: scaled high limit
1987
 //  hi: scaled high limit
1992
-//  dp: decimal places, 0 for integers
1993
-//  val: scaled value
1988
+//  val: value
1989
+//  LiveUpdate: live update function when the encoder changes
1990
+//  Apply: update function when the encoder is pressed
1991
+void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
1992
+  SetOnClick(process, lo, hi, 0, val, Apply, LiveUpdate);
1993
+  Draw_Menu_IntValue(HMI_data.Selected_Color, CurrentMenu->line(), 4, HMI_value.Value);
1994
+}
1995
+
1996
+// Generic onclick event for float values
1997
+//  process: process id HMI destiny
1998
+//  lo: scaled low limit
1999
+//  hi: scaled high limit
2000
+//  val: value
1994
 //  LiveUpdate: live update function when the encoder changes
2001
 //  LiveUpdate: live update function when the encoder changes
1995
 //  Apply: update function when the encoder is pressed
2002
 //  Apply: update function when the encoder is pressed
1996
-void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
1997
-  SetOnClick(process, lo, hi, dp, val, Apply, LiveUpdate);
1998
-  dp ? DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value)
1999
-     : Draw_Menu_IntValue(HMI_data.Selected_Color, CurrentMenu->line(), 4, HMI_value.Value);
2003
+void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2004
+  const int32_t value =  round(val * POW(10, dp));
2005
+  SetOnClick(process, lo * POW(10, dp), hi * POW(10, dp), dp, value, Apply, LiveUpdate);
2006
+  DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), val);
2000
 }
2007
 }
2001
 
2008
 
2002
 // Generic onclick event for integer values
2009
 // Generic onclick event for integer values
2005
 //  val: value
2012
 //  val: value
2006
 //  LiveUpdate: live update function when the encoder changes
2013
 //  LiveUpdate: live update function when the encoder changes
2007
 //  Apply: update function when the encoder is pressed
2014
 //  Apply: update function when the encoder is pressed
2008
-void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2009
-  SetValueOnClick(SetInt, lo, hi, 0, val, Apply, LiveUpdate);
2015
+inline void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2016
+  SetValueOnClick(SetInt, lo, hi, val, Apply, LiveUpdate);
2010
 }
2017
 }
2011
 
2018
 
2012
 // Generic onclick event for set pointer to 16 bit uinteger values
2019
 // Generic onclick event for set pointer to 16 bit uinteger values
2017
 void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2024
 void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2018
   HMI_value.P_Int = (int16_t*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
2025
   HMI_value.P_Int = (int16_t*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
2019
   const int32_t value = *HMI_value.P_Int;
2026
   const int32_t value = *HMI_value.P_Int;
2020
-  SetValueOnClick(SetPInt, lo, hi, 0, value, Apply, LiveUpdate);
2027
+  SetValueOnClick(SetPInt, lo, hi, value, Apply, LiveUpdate);
2021
 }
2028
 }
2022
 
2029
 
2023
 // Generic onclick event for float values
2030
 // Generic onclick event for float values
2026
 //  hi: high limit
2033
 //  hi: high limit
2027
 //  dp: decimal places
2034
 //  dp: decimal places
2028
 //  val: value
2035
 //  val: value
2029
-void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2030
-  SetValueOnClick(SetFloat, lo * POW(10, dp), hi * POW(10, dp), dp, val * POW(10, dp), Apply, LiveUpdate);
2036
+inline void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2037
+  SetValueOnClick(SetFloat, lo, hi, dp, val, Apply, LiveUpdate);
2031
 }
2038
 }
2032
 
2039
 
2033
 // Generic onclick event for set pointer to float values
2040
 // Generic onclick event for set pointer to float values
2037
 //  Apply: update function when the encoder is pressed
2044
 //  Apply: update function when the encoder is pressed
2038
 void SetPFloatOnClick(const float lo, const float hi, uint8_t dp, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2045
 void SetPFloatOnClick(const float lo, const float hi, uint8_t dp, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
2039
   HMI_value.P_Float = (float*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
2046
   HMI_value.P_Float = (float*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
2040
-  const int32_t value = *HMI_value.P_Float * POW(10, dp);
2041
-  SetValueOnClick(SetPFloat, lo * POW(10, dp), hi * POW(10, dp), dp, value, Apply, LiveUpdate);
2047
+  SetValueOnClick(SetPFloat, lo, hi, dp, *HMI_value.P_Float, Apply, LiveUpdate);
2042
 }
2048
 }
2043
 
2049
 
2044
 #if ENABLED(EEPROM_SETTINGS)
2050
 #if ENABLED(EEPROM_SETTINGS)
2148
 
2154
 
2149
 #if HAS_HOTEND
2155
 #if HAS_HOTEND
2150
   void SetMoveE() {
2156
   void SetMoveE() {
2151
-    #ifdef PREVENT_COLD_EXTRUSION
2157
+    #if ENABLED(PREVENT_COLD_EXTRUSION)
2152
       if (thermalManager.tooColdToExtrude(0)) {
2158
       if (thermalManager.tooColdToExtrude(0)) {
2153
         Popup_Window_ETempTooLow();
2159
         Popup_Window_ETempTooLow();
2154
         return;
2160
         return;
2162
   char cmd[48] = "";
2168
   char cmd[48] = "";
2163
   char str_1[5] = "", str_2[5] = "";
2169
   char str_1[5] = "", str_2[5] = "";
2164
   sprintf_P(cmd, PSTR("G28OXY\nG28Z\nG0X%sY%sF5000\nG0Z0F300"),
2170
   sprintf_P(cmd, PSTR("G28OXY\nG28Z\nG0X%sY%sF5000\nG0Z0F300"),
2165
-    dtostrf(X_CENTER, 1, 1, str_1),
2166
-    dtostrf(Y_CENTER, 1, 1, str_2));
2171
+    #if ENABLED(MESH_BED_LEVELING)
2172
+      dtostrf(0, 1, 1, str_1),
2173
+      dtostrf(0, 1, 1, str_2)
2174
+    #else
2175
+      dtostrf(X_CENTER, 1, 1, str_1),
2176
+      dtostrf(Y_CENTER, 1, 1, str_2)
2177
+    #endif
2178
+  );
2167
   gcode.process_subcommands_now_P(cmd);
2179
   gcode.process_subcommands_now_P(cmd);
2168
   planner.synchronize();
2180
   planner.synchronize();
2169
   ui.set_status_P(PSTR("Now adjust Z Offset"));
2181
   ui.set_status_P(PSTR("Now adjust Z Offset"));
2175
   char str_1[5] = "", str_2[5] = "";
2187
   char str_1[5] = "", str_2[5] = "";
2176
   sprintf_P(cmd, PSTR("G28OXY\nG0Z5F300\nG0X%sY%sF5000\nM84"),
2188
   sprintf_P(cmd, PSTR("G28OXY\nG0Z5F300\nG0X%sY%sF5000\nM84"),
2177
     dtostrf(X_CENTER, 1, 1, str_1),
2189
     dtostrf(X_CENTER, 1, 1, str_1),
2178
-    dtostrf(Y_CENTER, 1, 1, str_2));
2190
+    dtostrf(Y_CENTER, 1, 1, str_2)
2191
+  );
2179
   gcode.process_subcommands_now_P(cmd);
2192
   gcode.process_subcommands_now_P(cmd);
2180
   planner.synchronize();
2193
   planner.synchronize();
2181
   thermalManager.PID_autotune(t, h, HMI_data.PidCycles, true);
2194
   thermalManager.PID_autotune(t, h, HMI_data.PidCycles, true);
2217
 #if HAS_BED_PROBE
2230
 #if HAS_BED_PROBE
2218
   void SetProbeOffsetX() { SetPFloatOnClick(-50, 50, UNITFDIGITS); }
2231
   void SetProbeOffsetX() { SetPFloatOnClick(-50, 50, UNITFDIGITS); }
2219
   void SetProbeOffsetY() { SetPFloatOnClick(-50, 50, UNITFDIGITS); }
2232
   void SetProbeOffsetY() { SetPFloatOnClick(-50, 50, UNITFDIGITS); }
2233
+  void SetProbeOffsetZ() { SetPFloatOnClick(-10, 10, 2); }
2220
   void ProbeTest() {
2234
   void ProbeTest() {
2221
     ui.set_status_P(GET_TEXT(MSG_M48_TEST));
2235
     ui.set_status_P(GET_TEXT(MSG_M48_TEST));
2222
     queue.inject_P(PSTR("G28O\nM48 P10"));
2236
     queue.inject_P(PSTR("G28O\nM48 P10"));
2250
 
2264
 
2251
 void SelColor() {
2265
 void SelColor() {
2252
   HMI_value.P_Int = (int16_t*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
2266
   HMI_value.P_Int = (int16_t*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
2253
-  HMI_value.Color[2] = GetRColor(*HMI_value.P_Int);  // Red
2267
+  HMI_value.Color[0] = GetRColor(*HMI_value.P_Int);  // Red
2254
   HMI_value.Color[1] = GetGColor(*HMI_value.P_Int);  // Green
2268
   HMI_value.Color[1] = GetGColor(*HMI_value.P_Int);  // Green
2255
-  HMI_value.Color[0] = GetBColor(*HMI_value.P_Int);  // Blue
2269
+  HMI_value.Color[2] = GetBColor(*HMI_value.P_Int);  // Blue
2256
   Draw_GetColor_Menu();
2270
   Draw_GetColor_Menu();
2257
 }
2271
 }
2258
 
2272
 
2259
 void LiveRGBColor() {
2273
 void LiveRGBColor() {
2260
     HMI_value.Color[CurrentMenu->line() - 2] = HMI_value.Value;
2274
     HMI_value.Color[CurrentMenu->line() - 2] = HMI_value.Value;
2261
-    uint16_t color = RGB(HMI_value.Color[2], HMI_value.Color[1], HMI_value.Color[0]);
2275
+    uint16_t color = RGB(HMI_value.Color[0], HMI_value.Color[1], HMI_value.Color[2]);
2262
     DWIN_Draw_Rectangle(1, color, 20, 315, DWIN_WIDTH - 20, 335);
2276
     DWIN_Draw_Rectangle(1, color, 20, 315, DWIN_WIDTH - 20, 335);
2263
 }
2277
 }
2264
 void SetRGBColor() {
2278
 void SetRGBColor() {
2265
-  const uint8_t line = CurrentMenu->line() - 2;
2266
-  SetIntOnClick(0, (line == 1) ? 63 : 31, HMI_value.Color[CurrentMenu->SelectedItem()->icon], nullptr, LiveRGBColor);
2279
+  const uint8_t color = CurrentMenu->SelectedItem()->icon;
2280
+  SetIntOnClick(0, (color == 1) ? 63 : 31, HMI_value.Color[color], nullptr, LiveRGBColor);
2267
 }
2281
 }
2268
 
2282
 
2269
 void DWIN_ApplyColor() {
2283
 void DWIN_ApplyColor() {
2270
-  *HMI_value.P_Int = RGB(HMI_value.Color[2], HMI_value.Color[1], HMI_value.Color[0]);
2284
+  *HMI_value.P_Int = RGB(HMI_value.Color[0], HMI_value.Color[1], HMI_value.Color[2]);
2271
   DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color);
2285
   DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color);
2272
   Draw_Status_Area(false);
2286
   Draw_Status_Area(false);
2273
   Draw_SelectColors_Menu();
2287
   Draw_SelectColors_Menu();
2278
 
2292
 
2279
 #if HAS_HOTEND
2293
 #if HAS_HOTEND
2280
   void ApplyHotendTemp() { thermalManager.setTargetHotend(HMI_value.Value, 0); }
2294
   void ApplyHotendTemp() { thermalManager.setTargetHotend(HMI_value.Value, 0); }
2281
-  void SetHotendTemp() { SetIntOnClick(HEATER_0_MINTEMP, HEATER_0_MAXTEMP, thermalManager.degTargetHotend(0), ApplyHotendTemp); }
2295
+  void SetHotendTemp() { SetIntOnClick(MIN_ETEMP, MAX_ETEMP, thermalManager.degTargetHotend(0), ApplyHotendTemp); }
2282
 #endif
2296
 #endif
2283
 
2297
 
2284
 #if HAS_HEATED_BED
2298
 #if HAS_HEATED_BED
2384
     gcode.process_subcommands_now_P(PSTR("G28 XYO\nG28 Z\nM211 S0\nG29S1"));
2398
     gcode.process_subcommands_now_P(PSTR("G28 XYO\nG28 Z\nM211 S0\nG29S1"));
2385
     planner.synchronize();
2399
     planner.synchronize();
2386
     #ifdef MANUAL_PROBE_START_Z
2400
     #ifdef MANUAL_PROBE_START_Z
2387
-      MMeshMoveZItem->Draw(CurrentMenu->line(MMeshMoveZItem->pos));
2401
+      const uint8_t line = CurrentMenu->line(MMeshMoveZItem->pos);
2402
+      DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, 2, VALX - 2 * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(line), MANUAL_PROBE_START_Z);
2388
     #endif
2403
     #endif
2389
   }
2404
   }
2390
 
2405
 
2391
-  void SetMMeshMoveZ() { HMI_value.axis = Z_AXIS; SetPFloatOnClick(-1, 1, 2, planner.synchronize, LiveMove);}
2406
+  void LiveMeshMoveZ() {
2407
+    *HMI_value.P_Float = HMI_value.Value / POW(10, 2);
2408
+    if (!planner.is_full()) {
2409
+      planner.synchronize();
2410
+      planner.buffer_line(current_position, homing_feedrate(Z_AXIS));
2411
+    }
2412
+  }
2413
+  void SetMMeshMoveZ() { SetPFloatOnClick(-1, 1, 2, planner.synchronize, LiveMeshMoveZ);}
2392
 
2414
 
2393
   void ManualMeshContinue(){
2415
   void ManualMeshContinue(){
2394
     gcode.process_subcommands_now_P(PSTR("G29S2"));
2416
     gcode.process_subcommands_now_P(PSTR("G29S2"));
2496
 
2518
 
2497
 void onDrawFloatMenu(MenuItemClass* menuitem, int8_t line, uint8_t dp, const float value) {
2519
 void onDrawFloatMenu(MenuItemClass* menuitem, int8_t line, uint8_t dp, const float value) {
2498
   onDrawMenuItem(menuitem, line);
2520
   onDrawMenuItem(menuitem, line);
2499
-  DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(line), value * POW(10, dp));
2521
+  DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(line), value);
2500
 }
2522
 }
2501
 
2523
 
2502
 void onDrawPFloatMenu(MenuItemClass* menuitem, int8_t line) {
2524
 void onDrawPFloatMenu(MenuItemClass* menuitem, int8_t line) {
2507
 
2529
 
2508
 void onDrawPFloat2Menu(MenuItemClass* menuitem, int8_t line) {
2530
 void onDrawPFloat2Menu(MenuItemClass* menuitem, int8_t line) {
2509
   const float value = *(float*)static_cast<MenuItemPtrClass*>(menuitem)->value;
2531
   const float value = *(float*)static_cast<MenuItemPtrClass*>(menuitem)->value;
2510
-  const int8_t dp = 2;
2511
-  onDrawFloatMenu(menuitem, line, dp, value);
2532
+  onDrawFloatMenu(menuitem, line, 2, value);
2512
 }
2533
 }
2513
 
2534
 
2514
 void onDrawChkbMenu(MenuItemClass* menuitem, int8_t line, bool checked) {
2535
 void onDrawChkbMenu(MenuItemClass* menuitem, int8_t line, bool checked) {
2643
   const uint8_t i = menuitem->icon;
2664
   const uint8_t i = menuitem->icon;
2644
   uint16_t color;
2665
   uint16_t color;
2645
   switch (i) {
2666
   switch (i) {
2646
-    case 0: color = RGB(0, 0, 31); break;
2647
-    case 1: color = RGB(0, 63, 0); break;
2648
-    case 2: color = RGB(31, 0, 0); break;
2667
+    case 0: color = RGB(31, 0, 0); break; // Red
2668
+    case 1: color = RGB(0, 63, 0); break; // Green
2669
+    case 2: color = RGB(0, 0, 31); break; // Blue
2649
     default: color = 0; break;
2670
     default: color = 0; break;
2650
   }
2671
   }
2651
   DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, ICOX + 1, MBASE(line) - 1 + 1, ICOX + 18, MBASE(line) - 1 + 18);
2672
   DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, ICOX + 1, MBASE(line) - 1 + 1, ICOX + 18, MBASE(line) - 1 + 18);
3002
   if (encoder_diffState != ENCODER_DIFF_NO) {
3023
   if (encoder_diffState != ENCODER_DIFF_NO) {
3003
     if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
3024
     if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
3004
       EncoderRate.enabled = false;
3025
       EncoderRate.enabled = false;
3005
-      DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value);
3026
+      DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
3006
       checkkey = last_checkkey;
3027
       checkkey = last_checkkey;
3007
       return 2;
3028
       return 2;
3008
     }
3029
     }
3009
     LIMIT(HMI_value.Value, lo, hi);
3030
     LIMIT(HMI_value.Value, lo, hi);
3010
-    DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value);
3031
+    DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
3011
     return 1;
3032
     return 1;
3012
   }
3033
   }
3013
   return 0;
3034
   return 0;
3182
     if (CurrentMenu != ProbeSetMenu) {
3203
     if (CurrentMenu != ProbeSetMenu) {
3183
       CurrentMenu = ProbeSetMenu;
3204
       CurrentMenu = ProbeSetMenu;
3184
       SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG
3205
       SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG
3185
-      DWINUI::MenuItemsPrepare(4);
3206
+      DWINUI::MenuItemsPrepare(5);
3186
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
3207
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
3187
       ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x);
3208
       ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x);
3188
       ADDMENUITEM_P(ICON_ProbeOffsetY, GET_TEXT(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y);
3209
       ADDMENUITEM_P(ICON_ProbeOffsetY, GET_TEXT(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y);
3210
+      ADDMENUITEM_P(ICON_ProbeOffsetZ, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetProbeOffsetZ, &probe.offset.z);
3189
       ADDMENUITEM(ICON_ProbeTest, GET_TEXT(MSG_M48_TEST), onDrawMenuItem, ProbeTest);
3211
       ADDMENUITEM(ICON_ProbeTest, GET_TEXT(MSG_M48_TEST), onDrawMenuItem, ProbeTest);
3190
     }
3212
     }
3191
     CurrentMenu->Draw();
3213
     CurrentMenu->Draw();
3203
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
3225
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
3204
       TERN_(HAS_FILAMENT_SENSOR, ADDMENUITEM(ICON_Runout, GET_TEXT(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable));
3226
       TERN_(HAS_FILAMENT_SENSOR, ADDMENUITEM(ICON_Runout, GET_TEXT(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable));
3205
       TERN_(HAS_FILAMENT_RUNOUT_DISTANCE, ADDMENUITEM_P(ICON_Runout, F("Runout Distance"), onDrawPFloatMenu, SetRunoutDistance, &runout.runout_distance()));
3227
       TERN_(HAS_FILAMENT_RUNOUT_DISTANCE, ADDMENUITEM_P(ICON_Runout, F("Runout Distance"), onDrawPFloatMenu, SetRunoutDistance, &runout.runout_distance()));
3206
-      TERN_(PREVENT_COLD_EXTRUSION, ADDMENUITEM_P(ICON_ExtrudeMinT, F("Extrude Min Temp."), onDrawPIntMenu, SetExtMinT, &thermalManager.extrude_min_temp));
3228
+      TERN_(PREVENT_COLD_EXTRUSION, ADDMENUITEM_P(ICON_ExtrudeMinT, F("Extrude Min Temp."), onDrawPIntMenu, SetExtMinT, &HMI_data.ExtMinT));
3207
       TERN_(ADVANCED_PAUSE_FEATURE, ADDMENUITEM_P(ICON_FilLoad, GET_TEXT(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length));
3229
       TERN_(ADVANCED_PAUSE_FEATURE, ADDMENUITEM_P(ICON_FilLoad, GET_TEXT(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length));
3208
       TERN_(ADVANCED_PAUSE_FEATURE, ADDMENUITEM_P(ICON_FilUnload, GET_TEXT(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length));
3230
       TERN_(ADVANCED_PAUSE_FEATURE, ADDMENUITEM_P(ICON_FilUnload, GET_TEXT(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length));
3209
     }
3231
     }
3250
     DWINUI::MenuItemsPrepare(5);
3272
     DWINUI::MenuItemsPrepare(5);
3251
     ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor);
3273
     ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor);
3252
     ADDMENUITEM(ICON_Cancel, GET_TEXT(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu);
3274
     ADDMENUITEM(ICON_Cancel, GET_TEXT(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu);
3253
-    ADDMENUITEM(0, "Blue", onDrawGetColorItem, SetRGBColor);
3275
+    ADDMENUITEM(0, "Red", onDrawGetColorItem, SetRGBColor);
3254
     ADDMENUITEM(1, "Green", onDrawGetColorItem, SetRGBColor);
3276
     ADDMENUITEM(1, "Green", onDrawGetColorItem, SetRGBColor);
3255
-    ADDMENUITEM(2, "Red", onDrawGetColorItem, SetRGBColor);
3277
+    ADDMENUITEM(2, "Blue", onDrawGetColorItem, SetRGBColor);
3256
   }
3278
   }
3257
   CurrentMenu->Draw();
3279
   CurrentMenu->Draw();
3258
   DWIN_Draw_Rectangle(1, *HMI_value.P_Int, 20, 315, DWIN_WIDTH - 20, 335);
3280
   DWIN_Draw_Rectangle(1, *HMI_value.P_Int, 20, 315, DWIN_WIDTH - 20, 335);
3270
     TERN_(HAS_HOTEND, HotendTargetItem = ADDMENUITEM_P(ICON_HotendTemp, GET_TEXT(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target));
3292
     TERN_(HAS_HOTEND, HotendTargetItem = ADDMENUITEM_P(ICON_HotendTemp, GET_TEXT(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target));
3271
     TERN_(HAS_HEATED_BED, BedTargetItem = ADDMENUITEM_P(ICON_BedTemp, GET_TEXT(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target));
3293
     TERN_(HAS_HEATED_BED, BedTargetItem = ADDMENUITEM_P(ICON_BedTemp, GET_TEXT(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target));
3272
     TERN_(HAS_FAN, FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]));
3294
     TERN_(HAS_FAN, FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]));
3273
-    #if HAS_ZOFFSET_ITEM
3274
-      #if EITHER(HAS_BED_PROBE, BABYSTEPPING)
3275
-        ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR);
3276
-      #else
3277
-        ADDMENUITEM(ICON_SetHome, GET_TEXT(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome);
3278
-      #endif
3295
+    #if HAS_ZOFFSET_ITEM && EITHER(HAS_BED_PROBE, BABYSTEPPING)
3296
+      ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR);
3279
     #endif
3297
     #endif
3280
     ADDMENUITEM_P(ICON_Flow, GET_TEXT(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
3298
     ADDMENUITEM_P(ICON_Flow, GET_TEXT(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
3281
     TERN_(ADVANCED_PAUSE_FEATURE, ADDMENUITEM(ICON_FilMan, GET_TEXT(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament));
3299
     TERN_(ADVANCED_PAUSE_FEATURE, ADDMENUITEM(ICON_FilMan, GET_TEXT(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament));
3282
-    ADDMENUITEM(ICON_Lock, PSTR("Lock Screen"), onDrawMenuItem, Goto_LockScreen);
3300
+    ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, Goto_LockScreen);
3283
     TERN_(HAS_LCD_BRIGHTNESS, ADDMENUITEM_P(ICON_Brightness, F("LCD Brightness"), onDrawPInt8Menu, SetBrightness, &ui.brightness));
3301
     TERN_(HAS_LCD_BRIGHTNESS, ADDMENUITEM_P(ICON_Brightness, F("LCD Brightness"), onDrawPInt8Menu, SetBrightness, &ui.brightness));
3284
   }
3302
   }
3285
   CurrentMenu->Draw();
3303
   CurrentMenu->Draw();
3300
     ADDMENUITEM_P(ICON_Flow, GET_TEXT(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
3318
     ADDMENUITEM_P(ICON_Flow, GET_TEXT(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
3301
   }
3319
   }
3302
   CurrentMenu->Draw();
3320
   CurrentMenu->Draw();
3303
-  DWIN_StatusChanged(nullptr);
3304
 }
3321
 }
3305
 
3322
 
3306
 #if ENABLED(ADVANCED_PAUSE_FEATURE)
3323
 #if ENABLED(ADVANCED_PAUSE_FEATURE)
3476
       DWINUI::MenuItemsPrepare(8);
3493
       DWINUI::MenuItemsPrepare(8);
3477
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
3494
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
3478
       ADDMENUITEM(ICON_PIDNozzle, F("Hotend PID"), onDrawMenuItem, HotendPID);
3495
       ADDMENUITEM(ICON_PIDNozzle, F("Hotend PID"), onDrawMenuItem, HotendPID);
3479
-      ADDMENUITEM_P(ICON_PIDValue, F(STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_hotend[0].pid.Kp);
3480
-      ADDMENUITEM_P(ICON_PIDValue, F(STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_hotend[0].pid.Ki);
3481
-      ADDMENUITEM_P(ICON_PIDValue, F(STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_hotend[0].pid.Kd);
3496
+      ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_hotend[0].pid.Kp);
3497
+      ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_hotend[0].pid.Ki);
3498
+      ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_hotend[0].pid.Kd);
3482
       ADDMENUITEM_P(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawPIntMenu, SetHotendPidT, &HMI_data.HotendPidT);
3499
       ADDMENUITEM_P(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawPIntMenu, SetHotendPidT, &HMI_data.HotendPidT);
3483
       ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
3500
       ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
3484
       TERN_(EEPROM_SETTINGS, ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom));
3501
       TERN_(EEPROM_SETTINGS, ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom));
3497
       DWINUI::MenuItemsPrepare(8);
3514
       DWINUI::MenuItemsPrepare(8);
3498
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
3515
       ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
3499
       ADDMENUITEM(ICON_PIDNozzle, F("Bed PID"), onDrawMenuItem,BedPID);
3516
       ADDMENUITEM(ICON_PIDNozzle, F("Bed PID"), onDrawMenuItem,BedPID);
3500
-      ADDMENUITEM_P(ICON_PIDValue, F(STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_bed.pid.Kp);
3501
-      ADDMENUITEM_P(ICON_PIDValue, F(STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_bed.pid.Ki);
3502
-      ADDMENUITEM_P(ICON_PIDValue, F(STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_bed.pid.Kd);
3517
+      ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_bed.pid.Kp);
3518
+      ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_bed.pid.Ki);
3519
+      ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_bed.pid.Kd);
3503
       ADDMENUITEM_P(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawPIntMenu, SetBedPidT, &HMI_data.BedPidT);
3520
       ADDMENUITEM_P(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawPIntMenu, SetBedPidT, &HMI_data.BedPidT);
3504
       ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
3521
       ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
3505
       TERN_(EEPROM_SETTINGS, ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom));
3522
       TERN_(EEPROM_SETTINGS, ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom));
3522
       ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR);
3539
       ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR);
3523
     }
3540
     }
3524
     CurrentMenu->Draw();
3541
     CurrentMenu->Draw();
3542
+    if (!axis_is_trusted(Z_AXIS)) ui.set_status_P(PSTR("WARNING: Z position is unknow, move Z to home"));
3525
   }
3543
   }
3526
 #endif
3544
 #endif
3527
 
3545
 

+ 1
- 6
Marlin/src/lcd/e3v2/enhanced/dwin.h View File

20
  */
20
  */
21
 #pragma once
21
 #pragma once
22
 
22
 
23
-/**
24
- * DWIN by Creality3D
25
- * Enhanced implementation by Miguel A. Risco-Castillo
26
- */
27
-
28
 #include "../../../inc/MarlinConfigPre.h"
23
 #include "../../../inc/MarlinConfigPre.h"
29
 #include "dwinui.h"
24
 #include "dwinui.h"
30
 #include "rotary_encoder.h"
25
 #include "rotary_encoder.h"
130
   #ifdef PREHEAT_1_TEMP_BED
125
   #ifdef PREHEAT_1_TEMP_BED
131
     int16_t BedPidT = PREHEAT_1_TEMP_BED;
126
     int16_t BedPidT = PREHEAT_1_TEMP_BED;
132
   #endif
127
   #endif
133
-  TERN_(PREVENT_COLD_EXTRUSION, uint16_t ExtMinT = EXTRUDE_MINTEMP);
128
+  TERN_(PREVENT_COLD_EXTRUSION, int16_t ExtMinT = EXTRUDE_MINTEMP);
134
 } HMI_data_t;
129
 } HMI_data_t;
135
 
130
 
136
 typedef struct {
131
 typedef struct {

+ 9
- 3
Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp View File

22
 /********************************************************************************
22
 /********************************************************************************
23
  * @file     lcd/e3v2/enhanced/dwin_lcd.cpp
23
  * @file     lcd/e3v2/enhanced/dwin_lcd.cpp
24
  * @author   LEO / Creality3D - Enhanced by Miguel A. Risco-Castillo
24
  * @author   LEO / Creality3D - Enhanced by Miguel A. Risco-Castillo
25
- * @date     2021/08/29
26
- * @version  2.1.1
25
+ * @date     2021/09/08
26
+ * @version  2.2.1
27
  * @brief    DWIN screen control functions
27
  * @brief    DWIN screen control functions
28
  ********************************************************************************/
28
  ********************************************************************************/
29
 
29
 
260
 //  x/y: Upper-left coordinate
260
 //  x/y: Upper-left coordinate
261
 //  value: Integer value
261
 //  value: Integer value
262
 void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
262
 void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
263
-                          uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value) {
263
+                          uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, long value) {
264
   size_t i = 0;
264
   size_t i = 0;
265
   DWIN_Byte(i, 0x14);
265
   DWIN_Byte(i, 0x14);
266
   // Bit 7: bshow
266
   // Bit 7: bshow
319
   DWIN_Long(i, value);
319
   DWIN_Long(i, value);
320
   DWIN_Send(i);
320
   DWIN_Send(i);
321
 }
321
 }
322
+//  value: positive float value
323
+void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
324
+                            uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
325
+  const long val = round(value * POW(10, fNum));
326
+  DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, val);
327
+}
322
 
328
 
323
 /*---------------------------------------- Picture related functions ----------------------------------------*/
329
 /*---------------------------------------- Picture related functions ----------------------------------------*/
324
 
330
 

+ 6
- 3
Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h View File

22
 /********************************************************************************
22
 /********************************************************************************
23
  * @file     lcd/e3v2/enhanced/dwin_lcd.h
23
  * @file     lcd/e3v2/enhanced/dwin_lcd.h
24
  * @author   LEO / Creality3D - Enhanced by Miguel A. Risco-Castillo
24
  * @author   LEO / Creality3D - Enhanced by Miguel A. Risco-Castillo
25
- * @date     2021/08/29
26
- * @version  2.1.1
25
+ * @date     2021/08/09
26
+ * @version  2.2.1
27
  * @brief    DWIN screen control functions
27
  * @brief    DWIN screen control functions
28
  ********************************************************************************/
28
  ********************************************************************************/
29
 
29
 
157
 //  x/y: Upper-left coordinate
157
 //  x/y: Upper-left coordinate
158
 //  value: Integer value
158
 //  value: Integer value
159
 void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
159
 void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
160
-                          uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value);
160
+                          uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, long value);
161
 
161
 
162
 // Draw a positive floating point number
162
 // Draw a positive floating point number
163
 //  bShow: true=display background color; false=don't display background color
163
 //  bShow: true=display background color; false=don't display background color
172
 //  value: Scaled positive float value
172
 //  value: Scaled positive float value
173
 void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
173
 void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
174
                             uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
174
                             uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
175
+//  value: positive float value
176
+void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
177
+                            uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value);
175
 
178
 
176
 /*---------------------------------------- Picture related functions ----------------------------------------*/
179
 /*---------------------------------------- Picture related functions ----------------------------------------*/
177
 
180
 

+ 3
- 3
Marlin/src/lcd/e3v2/enhanced/dwinui.cpp View File

1
 /**
1
 /**
2
  * DWIN UI Enhanced implementation
2
  * DWIN UI Enhanced implementation
3
  * Author: Miguel A. Risco-Castillo
3
  * Author: Miguel A. Risco-Castillo
4
- * Version: 3.6.1
5
- * Date: 2021/08/29
4
+ * Version: 3.6.3
5
+ * Date: 2021/08/09
6
  *
6
  *
7
  * This program is free software: you can redistribute it and/or modify
7
  * This program is free software: you can redistribute it and/or modify
8
  * it under the terms of the GNU Lesser General Public License as
8
  * it under the terms of the GNU Lesser General Public License as
185
 //  fNum: Number of decimal digits
185
 //  fNum: Number of decimal digits
186
 //  x/y: Upper-left point
186
 //  x/y: Upper-left point
187
 //  value: Float value
187
 //  value: Float value
188
-void DWINUI::Draw_Signed_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
188
+void DWINUI::Draw_Signed_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
189
   if (value < 0) {
189
   if (value < 0) {
190
     DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, -value);
190
     DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, -value);
191
     DWIN_Draw_String(bShow, size, color, bColor, x - 6, y, F("-"));
191
     DWIN_Draw_String(bShow, size, color, bColor, x - 6, y, F("-"));

+ 18
- 17
Marlin/src/lcd/e3v2/enhanced/dwinui.h View File

1
 /**
1
 /**
2
  * DWIN UI Enhanced implementation
2
  * DWIN UI Enhanced implementation
3
  * Author: Miguel A. Risco-Castillo
3
  * Author: Miguel A. Risco-Castillo
4
- * Version: 3.6.1
5
- * Date: 2021/08/29
4
+ * Version: 3.6.3
5
+ * Date: 2021/08/09
6
  *
6
  *
7
  * This program is free software: you can redistribute it and/or modify
7
  * This program is free software: you can redistribute it and/or modify
8
  * it under the terms of the GNU Lesser General Public License as
8
  * it under the terms of the GNU Lesser General Public License as
152
 #define ICON_PIDValue             ICON_Contact
152
 #define ICON_PIDValue             ICON_Contact
153
 #define ICON_ProbeOffsetX         ICON_StepX
153
 #define ICON_ProbeOffsetX         ICON_StepX
154
 #define ICON_ProbeOffsetY         ICON_StepY
154
 #define ICON_ProbeOffsetY         ICON_StepY
155
+#define ICON_ProbeOffsetZ         ICON_StepZ
155
 #define ICON_ProbeSet             ICON_SetEndTemp
156
 #define ICON_ProbeSet             ICON_SetEndTemp
156
 #define ICON_ProbeTest            ICON_SetEndTemp
157
 #define ICON_ProbeTest            ICON_SetEndTemp
157
 #define ICON_Pwrlossr             ICON_Motion
158
 #define ICON_Pwrlossr             ICON_Motion
392
   //  iNum: Number of digits
393
   //  iNum: Number of digits
393
   //  x/y: Upper-left coordinate
394
   //  x/y: Upper-left coordinate
394
   //  value: Integer value
395
   //  value: Integer value
395
-  inline void Draw_Int(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value) {
396
+  inline void Draw_Int(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, long value) {
396
     DWIN_Draw_IntValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, x, y, value);
397
     DWIN_Draw_IntValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, x, y, value);
397
   }
398
   }
398
-  inline void Draw_Int(uint8_t iNum, uint16_t value) {
399
+  inline void Draw_Int(uint8_t iNum, long value) {
399
     DWIN_Draw_IntValue(false, true, 0, font, textcolor, backcolor, iNum, cursor.x, cursor.y, value);
400
     DWIN_Draw_IntValue(false, true, 0, font, textcolor, backcolor, iNum, cursor.x, cursor.y, value);
400
     MoveBy(iNum * Get_font_width(font), 0);
401
     MoveBy(iNum * Get_font_width(font), 0);
401
   }
402
   }
402
-  inline void Draw_Int(uint8_t iNum, uint16_t x, uint16_t y, uint16_t value) {
403
+  inline void Draw_Int(uint8_t iNum, uint16_t x, uint16_t y, long value) {
403
     DWIN_Draw_IntValue(false, true, 0, font, textcolor, backcolor, iNum, x, y, value);
404
     DWIN_Draw_IntValue(false, true, 0, font, textcolor, backcolor, iNum, x, y, value);
404
   }
405
   }
405
   inline void Draw_Int(uint16_t color, uint8_t iNum, uint16_t x, uint16_t y, long value) {
406
   inline void Draw_Int(uint16_t color, uint8_t iNum, uint16_t x, uint16_t y, long value) {
423
   //  fNum: Number of decimal digits
424
   //  fNum: Number of decimal digits
424
   //  x/y: Upper-left point
425
   //  x/y: Upper-left point
425
   //  value: Float value
426
   //  value: Float value
426
-  inline void Draw_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
427
+  inline void Draw_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
427
     DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, value);
428
     DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, value);
428
   }
429
   }
429
-  inline void Draw_Float(uint8_t iNum, uint8_t fNum, long value) {
430
+  inline void Draw_Float(uint8_t iNum, uint8_t fNum, float value) {
430
     DWIN_Draw_FloatValue(false, true, 0, font, textcolor, backcolor, iNum, fNum,  cursor.x, cursor.y, value);
431
     DWIN_Draw_FloatValue(false, true, 0, font, textcolor, backcolor, iNum, fNum,  cursor.x, cursor.y, value);
431
     MoveBy((iNum + fNum + 1) * Get_font_width(font), 0);
432
     MoveBy((iNum + fNum + 1) * Get_font_width(font), 0);
432
   }
433
   }
433
-  inline void Draw_Float(uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
434
+  inline void Draw_Float(uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
434
     DWIN_Draw_FloatValue(false, true, 0, font, textcolor, backcolor, iNum, fNum, x, y, value);
435
     DWIN_Draw_FloatValue(false, true, 0, font, textcolor, backcolor, iNum, fNum, x, y, value);
435
   }
436
   }
436
-  inline void Draw_Float(uint16_t color, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
437
+  inline void Draw_Float(uint16_t color, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
437
     DWIN_Draw_FloatValue(false, true, 0, font, color, backcolor, iNum, fNum, x, y, value);
438
     DWIN_Draw_FloatValue(false, true, 0, font, color, backcolor, iNum, fNum, x, y, value);
438
   }
439
   }
439
-  inline void Draw_Float(uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
440
+  inline void Draw_Float(uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
440
     DWIN_Draw_FloatValue(true, true, 0, font, color, bColor, iNum, fNum, x, y, value);
441
     DWIN_Draw_FloatValue(true, true, 0, font, color, bColor, iNum, fNum, x, y, value);
441
   }
442
   }
442
-  inline void Draw_Float(uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
443
+  inline void Draw_Float(uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
443
     DWIN_Draw_FloatValue(true, true, 0, size, color, bColor, iNum, fNum, x, y, value);
444
     DWIN_Draw_FloatValue(true, true, 0, size, color, bColor, iNum, fNum, x, y, value);
444
   }
445
   }
445
 
446
 
453
   //  fNum: Number of decimal digits
454
   //  fNum: Number of decimal digits
454
   //  x/y: Upper-left point
455
   //  x/y: Upper-left point
455
   //  value: Float value
456
   //  value: Float value
456
-  void Draw_Signed_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
457
-  inline void Draw_Signed_Float(uint8_t iNum, uint8_t fNum, long value) {
457
+  void Draw_Signed_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value);
458
+  inline void Draw_Signed_Float(uint8_t iNum, uint8_t fNum, float value) {
458
     Draw_Signed_Float(false, true, 0, font, textcolor, backcolor, iNum, fNum, cursor.x, cursor.y, value);
459
     Draw_Signed_Float(false, true, 0, font, textcolor, backcolor, iNum, fNum, cursor.x, cursor.y, value);
459
     MoveBy((iNum + fNum + 1) * Get_font_width(font), 0);
460
     MoveBy((iNum + fNum + 1) * Get_font_width(font), 0);
460
   }
461
   }
461
-  inline void Draw_Signed_Float(uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
462
+  inline void Draw_Signed_Float(uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
462
     Draw_Signed_Float(false, true, 0, font, textcolor, backcolor, iNum, fNum, x, y, value);
463
     Draw_Signed_Float(false, true, 0, font, textcolor, backcolor, iNum, fNum, x, y, value);
463
   }
464
   }
464
-  inline void Draw_Signed_Float(uint8_t size, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
465
+  inline void Draw_Signed_Float(uint8_t size, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
465
     Draw_Signed_Float(false, true, 0, size, textcolor, backcolor, iNum, fNum, x, y, value);
466
     Draw_Signed_Float(false, true, 0, size, textcolor, backcolor, iNum, fNum, x, y, value);
466
   }
467
   }
467
-  inline void Draw_Signed_Float(uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
468
+  inline void Draw_Signed_Float(uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
468
     Draw_Signed_Float(true, true, 0, font, color, bColor, iNum, fNum, x, y, value);
469
     Draw_Signed_Float(true, true, 0, font, color, bColor, iNum, fNum, x, y, value);
469
   }
470
   }
470
-  inline void Draw_Signed_Float(uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
471
+  inline void Draw_Signed_Float(uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
471
     Draw_Signed_Float(true, true, 0, size, color, bColor, iNum, fNum, x, y, value);
472
     Draw_Signed_Float(true, true, 0, size, color, bColor, iNum, fNum, x, y, value);
472
   }
473
   }
473
 
474
 

Loading…
Cancel
Save