Clean up DWIN code

This commit is contained in:
Scott Lahteine 2020-07-14 20:01:29 -05:00 committed by Scott Lahteine
parent 2d33a9fd7c
commit e78f19bc87
5 changed files with 1123 additions and 1101 deletions

View file

@ -1776,7 +1776,10 @@
// Shorthand for common combinations
#if HAS_TEMP_BED && HAS_HEATER_BED
#define HAS_HEATED_BED 1
#define BED_MAX_TARGET (BED_MAXTEMP - 10)
#ifndef BED_OVERSHOOT
#define BED_OVERSHOOT 10
#endif
#define BED_MAX_TARGET (BED_MAXTEMP - (BED_OVERSHOOT))
#endif
#if HAS_HEATED_BED || HAS_TEMP_CHAMBER
#define BED_OR_CHAMBER 1

View file

@ -63,6 +63,16 @@
#include "../../libs/buzzer.h"
#ifndef MACHINE_SIZE
#define MACHINE_SIZE "220x220x250"
#endif
#ifndef CORP_WEBSITE_C
#define CORP_WEBSITE_C "www.cxsw3d.com"
#endif
#ifndef CORP_WEBSITE_E
#define CORP_WEBSITE_E "www.creality.com"
#endif
#define PAUSE_HEAT true
#define USE_STRING_HEADINGS
@ -71,6 +81,41 @@
#define STAT_FONT font10x20
#define HEADER_FONT font10x20
#define MENU_CHAR_LIMIT 24
// Fan speed limit
#define FANON 255
#define FANOFF 0
// Print speed limit
#define MAX_PRINT_SPEED 999
#define MIN_PRINT_SPEED 10
// Temp limits
#if HAS_HOTEND
#define MAX_E_TEMP (HEATER_0_MAXTEMP - (HOTEND_OVERSHOOT))
#define MIN_E_TEMP HEATER_0_MINTEMP
#endif
#if HAS_HEATED_BED
#define MIN_BED_TEMP BED_MINTEMP
#endif
// Feedspeed limit (max feedspeed = DEFAULT_MAX_FEEDRATE * 2)
#define MIN_MAXFEEDSPEED 1
#define MIN_MAXACCELERATION 1
#define MIN_MAXCORNER 0.1
#define MIN_STEP 1
#define FEEDRATE_E (60)
// Mininum unit (0.1) : multiple (10)
#define MINUNITMULT 10
#define ENCODER_WAIT 20
#define DWIN_SCROLL_UPDATE_INTERVAL 2000
#define DWIN_REMAIN_TIME_UPDATE_INTERVAL 20000
constexpr uint16_t TROWS = 6, MROWS = TROWS - 1, // Total rows, and other-than-Back
TITLE_HEIGHT = 30, // Title bar height
MLINE = 53, // Menu line height
@ -133,17 +178,12 @@ float last_temp_hotend_target = 0, last_temp_bed_target = 0;
float last_temp_hotend_current = 0, last_temp_bed_current = 0;
uint8_t last_fan_speed = 0;
uint16_t last_speed = 0;
float last_E_scale = 0;
bool DWIN_lcd_sd_status = 0;
bool pause_action_flag = 0;
int temphot = 0, tempbed = 0;
float zprobe_zoffset = 0.00;
float last_zoffset = 0.00, last_probe_zoffset = 0.00;
float zprobe_zoffset = 0;
float last_zoffset = 0, last_probe_zoffset = 0;
#define FONT_EEPROM_OFFSET 0
@ -474,8 +514,9 @@ inline void Prepare_Item_Offset(const uint8_t row) {
}
inline void Prepare_Item_PLA(const uint8_t row) {
if (HMI_flag.language_flag)
if (HMI_flag.language_flag) {
DWIN_Frame_AreaCopy(1, 100, 89, 271 - 93 - 27, 479 - 378, LBLX, MBASE(row));
}
else {
DWIN_Frame_AreaCopy(1, 107, 76, 271 - 115, 479 - 393, LBLX, MBASE(row)); // "Preheat"
DWIN_Frame_AreaCopy(1, 157, 76, 181, 479 - 393, LBLX + 49 + 3, MBASE(row)); // "PLA"
@ -484,8 +525,9 @@ inline void Prepare_Item_PLA(const uint8_t row) {
}
inline void Prepare_Item_ABS(const uint8_t row) {
if (HMI_flag.language_flag)
if (HMI_flag.language_flag) {
DWIN_Frame_AreaCopy(1, 180, 89, 271 - 11 - 27, 479 - 379, LBLX, MBASE(row));
}
else {
DWIN_Frame_AreaCopy(1, 107, 76, 271 - 115, 479 - 393, LBLX, MBASE(row)); // "Preheat"
DWIN_Frame_AreaCopy(1, 172, 76, 198, 479 - 393, LBLX + 49 + 3, MBASE(row)); // "ABS"
@ -520,8 +562,9 @@ inline void Draw_Prepare_Menu() {
#define PSCROL(L) (scroll + (L))
#define PVISI(L) WITHIN(PSCROL(L), 0, MROWS)
if (HMI_flag.language_flag)
if (HMI_flag.language_flag) {
DWIN_Frame_AreaCopy(1, 133, 1, 271 - 111, 479 - 465 - 1, 14, 8); // "Prepare"
}
else {
#ifdef USE_STRING_HEADINGS
Draw_Title("Prepare"); // TODO: GET_TEXT_F
@ -898,8 +941,9 @@ void Goto_MainMenu(void) {
Clear_Main_Window();
if (HMI_flag.language_flag)
if (HMI_flag.language_flag) {
DWIN_Frame_AreaCopy(1, 2, 2, 271 - 244, 479 - 465, 14, 9); // "Home"
}
else {
#ifdef USE_STRING_HEADINGS
Draw_Title("Home"); // TODO: GET_TEXT
@ -920,17 +964,19 @@ inline ENCODER_DiffState get_encoder_state() {
const millis_t ms = millis();
if (PENDING(ms, Encoder_ms)) return ENCODER_DIFF_NO;
const ENCODER_DiffState state = Encoder_ReceiveAnalyze();
if (state != ENCODER_DIFF_NO) Encoder_ms = ms + Encoder_wait;
if (state != ENCODER_DIFF_NO) Encoder_ms = ms + ENCODER_WAIT;
return state;
}
void HMI_Move_X(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Move_X_scale += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Move_X_scale -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
checkkey = AxisMove;
EncoderRate.encoderRateEnabled = 0;
@ -943,8 +989,8 @@ void HMI_Move_X(void) {
DWIN_UpdateLCD();
return;
}
if (HMI_ValueStruct.Move_X_scale < X_MIN_POS*MinUnitMult) HMI_ValueStruct.Move_X_scale = X_MIN_POS*MinUnitMult;
else if (HMI_ValueStruct.Move_X_scale > X_MAX_POS*MinUnitMult) HMI_ValueStruct.Move_X_scale = X_MAX_POS*MinUnitMult;
NOLESS(HMI_ValueStruct.Move_X_scale, (X_MIN_POS) * MINUNITMULT);
NOMORE(HMI_ValueStruct.Move_X_scale, (X_MAX_POS) * MINUNITMULT);
current_position[X_AXIS] = HMI_ValueStruct.Move_X_scale / 10;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 216, MBASE(1), HMI_ValueStruct.Move_X_scale);
DWIN_UpdateLCD();
@ -954,10 +1000,12 @@ void HMI_Move_X(void) {
void HMI_Move_Y(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Move_Y_scale += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Move_Y_scale -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
checkkey = AxisMove;
EncoderRate.encoderRateEnabled = 0;
@ -970,8 +1018,8 @@ void HMI_Move_Y(void) {
DWIN_UpdateLCD();
return;
}
if (HMI_ValueStruct.Move_Y_scale < Y_MIN_POS*MinUnitMult) HMI_ValueStruct.Move_Y_scale = Y_MIN_POS*MinUnitMult;
else if (HMI_ValueStruct.Move_Y_scale > Y_MAX_POS*MinUnitMult) HMI_ValueStruct.Move_Y_scale = Y_MAX_POS*MinUnitMult;
NOLESS(HMI_ValueStruct.Move_Y_scale, (Y_MIN_POS) * MINUNITMULT);
NOMORE(HMI_ValueStruct.Move_Y_scale, (Y_MAX_POS) * MINUNITMULT);
current_position[Y_AXIS] = HMI_ValueStruct.Move_Y_scale / 10;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 216, MBASE(2), HMI_ValueStruct.Move_Y_scale);
DWIN_UpdateLCD();
@ -981,10 +1029,12 @@ void HMI_Move_Y(void) {
void HMI_Move_Z(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Move_Z_scale += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Move_Z_scale -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
checkkey = AxisMove;
EncoderRate.encoderRateEnabled = 0;
@ -997,10 +1047,8 @@ void HMI_Move_Z(void) {
DWIN_UpdateLCD();
return;
}
if (HMI_ValueStruct.Move_Z_scale < Z_MIN_POS*MinUnitMult)
HMI_ValueStruct.Move_Z_scale = Z_MIN_POS*MinUnitMult;
else if (HMI_ValueStruct.Move_Z_scale > Z_MAX_POS*MinUnitMult)
HMI_ValueStruct.Move_Z_scale = Z_MAX_POS*MinUnitMult;
NOLESS(HMI_ValueStruct.Move_Z_scale, Z_MIN_POS * MINUNITMULT);
NOMORE(HMI_ValueStruct.Move_Z_scale, Z_MAX_POS * MINUNITMULT);
current_position[Z_AXIS] = HMI_ValueStruct.Move_Z_scale / 10;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 216, MBASE(3), HMI_ValueStruct.Move_Z_scale);
DWIN_UpdateLCD();
@ -1010,10 +1058,12 @@ void HMI_Move_Z(void) {
void HMI_Move_E(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Move_E_scale += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Move_E_scale -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
checkkey = AxisMove;
EncoderRate.encoderRateEnabled = 0;
@ -1026,10 +1076,10 @@ void HMI_Move_E(void) {
DWIN_UpdateLCD();
return;
}
if ((HMI_ValueStruct.Move_E_scale-last_E_scale) > EXTRUDE_MAXLENGTH*MinUnitMult)
HMI_ValueStruct.Move_E_scale = last_E_scale + EXTRUDE_MAXLENGTH*MinUnitMult;
else if ((last_E_scale-HMI_ValueStruct.Move_E_scale) > EXTRUDE_MAXLENGTH*MinUnitMult)
HMI_ValueStruct.Move_E_scale = last_E_scale - EXTRUDE_MAXLENGTH*MinUnitMult;
if ((HMI_ValueStruct.Move_E_scale - last_E_scale) > (EXTRUDE_MAXLENGTH) * MINUNITMULT)
HMI_ValueStruct.Move_E_scale = last_E_scale + (EXTRUDE_MAXLENGTH) * MINUNITMULT;
else if ((last_E_scale - HMI_ValueStruct.Move_E_scale) > (EXTRUDE_MAXLENGTH) * MINUNITMULT)
HMI_ValueStruct.Move_E_scale = last_E_scale - (EXTRUDE_MAXLENGTH) * MINUNITMULT;
current_position.e = HMI_ValueStruct.Move_E_scale / 10;
show_plus_or_minus(font8x16, Select_Color, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
DWIN_UpdateLCD();
@ -1040,10 +1090,12 @@ void HMI_Zoffset(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
last_zoffset = zprobe_zoffset;
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.offset_value += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.offset_value -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
EncoderRate.encoderRateEnabled = 0;
zprobe_zoffset = HMI_ValueStruct.offset_value / 100;
@ -1083,10 +1135,12 @@ void HMI_Zoffset(void) {
void HMI_ETemp(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.E_Temp += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.E_Temp -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
EncoderRate.encoderRateEnabled = 0;
if (HMI_ValueStruct.show_mode == -1) { // temperature
@ -1113,8 +1167,8 @@ void HMI_Zoffset(void) {
return;
}
// E_Temp limit
NOMORE(HMI_ValueStruct.E_Temp, max_E_Temp);
NOLESS(HMI_ValueStruct.E_Temp, min_E_Temp);
NOMORE(HMI_ValueStruct.E_Temp, MAX_E_TEMP);
NOLESS(HMI_ValueStruct.E_Temp, MIN_E_TEMP);
// E_Temp value
if (HMI_ValueStruct.show_mode >= 0) // tune
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(2 + MROWS - index_tune), HMI_ValueStruct.E_Temp);
@ -1123,17 +1177,19 @@ void HMI_Zoffset(void) {
}
}
#endif
#endif // if HAS_HOTEND
#if HAS_HEATED_BED
void HMI_BedTemp(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Bed_Temp += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Bed_Temp -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
EncoderRate.encoderRateEnabled = 0;
if (HMI_ValueStruct.show_mode == -1) {
@ -1160,8 +1216,8 @@ void HMI_Zoffset(void) {
return;
}
// Bed_Temp limit
NOMORE(HMI_ValueStruct.Bed_Temp, max_Bed_Temp);
NOLESS(HMI_ValueStruct.Bed_Temp, min_Bed_Temp);
NOMORE(HMI_ValueStruct.Bed_Temp, BED_MAX_TARGET);
NOLESS(HMI_ValueStruct.Bed_Temp, MIN_BED_TEMP);
// Bed_Temp value
if (HMI_ValueStruct.show_mode >= 0) // tune page
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(3 + MROWS - index_tune), HMI_ValueStruct.Bed_Temp);
@ -1170,17 +1226,19 @@ void HMI_Zoffset(void) {
}
}
#endif
#endif // if HAS_HEATED_BED
#if HAS_FAN
void HMI_FanSpeed(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Fan_speed += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Fan_speed -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
EncoderRate.encoderRateEnabled = 0;
if (HMI_ValueStruct.show_mode == -1) {
@ -1207,8 +1265,8 @@ void HMI_Zoffset(void) {
return;
}
// Fan_speed limit
NOMORE(HMI_ValueStruct.Fan_speed, FanOn);
NOLESS(HMI_ValueStruct.Fan_speed, FanOff);
NOMORE(HMI_ValueStruct.Fan_speed, FANON);
NOLESS(HMI_ValueStruct.Fan_speed, FANOFF);
// Fan_speed value
if (HMI_ValueStruct.show_mode >= 0) // tune page
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(4 + MROWS - index_tune), HMI_ValueStruct.Fan_speed);
@ -1217,15 +1275,17 @@ void HMI_Zoffset(void) {
}
}
#endif
#endif // if HAS_FAN
void HMI_PrintSpeed(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.print_speed += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.print_speed -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
checkkey = Tune;
EncoderRate.encoderRateEnabled = 0;
@ -1234,8 +1294,8 @@ void HMI_PrintSpeed(void) {
return;
}
// print_speed limit
NOMORE(HMI_ValueStruct.print_speed, max_print_speed);
NOLESS(HMI_ValueStruct.print_speed, min_print_speed);
NOMORE(HMI_ValueStruct.print_speed, MAX_PRINT_SPEED);
NOLESS(HMI_ValueStruct.print_speed, MIN_PRINT_SPEED);
// print_speed value
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(1 + MROWS - index_tune), HMI_ValueStruct.print_speed);
}
@ -1244,10 +1304,12 @@ void HMI_PrintSpeed(void) {
void HMI_MaxFeedspeedXYZE(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Max_Feedspeed += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Max_Feedspeed -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
checkkey = MaxSpeed;
EncoderRate.encoderRateEnabled = 0;
@ -1267,7 +1329,7 @@ void HMI_MaxFeedspeedXYZE(void) {
#if HAS_HOTEND
else if (HMI_flag.feedspeed_flag == E_AXIS) {if (HMI_ValueStruct.Max_Feedspeed > default_max_feedrate[E_AXIS] * 2) HMI_ValueStruct.Max_Feedspeed = default_max_feedrate[E_AXIS] * 2; }
#endif
if (HMI_ValueStruct.Max_Feedspeed < min_MaxFeedspeed) HMI_ValueStruct.Max_Feedspeed = min_MaxFeedspeed;
if (HMI_ValueStruct.Max_Feedspeed < MIN_MAXFEEDSPEED) HMI_ValueStruct.Max_Feedspeed = MIN_MAXFEEDSPEED;
// MaxFeedspeed value
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 4, 210, MBASE(select_speed.now), HMI_ValueStruct.Max_Feedspeed);
}
@ -1276,8 +1338,8 @@ void HMI_MaxFeedspeedXYZE(void) {
void HMI_MaxAccelerationXYZE(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW) HMI_ValueStruct.Max_Acceleration += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW) HMI_ValueStruct.Max_Acceleration -= EncoderRate.encoderMoveValue;
if (encoder_diffState == ENCODER_DIFF_CW) { HMI_ValueStruct.Max_Acceleration += EncoderRate.encoderMoveValue;}
else if (encoder_diffState == ENCODER_DIFF_CCW) { HMI_ValueStruct.Max_Acceleration -= EncoderRate.encoderMoveValue;}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
checkkey = MaxAcceleration;
EncoderRate.encoderRateEnabled = 0;
@ -1297,7 +1359,7 @@ void HMI_MaxAccelerationXYZE(void) {
#if HAS_HOTEND
else if (HMI_flag.acc_flag == E_AXIS) {if (HMI_ValueStruct.Max_Acceleration > default_max_acceleration[E_AXIS] * 2) HMI_ValueStruct.Max_Acceleration = default_max_acceleration[E_AXIS] * 2; }
#endif
if (HMI_ValueStruct.Max_Acceleration < min_MaxAcceleration) HMI_ValueStruct.Max_Acceleration = min_MaxAcceleration;
if (HMI_ValueStruct.Max_Acceleration < MIN_MAXACCELERATION) HMI_ValueStruct.Max_Acceleration = MIN_MAXACCELERATION;
// MaxAcceleration value
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 4, 210, MBASE(select_acc.now), HMI_ValueStruct.Max_Acceleration);
}
@ -1306,10 +1368,12 @@ void HMI_MaxAccelerationXYZE(void) {
void HMI_MaxCornerXYZE(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Max_Corner += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Max_Corner -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
checkkey = MaxCorner;
EncoderRate.encoderRateEnabled = 0;
@ -1321,11 +1385,15 @@ void HMI_MaxCornerXYZE(void) {
return;
}
// MaxCorner limit
if (HMI_flag.corner_flag == X_AXIS) {if (HMI_ValueStruct.Max_Corner > default_max_jerk[X_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Corner = default_max_jerk[X_AXIS]*2*MinUnitMult;}
else if (HMI_flag.corner_flag == Y_AXIS) {if (HMI_ValueStruct.Max_Corner > default_max_jerk[Y_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Corner = default_max_jerk[Y_AXIS]*2*MinUnitMult;}
else if (HMI_flag.corner_flag == Z_AXIS) {if (HMI_ValueStruct.Max_Corner > default_max_jerk[Z_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Corner = default_max_jerk[Z_AXIS]*2*MinUnitMult;}
else if (HMI_flag.corner_flag == E_AXIS) {if (HMI_ValueStruct.Max_Corner > default_max_jerk[E_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Corner = default_max_jerk[E_AXIS]*2*MinUnitMult;}
if (HMI_ValueStruct.Max_Corner < min_MaxCorner*MinUnitMult) HMI_ValueStruct.Max_Corner = min_MaxCorner*MinUnitMult;
if (HMI_flag.corner_flag == X_AXIS)
NOMORE(HMI_ValueStruct.Max_Corner, default_max_jerk[X_AXIS] * 2 * MINUNITMULT);
else if (HMI_flag.corner_flag == Y_AXIS)
NOMORE(HMI_ValueStruct.Max_Corner, default_max_jerk[Y_AXIS] * 2 * MINUNITMULT);
else if (HMI_flag.corner_flag == Z_AXIS)
NOMORE(HMI_ValueStruct.Max_Corner, default_max_jerk[Z_AXIS] * 2 * MINUNITMULT);
else if (HMI_flag.corner_flag == E_AXIS)
NOMORE(HMI_ValueStruct.Max_Corner, default_max_jerk[E_AXIS] * 2 * MINUNITMULT);
NOLESS(HMI_ValueStruct.Max_Corner, (MIN_MAXCORNER) * MINUNITMULT);
// MaxCorner value
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_corner.now), HMI_ValueStruct.Max_Corner);
}
@ -1334,10 +1402,12 @@ void HMI_MaxCornerXYZE(void) {
void HMI_StepXYZE(void) {
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
HMI_ValueStruct.Max_Step += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
HMI_ValueStruct.Max_Step -= EncoderRate.encoderMoveValue;
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) { // return
checkkey = Step;
EncoderRate.encoderRateEnabled = 0;
@ -1349,11 +1419,15 @@ void HMI_StepXYZE(void) {
return;
}
// Step limit
if (HMI_flag.step_flag == X_AXIS) {if (HMI_ValueStruct.Max_Step > default_axis_steps_per_unit[X_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Step = default_axis_steps_per_unit[X_AXIS]*2*MinUnitMult;}
else if (HMI_flag.step_flag == Y_AXIS) {if (HMI_ValueStruct.Max_Step > default_axis_steps_per_unit[Y_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Step = default_axis_steps_per_unit[Y_AXIS]*2*MinUnitMult;}
else if (HMI_flag.step_flag == Z_AXIS) {if (HMI_ValueStruct.Max_Step > default_axis_steps_per_unit[Z_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Step = default_axis_steps_per_unit[Z_AXIS]*2*MinUnitMult;}
else if (HMI_flag.step_flag == E_AXIS) {if (HMI_ValueStruct.Max_Step > default_axis_steps_per_unit[E_AXIS]*2*MinUnitMult) HMI_ValueStruct.Max_Step = default_axis_steps_per_unit[E_AXIS]*2*MinUnitMult;}
if (HMI_ValueStruct.Max_Step < min_Step) HMI_ValueStruct.Max_Step = min_Step;
if (HMI_flag.step_flag == X_AXIS)
NOMORE(HMI_ValueStruct.Max_Step, default_axis_steps_per_unit[X_AXIS] * 2 * MINUNITMULT);
else if (HMI_flag.step_flag == Y_AXIS)
NOMORE(HMI_ValueStruct.Max_Step, default_axis_steps_per_unit[Y_AXIS] * 2 * MINUNITMULT);
else if (HMI_flag.step_flag == Z_AXIS)
NOMORE(HMI_ValueStruct.Max_Step, default_axis_steps_per_unit[Z_AXIS] * 2 * MINUNITMULT);
else if (HMI_flag.step_flag == E_AXIS)
NOMORE(HMI_ValueStruct.Max_Step, default_axis_steps_per_unit[E_AXIS] * 2 * MINUNITMULT);
NOLESS(HMI_ValueStruct.Max_Step, MIN_STEP);
// Step value
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_step.now), HMI_ValueStruct.Max_Step);
}
@ -1362,12 +1436,10 @@ void HMI_StepXYZE(void) {
void update_variable(void) {
/* Tune page temperature update */
if (checkkey == Tune) {
if (last_temp_hotend_target != thermalManager.temp_hotend[0].target) {
if (last_temp_hotend_target != thermalManager.temp_hotend[0].target)
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(2 + MROWS - index_tune), thermalManager.temp_hotend[0].target);
}
if (last_temp_bed_target != thermalManager.temp_bed.target) {
if (last_temp_bed_target != thermalManager.temp_bed.target)
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(3 + MROWS - index_tune), thermalManager.temp_bed.target);
}
if (last_fan_speed != thermalManager.fan_speed[0]) {
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(4 + MROWS - index_tune), thermalManager.fan_speed[0]);
last_fan_speed = thermalManager.fan_speed[0];
@ -1376,12 +1448,10 @@ void update_variable(void) {
/* Temperature page temperature update */
if (checkkey == TemperatureID) {
if (last_temp_hotend_target != thermalManager.temp_hotend[0].target) {
if (last_temp_hotend_target != thermalManager.temp_hotend[0].target)
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(1), thermalManager.temp_hotend[0].target);
}
if (last_temp_bed_target != thermalManager.temp_bed.target) {
if (last_temp_bed_target != thermalManager.temp_bed.target)
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(2), thermalManager.temp_bed.target);
}
if (last_fan_speed != thermalManager.fan_speed[0]) {
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(3), thermalManager.fan_speed[0]);
last_fan_speed = thermalManager.fan_speed[0];
@ -1578,8 +1648,9 @@ void HMI_SDCardUpdate(void) {
}
else {
// clean file icon
if (checkkey == SelectFile)
if (checkkey == SelectFile) {
Redraw_SD_List();
}
else if (checkkey == PrintProcess || checkkey == Tune || printingIsActive()) {
// TODO: Move card removed abort handling
// to CardReader::manage_media.
@ -1625,16 +1696,6 @@ void HMI_StartFrame(const bool with_update) {
}
}
#ifndef MACHINE_SIZE
#define MACHINE_SIZE "220x220x250"
#endif
#ifndef CORP_WEBSITE_C
#define CORP_WEBSITE_C "www.cxsw3d.com"
#endif
#ifndef CORP_WEBSITE_E
#define CORP_WEBSITE_E "www.creality.com"
#endif
inline void Draw_Info_Menu() {
Clear_Main_Window();
@ -1672,8 +1733,9 @@ inline void Draw_Info_Menu() {
inline void Draw_Print_File_Menu() {
Clear_Title_Bar();
if (HMI_flag.language_flag)
if (HMI_flag.language_flag) {
DWIN_Frame_AreaCopy(1, 0, 31, 271 - 216, 479 - 435, 14, 8);
}
else {
#ifdef USE_STRING_HEADINGS
Draw_Title("Print file"); // TODO: GET_TEXT_F
@ -1812,9 +1874,10 @@ void HMI_SelectFile(void) {
Draw_Back_First();
shift_ms = 0;
}
else
else {
Draw_SDItem(itemnum, 0); // Draw the item (and init shift name)
}
}
else {
Move_Highlight(-1, select_file.now + MROWS - index_file); // Just move highlight
Init_Shift_Name(); // ...and init the shift name
@ -1858,7 +1921,7 @@ void HMI_SelectFile(void) {
// All fans on for Ender 3 v2 ?
// The slicer should manage this for us.
// for (uint8_t i = 0; i < FAN_COUNT; i++)
// thermalManager.fan_speed[i] = FanOn;
// thermalManager.fan_speed[i] = FANON;
#endif
Goto_PrintProcess();
@ -1963,10 +2026,12 @@ void HMI_PauseOrStop(void) {
ENCODER_DiffState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW)
if (encoder_diffState == ENCODER_DIFF_CW) {
Draw_Select_Highlight(false);
else if (encoder_diffState == ENCODER_DIFF_CCW)
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
Draw_Select_Highlight(true);
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
if (select_print.now == 1) { // pause window
if (HMI_flag.select_flag) {
@ -2004,10 +2069,11 @@ void HMI_PauseOrStop(void) {
abort_flag = true;
#endif
}
else
else {
Goto_PrintProcess(); // cancel stop
}
}
}
DWIN_UpdateLCD();
}
@ -2016,7 +2082,6 @@ inline void Draw_Move_Menu() {
if (HMI_flag.language_flag) {
DWIN_Frame_AreaCopy(1, 192, 1, 271 - 38, 479 - 465, 14, 8);
DWIN_Frame_AreaCopy(1, 58, 118, 271 - 165, 479 - 347, LBLX, MBASE(1));
DWIN_Frame_AreaCopy(1, 109, 118, 271 - 114, 479 - 347, LBLX, MBASE(2));
DWIN_Frame_AreaCopy(1, 160, 118, 271 - 62, 479 - 347, LBLX, MBASE(3));
@ -2062,10 +2127,11 @@ void HMI_Prepare(void) {
else if (index_prepare == 7) Prepare_Item_Cool(MROWS);
else if (index_prepare == 8) Prepare_Item_Lang(MROWS);
}
else
else {
Move_Highlight(1, select_prepare.now + MROWS - index_prepare);
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_prepare.dec()) {
if (select_prepare.now < index_prepare - MROWS) {
@ -2083,10 +2149,11 @@ void HMI_Prepare(void) {
else if (index_prepare == 7) Prepare_Item_Disable(0);
else if (index_prepare == 8) Prepare_Item_Home(0);
}
else
else {
Move_Highlight(-1, select_prepare.now + MROWS - index_prepare);
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_prepare.now) {
case 0: // back
@ -2100,10 +2167,10 @@ void HMI_Prepare(void) {
queue.inject_P(PSTR("G92 E0"));
current_position.e = HMI_ValueStruct.Move_E_scale = 0;
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 216, MBASE(1), current_position[X_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 216, MBASE(2), current_position[Y_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 216, MBASE(3), current_position[Z_AXIS]*MinUnitMult);
show_plus_or_minus(font8x16, Background_black, 3, 1, 216, MBASE(4), current_position.e*MinUnitMult);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(1), current_position[X_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(2), current_position[Y_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(3), current_position[Z_AXIS] * MINUNITMULT);
show_plus_or_minus(font8x16, Background_black, 3, 1, 216, MBASE(4), current_position.e * MINUNITMULT);
break;
case 2: // close motion
queue.inject_P(PSTR("M84"));
@ -2230,10 +2297,11 @@ void HMI_Control(void) {
DWIN_Frame_AreaCopy(1, 0, 104, 271 - 247, 479 - 365, LBLX, MBASE(5));
}
}
else
else {
Move_Highlight(1, select_control.now + MROWS - index_control);
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_control.dec()) {
if (select_control.now < index_control - MROWS) {
@ -2246,10 +2314,11 @@ void HMI_Control(void) {
Draw_More_Icon(0 + MROWS - index_control + 1); // Temperature >
Draw_More_Icon(1 + MROWS - index_control + 1); // Motion >
}
else
else {
Move_Highlight(-1, select_control.now + MROWS - index_control);
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_control.now) {
case 0: // back
@ -2272,14 +2341,15 @@ void HMI_Control(void) {
buzzer.tone(100, 659);
buzzer.tone(100, 698);
}
else buzzer.tone(20, 440);
else
buzzer.tone(20, 440);
break;
case 4: // read EEPROM
if (settings.load()) {
buzzer.tone(100, 659);
buzzer.tone(100, 698);
}
else buzzer.tone(20, 440);
else {buzzer.tone(20, 440);}
break;
case 5: // resume EEPROM
settings.reset();
@ -2345,19 +2415,19 @@ void HMI_AxisMove(void) {
break;
case 1: // X axis move
checkkey = Move_X;
HMI_ValueStruct.Move_X_scale = current_position[X_AXIS]*MinUnitMult;
HMI_ValueStruct.Move_X_scale = current_position[X_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 216, MBASE(1), HMI_ValueStruct.Move_X_scale);
EncoderRate.encoderRateEnabled = 1;
break;
case 2: // Y axis move
checkkey = Move_Y;
HMI_ValueStruct.Move_Y_scale = current_position[Y_AXIS]*MinUnitMult;
HMI_ValueStruct.Move_Y_scale = current_position[Y_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 216, MBASE(2), HMI_ValueStruct.Move_Y_scale);
EncoderRate.encoderRateEnabled = 1;
break;
case 3: // Z axis move
checkkey = Move_Z;
HMI_ValueStruct.Move_Z_scale = current_position[Z_AXIS]*MinUnitMult;
HMI_ValueStruct.Move_Z_scale = current_position[Z_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 216, MBASE(3), HMI_ValueStruct.Move_Z_scale);
EncoderRate.encoderRateEnabled = 1;
break;
@ -2373,7 +2443,7 @@ void HMI_AxisMove(void) {
}
#endif
checkkey = Extruder;
HMI_ValueStruct.Move_E_scale = current_position.e*MinUnitMult;
HMI_ValueStruct.Move_E_scale = current_position.e * MINUNITMULT;
show_plus_or_minus(font8x16, Select_Color, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
EncoderRate.encoderRateEnabled = 1;
break;
@ -2429,7 +2499,6 @@ void HMI_Temperature(void) {
#endif
#if HAS_HOTEND
case 4: // PLA preheat setting
checkkey = PLAPreheat;
select_PLA.reset();
HMI_ValueStruct.show_mode = -2;
@ -2477,8 +2546,8 @@ void HMI_Temperature(void) {
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(3), ui.material_preset[0].fan_speed);
break;
case 5: // ABS preheat setting
case 5: // ABS preheat setting
checkkey = ABSPreheat;
select_ABS.reset();
HMI_ValueStruct.show_mode = -3;
@ -2528,7 +2597,7 @@ void HMI_Temperature(void) {
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(3), ui.material_preset[1].fan_speed);
break;
#endif
#endif // if HAS_HOTEND
}
}
DWIN_UpdateLCD();
@ -2679,10 +2748,10 @@ inline void Draw_Max_Jerk_Menu() {
Draw_Back_First();
LOOP_L_N(i, 4) Draw_Menu_Line(i + 1, ICON_MaxSpeedCornerX + i);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(1), planner.max_jerk[X_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(2), planner.max_jerk[Y_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(3), planner.max_jerk[Z_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(4), planner.max_jerk[E_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(1), planner.max_jerk[X_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(2), planner.max_jerk[Y_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(3), planner.max_jerk[Z_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(4), planner.max_jerk[E_AXIS] * MINUNITMULT);
}
inline void Draw_Steps_Menu() {
@ -2715,10 +2784,10 @@ inline void Draw_Steps_Menu() {
Draw_Back_First();
LOOP_L_N(i, 4) Draw_Menu_Line(i + 1, ICON_StepX + i);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(1), planner.settings.axis_steps_per_mm[X_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(2), planner.settings.axis_steps_per_mm[Y_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(3), planner.settings.axis_steps_per_mm[Z_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true,true,0,font8x16,White,Background_black, 3, 1, 210, MBASE(4), planner.settings.axis_steps_per_mm[E_AXIS]*MinUnitMult);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(1), planner.settings.axis_steps_per_mm[X_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(2), planner.settings.axis_steps_per_mm[Y_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(3), planner.settings.axis_steps_per_mm[Z_AXIS] * MINUNITMULT);
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 210, MBASE(4), planner.settings.axis_steps_per_mm[E_AXIS] * MINUNITMULT);
}
/* Motion */
@ -2798,10 +2867,11 @@ void HMI_Tune(void) {
Scroll_Menu(DWIN_SCROLL_UP);
Prepare_Item_Lang(5);
}
else
else {
Move_Highlight(1, select_tune.now + MROWS - index_tune);
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_tune.dec()) {
if (select_tune.now < index_tune - MROWS) {
@ -2809,24 +2879,26 @@ void HMI_Tune(void) {
Scroll_Menu(DWIN_SCROLL_DOWN);
if (index_tune == MROWS) Draw_Back_First();
}
else
else {
Move_Highlight(-1, select_tune.now + MROWS - index_tune);
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_tune.now) {
case 0: { // back
case 0: { // Back
select_print.set(0);
Goto_PrintProcess();
} break;
case 1: // print speed
}
break;
case 1: // Print speed
checkkey = PrintSpeed;
HMI_ValueStruct.print_speed = feedrate_percentage;
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(1 + MROWS - index_tune), feedrate_percentage);
EncoderRate.encoderRateEnabled = 1;
break;
#if HAS_HOTEND
case 2: // nozzle temp
case 2: // Nozzle temp
checkkey = ETemp;
HMI_ValueStruct.E_Temp = thermalManager.temp_hotend[0].target;
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(2 + MROWS - index_tune), thermalManager.temp_hotend[0].target);
@ -2834,7 +2906,7 @@ void HMI_Tune(void) {
break;
#endif
#if HAS_HEATED_BED
case 3: // bed temp
case 3: // Bed temp
checkkey = BedTemp;
HMI_ValueStruct.Bed_Temp = thermalManager.temp_bed.target;
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(3 + MROWS - index_tune), thermalManager.temp_bed.target);
@ -2842,21 +2914,21 @@ void HMI_Tune(void) {
break;
#endif
#if HAS_FAN
case 4: // fan speed
case 4: // Fan speed
checkkey = FanSpeed;
HMI_ValueStruct.Fan_speed = thermalManager.fan_speed[0];
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Select_Color, 3, 216, MBASE(4 + MROWS - index_tune), thermalManager.fan_speed[0]);
EncoderRate.encoderRateEnabled = 1;
break;
#endif
case 5: // z-offset
case 5: // Z-offset
checkkey = Homeoffset;
HMI_ValueStruct.offset_value = BABY_Z_VAR * 100;
show_plus_or_minus(font8x16, Select_Color, 2, 2, 202, MBASE(5 + MROWS - index_tune), HMI_ValueStruct.offset_value);
EncoderRate.encoderRateEnabled = 1;
break;
case 6: // language
/* select language */
case 6: // Language
// Select language
HMI_flag.language_flag = !HMI_flag.language_flag;
Clear_Main_Window();
@ -2928,7 +3000,8 @@ void HMI_PLAPreheatSetting(void) {
buzzer.tone(100, 659);
buzzer.tone(100, 698);
}
else buzzer.tone(20, 440);
else
buzzer.tone(20, 440);
break;
default: break;
}
@ -2985,7 +3058,8 @@ void HMI_ABSPreheatSetting(void) {
buzzer.tone(100, 659);
buzzer.tone(100, 698);
}
else buzzer.tone(20, 440);
else
buzzer.tone(20, 440);
break;
default:
break;
@ -3124,28 +3198,28 @@ void HMI_MaxCorner(void) {
case 1: // max corner X
checkkey = MaxCorner_value;
HMI_flag.corner_flag = X_AXIS;
HMI_ValueStruct.Max_Corner = planner.max_jerk[X_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Corner = planner.max_jerk[X_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_corner.now), HMI_ValueStruct.Max_Corner);
EncoderRate.encoderRateEnabled = 1;
break;
case 2: // max corner Y
checkkey = MaxCorner_value;
HMI_flag.corner_flag = Y_AXIS;
HMI_ValueStruct.Max_Corner = planner.max_jerk[Y_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Corner = planner.max_jerk[Y_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_corner.now), HMI_ValueStruct.Max_Corner);
EncoderRate.encoderRateEnabled = 1;
break;
case 3: // max corner Z
checkkey = MaxCorner_value;
HMI_flag.corner_flag = Z_AXIS;
HMI_ValueStruct.Max_Corner = planner.max_jerk[Z_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Corner = planner.max_jerk[Z_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_corner.now), HMI_ValueStruct.Max_Corner);
EncoderRate.encoderRateEnabled = 1;
break;
case 4: // max corner E
checkkey = MaxCorner_value;
HMI_flag.corner_flag = E_AXIS;
HMI_ValueStruct.Max_Corner = planner.max_jerk[E_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Corner = planner.max_jerk[E_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_corner.now), HMI_ValueStruct.Max_Corner);
EncoderRate.encoderRateEnabled = 1;
break;
@ -3178,28 +3252,28 @@ void HMI_Step(void) {
case 1: // max step X
checkkey = Step_value;
HMI_flag.step_flag = X_AXIS;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[X_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[X_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_step.now), HMI_ValueStruct.Max_Step);
EncoderRate.encoderRateEnabled = 1;
break;
case 2: // max step Y
checkkey = Step_value;
HMI_flag.step_flag = Y_AXIS;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[Y_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[Y_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_step.now), HMI_ValueStruct.Max_Step);
EncoderRate.encoderRateEnabled = 1;
break;
case 3: // max step Z
checkkey = Step_value;
HMI_flag.step_flag = Z_AXIS;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[Z_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[Z_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_step.now), HMI_ValueStruct.Max_Step);
EncoderRate.encoderRateEnabled = 1;
break;
case 4: // max step E
checkkey = Step_value;
HMI_flag.step_flag = E_AXIS;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[E_AXIS]*MinUnitMult;
HMI_ValueStruct.Max_Step = planner.settings.axis_steps_per_mm[E_AXIS] * MINUNITMULT;
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Select_Color, 3, 1, 210, MBASE(select_step.now), HMI_ValueStruct.Max_Step);
EncoderRate.encoderRateEnabled = 1;
break;
@ -3231,14 +3305,9 @@ void HMI_Init(void) {
}
void DWIN_Update(void) {
/* status update */
EachMomentUpdate();
/* sdcard update */
HMI_SDCardUpdate();
/* rotary encoder update */
DWIN_HandleScreen();
EachMomentUpdate(); // Status update
HMI_SDCardUpdate(); // SD card update
DWIN_HandleScreen(); // Rotary encoder update
}
void EachMomentUpdate(void) {
@ -3377,6 +3446,7 @@ void EachMomentUpdate(void) {
}
else
update_selection(encoder_diffState == ENCODER_DIFF_CCW);
DWIN_UpdateLCD();
}
}

View file

@ -31,45 +31,8 @@
#include <stdint.h>
#define MACHINE_SIZE "220x220x250"
#define CORP_WEBSITE_C "www.cxsw3d.com"
#define CORP_WEBSITE_E "www.creality.com"
/*********************************/
#define MENU_CHAR_LIMIT 24
/*fan speed limit*/
#define FanOn 255
#define FanOff 0
/*print speed limit*/
#define max_print_speed 999
#define min_print_speed 10
/*Temp limit*/
#define max_E_Temp (HEATER_0_MAXTEMP - 15)
#define min_E_Temp HEATER_0_MINTEMP
#define max_Bed_Temp (BED_MAXTEMP - 10)
#define min_Bed_Temp BED_MINTEMP
/*Feedspeed limit*/ // max feedspeed = DEFAULT_MAX_FEEDRATE * 2
#define min_MaxFeedspeed 1
#define min_MaxAcceleration 1
#define min_MaxCorner 0.1
#define min_Step 1
#define FEEDRATE_E (60)
// mininum unit (0.1) : multiple (10)
#define MinUnitMult 10
#define Encoder_wait 20
#define DWIN_SCROLL_UPDATE_INTERVAL 2000
#define DWIN_REMAIN_TIME_UPDATE_INTERVAL 20000
enum processID {
/*Process ID*/
// Process ID
MainMenu,
SelectFile,
Prepare,
@ -94,14 +57,14 @@ enum processID {
Step,
Step_value,
/*Last Process ID*/
// Last Process ID
Last_Prepare,
/*Back Process ID*/
// Back Process ID
Back_Main,
Back_Print,
/*Date variable ID*/
// Date variable ID
Move_X,
Move_Y,
Move_Z,
@ -118,17 +81,17 @@ enum processID {
#endif
PrintSpeed,
/*Window ID*/
// Window ID
Print_window,
Popup_Window
};
/*Picture ID*/
// Picture ID
#define Start_Process 0
#define Language_English 1
#define Language_Chinese 2
/*ICON ID*/
// ICON ID
#define ICON 0x09
#define ICON_LOGO 0
#define ICON_Print_0 1
@ -227,8 +190,8 @@ enum processID {
#define ICON_Info_0 90
#define ICON_Info_1 91
/*
* 3-.00x00-0x09
/**
* 3-.0The 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
* 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64
*/
@ -243,17 +206,17 @@ enum processID {
#define font28x56 0x08
#define font32x64 0x09
/* Colour */
// Color
#define White 0xFFFF
#define Background_window 0x31E8 // 弹窗背景色
#define Background_blue 0x1125 // 暗蓝背景色
#define Background_black 0x0841 // 黑色背景色
#define Font_window 0xD6BA // 弹窗字体背景色
#define Line_Color 0x3A6A // 分割线颜色
#define Rectangle_Color 0xEE2F // 蓝色方块光标颜色
#define Percent_Color 0xFE29 // 百分比颜色
#define BarFill_Color 0x10E4 // 进度条填充色
#define Select_Color 0x33BB // 选中色
#define Background_window 0x31E8 // Popup background color
#define Background_blue 0x1125 // Dark blue background color
#define Background_black 0x0841 // black background color
#define Font_window 0xD6BA // Popup font background color
#define Line_Color 0x3A6A // Split line color
#define Rectangle_Color 0xEE2F // blue square cursor color
#define Percent_Color 0xFE29 // percentage color
#define BarFill_Color 0x10E4 // fill color of progress bar
#define Select_Color 0x33BB // selected color
extern int checkkey, last_checkkey;
extern float zprobe_zoffset;
@ -262,15 +225,9 @@ extern char print_filename[16];
extern millis_t dwin_heat_time;
typedef struct {
#if HAS_HOTEND
int16_t E_Temp = 0;
#endif
#if HAS_HEATED_BED
int16_t Bed_Temp = 0;
#endif
#if HAS_FAN
int16_t Fan_speed = 0;
#endif
TERN_(HAS_HOTEND, int16_t E_Temp = 0);
TERN_(HAS_HEATED_BED, int16_t Bed_Temp = 0);
TERN_(HAS_FAN, int16_t Fan_speed = 0);
int16_t print_speed = 100;
float Max_Feedspeed = 0;
float Max_Acceleration = 0;
@ -311,12 +268,12 @@ typedef struct {
extern HMI_value_t HMI_ValueStruct;
extern HMI_Flag HMI_flag;
/* Language */
// Language
void lcd_select_language(void);
void set_english_to_eeprom(void);
void set_chinese_to_eeprom(void);
/* Show ICON*/
// Show ICO
void ICON_Print(bool show);
void ICON_Prepare(bool show);
void ICON_Control(bool show);
@ -328,7 +285,7 @@ void ICON_Pause(bool show);
void ICON_Continue(bool show);
void ICON_Stop(bool show);
/* Popup window tips */
// Popup window tips
#if HAS_HOTEND
void Popup_Window_Temperature(const bool toohigh);
void Popup_Window_ETempTooLow(void);
@ -341,7 +298,7 @@ void Popup_Window_Leveling(void);
void Goto_PrintProcess(void);
void Goto_MainMenu(void);
/* Variable control */
// Variable control
void HMI_Move_X(void);
void HMI_Move_Y(void);
void HMI_Move_Z(void);
@ -349,15 +306,10 @@ void HMI_Move_E(void);
void HMI_Zoffset(void);
#if HAS_HOTEND
void HMI_ETemp(void);
#endif
#if HAS_HEATED_BED
void HMI_BedTemp(void);
#endif
#if HAS_FAN
void HMI_FanSpeed(void);
#endif
TERN_(HAS_HOTEND, void HMI_ETemp(void));
TERN_(HAS_HEATED_BED, void HMI_BedTemp(void));
TERN_(HAS_FAN, void HMI_FanSpeed(void));
void HMI_PrintSpeed(void);
void HMI_MaxFeedspeedXYZE(void);
@ -368,40 +320,40 @@ void HMI_StepXYZE(void);
void update_variable(void);
void show_plus_or_minus(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
/* SD Card */
// SD Card
void HMI_SDCardInit(void);
void HMI_SDCardUpdate(void);
/* Main Process */
// Main Process
void Icon_print(bool value);
void Icon_control(bool value);
void Icon_temperature(bool value);
void Icon_leveling(bool value);
/* Other */
// Other
bool Pause_HeatStatus();
void HMI_StartFrame(const bool with_update); // 开机画面
void HMI_MainMenu(void); // 主进程画面
void HMI_SelectFile(void); // 文件页
void HMI_Printing(void); // 打印页
void HMI_Prepare(void); // 准备页
void HMI_Control(void); // 控制页
void HMI_Leveling(void); // 调平页
void HMI_AxisMove(void); // 轴移动菜单
void HMI_Temperature(void); // 温度菜单
void HMI_Motion(void); // 运动菜单
void HMI_Info(void); // 信息菜单
void HMI_Tune(void); // 调整菜单
void HMI_StartFrame(const bool with_update); // startup screen
void HMI_MainMenu(void); // main process screen
void HMI_SelectFile(void); // file page
void HMI_Printing(void); // print page
void HMI_Prepare(void); // prepare page
void HMI_Control(void); // control page
void HMI_Leveling(void); // Level the page
void HMI_AxisMove(void); // Axis movement menu
void HMI_Temperature(void); // Temperature menu
void HMI_Motion(void); // Sports menu
void HMI_Info(void); // Information menu
void HMI_Tune(void); // Adjust the menu
#if HAS_HOTEND
void HMI_PLAPreheatSetting(void); // PLA预热设置
void HMI_ABSPreheatSetting(void); // ABS预热设置
void HMI_PLAPreheatSetting(void); // PLA warm-up setting
void HMI_ABSPreheatSetting(void); // ABS warm-up setting
#endif
void HMI_MaxSpeed(void); // 最大速度子菜单
void HMI_MaxAcceleration(void); // 最大加速度子菜单
void HMI_MaxCorner(void); // 最大拐角速度子菜单
void HMI_Step(void); // 传动比
void HMI_MaxSpeed(void); // Maximum speed submenu
void HMI_MaxAcceleration(void); // Maximum acceleration submenu
void HMI_MaxCorner(void); // Maximum corner speed submenu
void HMI_Step(void); // transmission ratio
void HMI_Init(void);
void DWIN_Update(void);

View file

@ -30,11 +30,11 @@
/******************** IIC ********************/
//IO方向设置
//IO direction setting
#define SDA_IN() do{ PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH &= 0XFFFF0FFF; PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH |= 8 << 12; }while(0)
#define SDA_OUT() do{ PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH &= 0XFFFF0FFF; PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH |= 3 << 12; }while(0)
//IO操作函数
//IO operation function
#define IIC_SCL_0() WRITE(IIC_EEPROM_SCL, LOW)
#define IIC_SCL_1() WRITE(IIC_EEPROM_SCL, HIGH)
#define IIC_SDA_0() WRITE(IIC_EEPROM_SDA, LOW)
@ -43,18 +43,18 @@
class BL24CXX;
// IIC所有操作函数
// All operation functions of IIC
class IIC {
friend class BL24CXX;
protected:
static void init(); // 初始化IIC的IO口
static void start(); // 发送IIC开始信号
static void stop(); // 发送IIC停止信号
static void send_byte(uint8_t txd); // IIC发送一个字节
static uint8_t read_byte(unsigned char ack); // IIC读取一个字节
static uint8_t wait_ack(); // IIC等待ACK信号
static void ack(); // IIC发送ACK信号
static void nAck(); // IIC不发送ACK信号
static void init(); // Initialize the IO port of IIC
static void start(); // Send IIC start signal
static void stop(); // Send IIC stop signal
static void send_byte(uint8_t txd); // IIC sends a byte
static uint8_t read_byte(unsigned char ack); // IIC reads a byte
static uint8_t wait_ack(); // IIC waits for ACK signal
static void ack(); // IIC sends ACK signal
static void nAck(); // IIC does not send ACK signal
static void write_one_byte(uint8_t daddr, uint8_t addr, uint8_t data);
static uint8_t read_one_byte(uint8_t daddr, uint8_t addr);
@ -75,12 +75,12 @@ protected:
class BL24CXX {
public:
static void init(); //初始化IIC
static uint8_t check(); //检查器件
static uint8_t readOneByte(uint16_t ReadAddr); //指定地址读取一个字节
static void writeOneByte(uint16_t WriteAddr, uint8_t DataToWrite); //指定地址写入一个字节
static void writeLenByte(uint16_t WriteAddr, uint32_t DataToWrite, uint8_t Len);//指定地址开始写入指定长度的数据
static uint32_t readLenByte(uint16_t ReadAddr, uint8_t Len); //指定地址开始读取指定长度数据
static void write(uint16_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite); //从指定地址开始写入指定长度的数据
static void read(uint16_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead); //从指定地址开始读出指定长度的数据
static void init(); // Initialize IIC
static uint8_t check(); // Check the device
static uint8_t readOneByte(uint16_t ReadAddr); // Read a byte at the specified address
static void writeOneByte(uint16_t WriteAddr, uint8_t DataToWrite); // Write a byte at the specified address
static void writeLenByte(uint16_t WriteAddr, uint32_t DataToWrite, uint8_t Len);// The specified address begins to write the data of the specified length
static uint32_t readLenByte(uint16_t ReadAddr, uint8_t Len); // The specified address starts to read the data of the specified length
static void write(uint16_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite); // Write the specified length of data from the specified address
static void read(uint16_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead); // Read the data of the specified length from the specified address
};

View file

@ -314,10 +314,7 @@ void menu_cancelobject();
#undef PID_BED_MENU_SECTION
#endif
#if ENABLED(PID_AUTOTUNE_MENU)
#ifndef BED_OVERSHOOT
#define BED_OVERSHOOT 5
#endif
EDIT_ITEM_FAST_N(int3, -1, MSG_PID_AUTOTUNE_E, &autotune_temp_bed, PREHEAT_1_TEMP_BED, BED_MAXTEMP - BED_OVERSHOOT, []{ _lcd_autotune(-1); });
EDIT_ITEM_FAST_N(int3, -1, MSG_PID_AUTOTUNE_E, &autotune_temp_bed, PREHEAT_1_TEMP_BED, BED_MAX_TARGET, []{ _lcd_autotune(-1); });
#endif
#endif