|
|
|
@ -138,6 +138,7 @@
|
|
|
|
|
#define MINUNITMULT pow(10, UNITFDIGITS)
|
|
|
|
|
|
|
|
|
|
#define ENCODER_WAIT_MS 20
|
|
|
|
|
#define DWIN_VAR_UPDATE_INTERVAL 1024
|
|
|
|
|
#define DWIN_SCROLL_UPDATE_INTERVAL SEC_TO_MS(2)
|
|
|
|
|
#define DWIN_REMAIN_TIME_UPDATE_INTERVAL SEC_TO_MS(20)
|
|
|
|
|
|
|
|
|
@ -1581,6 +1582,41 @@ void HMI_StepXYZE() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Draw X, Y, Z and blink if in an un-homed or un-trusted state
|
|
|
|
|
void _update_axis_value(const AxisEnum axis, const uint16_t x, const uint16_t y, const bool blink, const bool force) {
|
|
|
|
|
const bool draw_qmark = axis_should_home(axis),
|
|
|
|
|
draw_empty = NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) && !draw_qmark && !axis_is_trusted(axis);
|
|
|
|
|
|
|
|
|
|
// Check for a position change
|
|
|
|
|
static xyz_pos_t oldpos = { -1, -1, -1 };
|
|
|
|
|
const float p = current_position[axis];
|
|
|
|
|
const bool changed = oldpos[axis] != p;
|
|
|
|
|
if (changed) oldpos[axis] = p;
|
|
|
|
|
|
|
|
|
|
if (force || changed || draw_qmark || draw_empty) {
|
|
|
|
|
if (blink && draw_qmark)
|
|
|
|
|
DWIN_Draw_String(false, true, font8x16, Color_White, Color_Bg_Black, x, y, F("???.?"));
|
|
|
|
|
else if (blink && draw_empty)
|
|
|
|
|
DWIN_Draw_String(false, true, font8x16, Color_White, Color_Bg_Black, x, y, F(" "));
|
|
|
|
|
else
|
|
|
|
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, Color_White, Color_Bg_Black, 3, 1, x, y, p * 10);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _draw_xyz_position(const bool force) {
|
|
|
|
|
//SERIAL_ECHOPGM("Draw XYZ:");
|
|
|
|
|
static bool _blink = false;
|
|
|
|
|
const bool blink = !!(millis() & 0x400UL);
|
|
|
|
|
if (force || blink != _blink) {
|
|
|
|
|
_blink = blink;
|
|
|
|
|
//SERIAL_ECHOPGM(" (blink)");
|
|
|
|
|
_update_axis_value(X_AXIS, 35, 459, blink, true);
|
|
|
|
|
_update_axis_value(Y_AXIS, 120, 459, blink, true);
|
|
|
|
|
_update_axis_value(Z_AXIS, 205, 459, blink, true);
|
|
|
|
|
}
|
|
|
|
|
//SERIAL_EOL();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void update_variable() {
|
|
|
|
|
#if HAS_HOTEND
|
|
|
|
|
static float _hotendtemp = 0;
|
|
|
|
@ -1639,29 +1675,51 @@ void update_variable() {
|
|
|
|
|
|
|
|
|
|
#if HAS_HOTEND
|
|
|
|
|
if (_new_hotend_temp)
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 33, 382, _hotendtemp);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 28, 384, _hotendtemp);
|
|
|
|
|
if (_new_hotend_target)
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 33 + 4 * STAT_CHR_W + 6, 382, _hotendtarget);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 25 + 4 * STAT_CHR_W + 6, 384, _hotendtarget);
|
|
|
|
|
|
|
|
|
|
static int16_t _flow = planner.flow_percentage[0];
|
|
|
|
|
if (_flow != planner.flow_percentage[0]) {
|
|
|
|
|
_flow = planner.flow_percentage[0];
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 116 + 2 * STAT_CHR_W, 417, _flow);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HAS_HEATED_BED
|
|
|
|
|
if (_new_bed_temp)
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 178, 382, _bedtemp);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 28, 417, _bedtemp);
|
|
|
|
|
if (_new_bed_target)
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 178 + 4 * STAT_CHR_W + 6, 382, _bedtarget);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 25 + 4 * STAT_CHR_W + 6, 417, _bedtarget);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static int16_t _feedrate = 100;
|
|
|
|
|
if (_feedrate != feedrate_percentage) {
|
|
|
|
|
_feedrate = feedrate_percentage;
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 33 + 2 * STAT_CHR_W, 429, _feedrate);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 116 + 2 * STAT_CHR_W, 384, _feedrate);
|
|
|
|
|
}
|
|
|
|
|
#if HAS_ZOFFSET_ITEM
|
|
|
|
|
if (last_zoffset != BABY_Z_VAR) {
|
|
|
|
|
last_zoffset = BABY_Z_VAR;
|
|
|
|
|
DWIN_Draw_Signed_Float(DWIN_FONT_STAT, Color_Bg_Black, 2, 2, 178 + STAT_CHR_W, 429, last_zoffset * 100);
|
|
|
|
|
|
|
|
|
|
#if HAS_FAN
|
|
|
|
|
if (_fanspeed != thermalManager.fan_speed[0]) {
|
|
|
|
|
_fanspeed = thermalManager.fan_speed[0];
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 195 + 2 * STAT_CHR_W, 384, _fanspeed);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static float _offset = 0;
|
|
|
|
|
if (BABY_Z_VAR != _offset) {
|
|
|
|
|
_offset = BABY_Z_VAR;
|
|
|
|
|
if (BABY_Z_VAR < 0) {
|
|
|
|
|
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 2, 2, 207, 417, -_offset * 100);
|
|
|
|
|
DWIN_Draw_String(false, true, font8x16, Color_White, Color_Bg_Black, 205, 419, F("-"));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 2, 2, 207, 417, _offset * 100);
|
|
|
|
|
DWIN_Draw_String(false, true, font8x16, Color_White, Color_Bg_Black, 205, 419, F(" "));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_draw_xyz_position(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1853,39 +1911,55 @@ void HMI_SDCardUpdate() {
|
|
|
|
|
//
|
|
|
|
|
void Draw_Status_Area(const bool with_update) {
|
|
|
|
|
|
|
|
|
|
// Clear the bottom area of the screen
|
|
|
|
|
DWIN_Draw_Rectangle(1, Color_Bg_Black, 0, STATUS_Y, DWIN_WIDTH, DWIN_HEIGHT - 1);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Status Area
|
|
|
|
|
//
|
|
|
|
|
#if HAS_HOTEND
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_HotendTemp, 13, 381);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 33, 382, thermalManager.temp_hotend[0].celsius);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 33 + 3 * STAT_CHR_W + 5, 383, F("/"));
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 33 + 4 * STAT_CHR_W + 6, 382, thermalManager.temp_hotend[0].target);
|
|
|
|
|
#endif
|
|
|
|
|
#if HOTENDS > 1
|
|
|
|
|
// DWIN_ICON_Show(ICON,ICON_HotendTemp, 13, 381);
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_HotendTemp, 10, 383);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 28, 384, thermalManager.temp_hotend[0].celsius);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 25 + 3 * STAT_CHR_W + 5, 384, F("/"));
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 25 + 4 * STAT_CHR_W + 6, 384, thermalManager.temp_hotend[0].target);
|
|
|
|
|
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_StepE, 112, 417);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 116 + 2 * STAT_CHR_W, 417, planner.flow_percentage[0]);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 116 + 5 * STAT_CHR_W + 2, 417, F("%"));
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HAS_HEATED_BED
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_BedTemp, 158, 381);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 178, 382, thermalManager.temp_bed.celsius);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 178 + 3 * STAT_CHR_W + 5, 383, F("/"));
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 178 + 4 * STAT_CHR_W + 6, 382, thermalManager.temp_bed.target);
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_BedTemp, 10, 416);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 28, 417, thermalManager.temp_bed.celsius);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 25 + 3 * STAT_CHR_W + 5, 417, F("/"));
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 25 + 4 * STAT_CHR_W + 6, 417, thermalManager.temp_bed.target);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_Speed, 13, 429);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 33 + 2 * STAT_CHR_W, 429, feedrate_percentage);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 33 + 5 * STAT_CHR_W + 2, 429, F("%"));
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_Speed, 113, 383);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 116 + 2 * STAT_CHR_W, 384, feedrate_percentage);
|
|
|
|
|
DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 116 + 5 * STAT_CHR_W + 2, 384, F("%"));
|
|
|
|
|
|
|
|
|
|
#if HAS_FAN
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_FanSpeed, 187, 383);
|
|
|
|
|
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 3, 195 + 2 * STAT_CHR_W, 384, thermalManager.fan_speed[0]);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HAS_ZOFFSET_ITEM
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_Zoffset, 158, 428);
|
|
|
|
|
dwin_zoffset = BABY_Z_VAR;
|
|
|
|
|
DWIN_Draw_Signed_Float(DWIN_FONT_STAT, Color_Bg_Black, 2, 2, 178, 429, dwin_zoffset * 100);
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_Zoffset, 187, 416);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (BABY_Z_VAR < 0) {
|
|
|
|
|
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 2, 2, 207, 417, -BABY_Z_VAR * 100);
|
|
|
|
|
DWIN_Draw_String(false, true, font8x16, Color_White, Color_Bg_Black, 205, 419, F("-"));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, Color_White, Color_Bg_Black, 2, 2, 207, 417, BABY_Z_VAR * 100);
|
|
|
|
|
DWIN_Draw_String(false, true, font8x16, Color_White, Color_Bg_Black, 205, 419, F(" "));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DWIN_Draw_Rectangle(1, Line_Color, 0, 449, DWIN_WIDTH, 451);
|
|
|
|
|
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_MaxSpeedX, 10, 456);
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_MaxSpeedY, 95, 456);
|
|
|
|
|
DWIN_ICON_Show(ICON, ICON_MaxSpeedZ, 180, 456);
|
|
|
|
|
_draw_xyz_position(true);
|
|
|
|
|
|
|
|
|
|
if (with_update) {
|
|
|
|
|
DWIN_UpdateLCD();
|
|
|
|
|
delay(5);
|
|
|
|
@ -3546,14 +3620,17 @@ void DWIN_Update() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EachMomentUpdate() {
|
|
|
|
|
static millis_t next_rts_update_ms = 0;
|
|
|
|
|
static millis_t next_var_update_ms = 0, next_rts_update_ms = 0;
|
|
|
|
|
|
|
|
|
|
const millis_t ms = millis();
|
|
|
|
|
if (ELAPSED(ms, next_var_update_ms)) {
|
|
|
|
|
next_var_update_ms = ms + DWIN_VAR_UPDATE_INTERVAL;
|
|
|
|
|
update_variable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PENDING(ms, next_rts_update_ms)) return;
|
|
|
|
|
next_rts_update_ms = ms + DWIN_SCROLL_UPDATE_INTERVAL;
|
|
|
|
|
|
|
|
|
|
// variable update
|
|
|
|
|
update_variable();
|
|
|
|
|
|
|
|
|
|
if (checkkey == PrintProcess) {
|
|
|
|
|
// if print done
|
|
|
|
|
if (HMI_flag.print_finish && !HMI_flag.done_confirm_flag) {
|
|
|
|
|