|
|
|
@ -495,14 +495,19 @@ static void lcd_tune_menu() {
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Nozzle:
|
|
|
|
|
// Nozzle 1:
|
|
|
|
|
// Nozzle 2:
|
|
|
|
|
// Nozzle 3:
|
|
|
|
|
// Nozzle 4:
|
|
|
|
|
//
|
|
|
|
|
#if EXTRUDERS == 1
|
|
|
|
|
#if TEMP_SENSOR_0 != 0
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 15);
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
#else //EXTRUDERS > 1
|
|
|
|
|
#if TEMP_SENSOR_0 != 0
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_NOZZLE MSG_N1, &target_temperature[0], 0, HEATER_0_MAXTEMP - 15);
|
|
|
|
|
#endif
|
|
|
|
|
#if TEMP_SENSOR_1 != 0
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_NOZZLE MSG_N2, &target_temperature[1], 0, HEATER_1_MAXTEMP - 15);
|
|
|
|
|
#endif
|
|
|
|
@ -536,18 +541,21 @@ static void lcd_tune_menu() {
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW, &extruder_multiplier[active_extruder], 10, 999);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Flow 0:
|
|
|
|
|
// Flow:
|
|
|
|
|
// Flow 1:
|
|
|
|
|
// Flow 2:
|
|
|
|
|
// Flow 3:
|
|
|
|
|
// Flow 4:
|
|
|
|
|
//
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N0, &extruder_multiplier[0], 10, 999);
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N1, &extruder_multiplier[1], 10, 999);
|
|
|
|
|
#if EXTRUDERS == 1
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW, &extruder_multiplier[0], 10, 999);
|
|
|
|
|
#else // EXTRUDERS > 1
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N1, &extruder_multiplier[0], 10, 999);
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N2, &extruder_multiplier[1], 10, 999);
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N2, &extruder_multiplier[2], 10, 999);
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N3, &extruder_multiplier[2], 10, 999);
|
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N3, &extruder_multiplier[3], 10, 999);
|
|
|
|
|
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_N4, &extruder_multiplier[3], 10, 999);
|
|
|
|
|
#endif //EXTRUDERS > 3
|
|
|
|
|
#endif //EXTRUDERS > 2
|
|
|
|
|
#endif //EXTRUDERS > 1
|
|
|
|
@ -810,7 +818,7 @@ static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, Y_MIN_POS, Y_MAX_
|
|
|
|
|
static void lcd_move_z() { _lcd_move(PSTR(MSG_MOVE_Z), Z_AXIS, Z_MIN_POS, Z_MAX_POS); }
|
|
|
|
|
static void lcd_move_e(
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
uint8_t e = 0
|
|
|
|
|
uint8_t e
|
|
|
|
|
#endif
|
|
|
|
|
) {
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
@ -823,7 +831,24 @@ static void lcd_move_e(
|
|
|
|
|
line_to_current(E_AXIS);
|
|
|
|
|
lcdDrawUpdate = 1;
|
|
|
|
|
}
|
|
|
|
|
if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_MOVE_E), ftostr31(current_position[E_AXIS]));
|
|
|
|
|
if (lcdDrawUpdate) {
|
|
|
|
|
PGM_P pos_label;
|
|
|
|
|
#if EXTRUDERS == 1
|
|
|
|
|
pos_label = PSTR(MSG_MOVE_E);
|
|
|
|
|
#else
|
|
|
|
|
switch (e) {
|
|
|
|
|
case 0: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E1); break;
|
|
|
|
|
case 1: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E2); break;
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
case 2: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E3); break;
|
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
|
case 3: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E4); break;
|
|
|
|
|
#endif //EXTRUDERS > 3
|
|
|
|
|
#endif //EXTRUDERS > 2
|
|
|
|
|
}
|
|
|
|
|
#endif //EXTRUDERS > 1
|
|
|
|
|
lcd_implementation_drawedit(pos_label, ftostr31(current_position[E_AXIS]));
|
|
|
|
|
}
|
|
|
|
|
if (LCD_CLICKED) lcd_goto_menu(lcd_move_menu_axis);
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
active_extruder = original_active_extruder;
|
|
|
|
@ -831,6 +856,7 @@ static void lcd_move_e(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
static void lcd_move_e0() { lcd_move_e(0); }
|
|
|
|
|
static void lcd_move_e1() { lcd_move_e(1); }
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
static void lcd_move_e2() { lcd_move_e(2); }
|
|
|
|
@ -853,13 +879,15 @@ static void lcd_move_menu_axis() {
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y);
|
|
|
|
|
if (move_menu_scale < 10.0) {
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z);
|
|
|
|
|
#if EXTRUDERS == 1
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e);
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E1, lcd_move_e1);
|
|
|
|
|
#else
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E1, lcd_move_e0);
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E2, lcd_move_e1);
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E2, lcd_move_e2);
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E3, lcd_move_e2);
|
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E3, lcd_move_e3);
|
|
|
|
|
MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_e3);
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
#endif // EXTRUDERS > 1
|
|
|
|
@ -942,18 +970,18 @@ static void lcd_control_menu() {
|
|
|
|
|
PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
|
|
|
|
|
updatePID();
|
|
|
|
|
}
|
|
|
|
|
void copy_and_scalePID_i_E1() { copy_and_scalePID_i(0); }
|
|
|
|
|
void copy_and_scalePID_d_E1() { copy_and_scalePID_d(0); }
|
|
|
|
|
#define COPY_AND_SCALE(eindex) \
|
|
|
|
|
void copy_and_scalePID_i_E ## eindex() { copy_and_scalePID_i(eindex); } \
|
|
|
|
|
void copy_and_scalePID_d_E ## eindex() { copy_and_scalePID_d(eindex); }
|
|
|
|
|
|
|
|
|
|
COPY_AND_SCALE(0);
|
|
|
|
|
#if ENABLED(PID_PARAMS_PER_EXTRUDER)
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
void copy_and_scalePID_i_E2() { copy_and_scalePID_i(1); }
|
|
|
|
|
void copy_and_scalePID_d_E2() { copy_and_scalePID_d(1); }
|
|
|
|
|
COPY_AND_SCALE(1);
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
void copy_and_scalePID_i_E3() { copy_and_scalePID_i(2); }
|
|
|
|
|
void copy_and_scalePID_d_E3() { copy_and_scalePID_d(2); }
|
|
|
|
|
COPY_AND_SCALE(2);
|
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
|
void copy_and_scalePID_i_E4() { copy_and_scalePID_i(3); }
|
|
|
|
|
void copy_and_scalePID_d_E4() { copy_and_scalePID_d(3); }
|
|
|
|
|
COPY_AND_SCALE(3);
|
|
|
|
|
#endif //EXTRUDERS > 3
|
|
|
|
|
#endif //EXTRUDERS > 2
|
|
|
|
|
#endif //EXTRUDERS > 1
|
|
|
|
@ -975,12 +1003,17 @@ static void lcd_control_temperature_menu() {
|
|
|
|
|
MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Nozzle, Nozzle 2, Nozzle 3, Nozzle 4
|
|
|
|
|
// Nozzle
|
|
|
|
|
// Nozzle 1, Nozzle 2, Nozzle 3, Nozzle 4
|
|
|
|
|
//
|
|
|
|
|
#if EXTRUDERS == 1
|
|
|
|
|
#if TEMP_SENSOR_0 != 0
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 15);
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
#else //EXTRUDERS > 1
|
|
|
|
|
#if TEMP_SENSOR_0 != 0
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_NOZZLE MSG_N1, &target_temperature[0], 0, HEATER_0_MAXTEMP - 15);
|
|
|
|
|
#endif
|
|
|
|
|
#if TEMP_SENSOR_1 != 0
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_NOZZLE MSG_N2, &target_temperature[1], 0, HEATER_1_MAXTEMP - 15);
|
|
|
|
|
#endif
|
|
|
|
@ -1020,58 +1053,41 @@ static void lcd_control_temperature_menu() {
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// PID-P, PID-I, PID-D, PID-C
|
|
|
|
|
// PID-P E1, PID-I E1, PID-D E1, PID-C E1
|
|
|
|
|
// PID-P E2, PID-I E2, PID-D E2, PID-C E2
|
|
|
|
|
// PID-P E3, PID-I E3, PID-D E3, PID-C E3
|
|
|
|
|
// PID-P E4, PID-I E4, PID-D E4, PID-C E4
|
|
|
|
|
//
|
|
|
|
|
#if ENABLED(PIDTEMP)
|
|
|
|
|
// set up temp variables - undo the default scaling
|
|
|
|
|
raw_Ki = unscalePID_i(PID_PARAM(Ki,0));
|
|
|
|
|
raw_Kd = unscalePID_d(PID_PARAM(Kd,0));
|
|
|
|
|
MENU_ITEM_EDIT(float52, MSG_PID_P, &PID_PARAM(Kp,0), 1, 9990);
|
|
|
|
|
// i is typically a small value so allows values below 1
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I, &raw_Ki, 0.01, 9990, copy_and_scalePID_i_E1);
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D, &raw_Kd, 1, 9990, copy_and_scalePID_d_E1);
|
|
|
|
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
|
|
|
|
MENU_ITEM_EDIT(float3, MSG_PID_C, &PID_PARAM(Kc,0), 1, 9990);
|
|
|
|
|
#endif//PID_ADD_EXTRUSION_RATE
|
|
|
|
|
#if ENABLED(PID_PARAMS_PER_EXTRUDER)
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
// set up temp variables - undo the default scaling
|
|
|
|
|
raw_Ki = unscalePID_i(PID_PARAM(Ki,1));
|
|
|
|
|
raw_Kd = unscalePID_d(PID_PARAM(Kd,1));
|
|
|
|
|
MENU_ITEM_EDIT(float52, MSG_PID_P MSG_E2, &PID_PARAM(Kp,1), 1, 9990);
|
|
|
|
|
// i is typically a small value so allows values below 1
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I MSG_E2, &raw_Ki, 0.01, 9990, copy_and_scalePID_i_E2);
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D MSG_E2, &raw_Kd, 1, 9990, copy_and_scalePID_d_E2);
|
|
|
|
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
|
|
|
|
MENU_ITEM_EDIT(float3, MSG_PID_C MSG_E2, &PID_PARAM(Kc,1), 1, 9990);
|
|
|
|
|
#endif//PID_ADD_EXTRUSION_RATE
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
// set up temp variables - undo the default scaling
|
|
|
|
|
raw_Ki = unscalePID_i(PID_PARAM(Ki,2));
|
|
|
|
|
raw_Kd = unscalePID_d(PID_PARAM(Kd,2));
|
|
|
|
|
MENU_ITEM_EDIT(float52, MSG_PID_P MSG_E3, &PID_PARAM(Kp,2), 1, 9990);
|
|
|
|
|
// i is typically a small value so allows values below 1
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I MSG_E3, &raw_Ki, 0.01, 9990, copy_and_scalePID_i_E3);
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D MSG_E3, &raw_Kd, 1, 9990, copy_and_scalePID_d_E3);
|
|
|
|
|
#define _PID_MENU_ITEMS(ELABEL, eindex) \
|
|
|
|
|
raw_Ki = unscalePID_i(PID_PARAM(Ki, eindex)); \
|
|
|
|
|
raw_Kd = unscalePID_d(PID_PARAM(Kd, eindex)); \
|
|
|
|
|
MENU_ITEM_EDIT(float52, MSG_PID_P ELABEL, &PID_PARAM(Kp, eindex), 1, 9990); \
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I ELABEL, &raw_Ki, 0.01, 9990, copy_and_scalePID_i_E ## eindex); \
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D ELABEL, &raw_Kd, 1, 9990, copy_and_scalePID_d_E ## eindex)
|
|
|
|
|
|
|
|
|
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
|
|
|
|
MENU_ITEM_EDIT(float3, MSG_PID_C MSG_E3, &PID_PARAM(Kc,2), 1, 9990);
|
|
|
|
|
#endif//PID_ADD_EXTRUSION_RATE
|
|
|
|
|
#define PID_MENU_ITEMS(ELABEL, eindex) \
|
|
|
|
|
_PID_MENU_ITEMS(ELABEL, eindex); \
|
|
|
|
|
MENU_ITEM_EDIT(float3, MSG_PID_C ELABEL, &PID_PARAM(Kc, eindex), 1, 9990)
|
|
|
|
|
#else
|
|
|
|
|
#define PID_MENU_ITEMS(ELABEL, eindex) _PID_MENU_ITEMS(ELABEL, eindex)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if ENABLED(PID_PARAMS_PER_EXTRUDER) && EXTRUDERS > 1
|
|
|
|
|
PID_MENU_ITEMS(MSG_E1, 0);
|
|
|
|
|
PID_MENU_ITEMS(MSG_E2, 1);
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
PID_MENU_ITEMS(MSG_E3, 2);
|
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
|
// set up temp variables - undo the default scaling
|
|
|
|
|
raw_Ki = unscalePID_i(PID_PARAM(Ki,3));
|
|
|
|
|
raw_Kd = unscalePID_d(PID_PARAM(Kd,3));
|
|
|
|
|
MENU_ITEM_EDIT(float52, MSG_PID_P MSG_E4, &PID_PARAM(Kp,3), 1, 9990);
|
|
|
|
|
// i is typically a small value so allows values below 1
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I MSG_E4, &raw_Ki, 0.01, 9990, copy_and_scalePID_i_E4);
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D MSG_E4, &raw_Kd, 1, 9990, copy_and_scalePID_d_E4);
|
|
|
|
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
|
|
|
|
MENU_ITEM_EDIT(float3, MSG_PID_C MSG_E4, &PID_PARAM(Kc,3), 1, 9990);
|
|
|
|
|
#endif//PID_ADD_EXTRUSION_RATE
|
|
|
|
|
PID_MENU_ITEMS(MSG_E4, 3);
|
|
|
|
|
#endif //EXTRUDERS > 3
|
|
|
|
|
#endif //EXTRUDERS > 2
|
|
|
|
|
#endif//EXTRUDERS > 1
|
|
|
|
|
#endif //PID_PARAMS_PER_EXTRUDER
|
|
|
|
|
#else //!PID_PARAMS_PER_EXTRUDER || EXTRUDERS == 1
|
|
|
|
|
PID_MENU_ITEMS("", 0);
|
|
|
|
|
#endif //!PID_PARAMS_PER_EXTRUDER || EXTRUDERS == 1
|
|
|
|
|
|
|
|
|
|
#endif //PIDTEMP
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
@ -1181,13 +1197,15 @@ static void lcd_control_volumetric_menu() {
|
|
|
|
|
MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &volumetric_enabled, calculate_volumetric_multipliers);
|
|
|
|
|
|
|
|
|
|
if (volumetric_enabled) {
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_0, &filament_size[0], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_1, &filament_size[1], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
#if EXTRUDERS == 1
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &filament_size[0], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
#else //EXTRUDERS > 1
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E1, &filament_size[0], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E2, &filament_size[1], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_2, &filament_size[2], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E3, &filament_size[2], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_3, &filament_size[3], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &filament_size[3], 1.5, 3.25, calculate_volumetric_multipliers);
|
|
|
|
|
#endif //EXTRUDERS > 3
|
|
|
|
|
#endif //EXTRUDERS > 2
|
|
|
|
|
#endif //EXTRUDERS > 1
|
|
|
|
|