PID_MENU option to save PROGMEM in LCD menus (#13095)
This commit is contained in:
@ -262,7 +262,7 @@ void menu_tmc();
|
||||
|
||||
#endif // PID_AUTOTUNE_MENU
|
||||
|
||||
#if ENABLED(PIDTEMP)
|
||||
#if ENABLED(PID_EDIT_MENU)
|
||||
|
||||
float raw_Ki, raw_Kd; // place-holders for Ki and Kd edits
|
||||
|
||||
@ -286,107 +286,121 @@ void menu_tmc();
|
||||
void copy_and_scalePID_i_E ## N() { copy_and_scalePID_i(N); } \
|
||||
void copy_and_scalePID_d_E ## N() { copy_and_scalePID_d(N); }
|
||||
|
||||
#if ENABLED(PID_AUTOTUNE_MENU)
|
||||
#define DEFINE_PIDTEMP_FUNCS(N) \
|
||||
_DEFINE_PIDTEMP_BASE_FUNCS(N); \
|
||||
void lcd_autotune_callback_E ## N() { _lcd_autotune(N); } typedef void _pid_##N##_void
|
||||
#else
|
||||
#define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N) typedef void _pid_##N##_void
|
||||
#endif
|
||||
#else
|
||||
|
||||
DEFINE_PIDTEMP_FUNCS(0);
|
||||
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
||||
#if HOTENDS > 1
|
||||
DEFINE_PIDTEMP_FUNCS(1);
|
||||
#if HOTENDS > 2
|
||||
DEFINE_PIDTEMP_FUNCS(2);
|
||||
#if HOTENDS > 3
|
||||
DEFINE_PIDTEMP_FUNCS(3);
|
||||
#if HOTENDS > 4
|
||||
DEFINE_PIDTEMP_FUNCS(4);
|
||||
#if HOTENDS > 5
|
||||
DEFINE_PIDTEMP_FUNCS(5);
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
#endif // HOTENDS > 2
|
||||
#endif // HOTENDS > 1
|
||||
#endif // PID_PARAMS_PER_HOTEND
|
||||
#define _DEFINE_PIDTEMP_BASE_FUNCS(N) //
|
||||
|
||||
#endif // PIDTEMP
|
||||
#endif
|
||||
|
||||
#if ENABLED(PID_AUTOTUNE_MENU)
|
||||
#define DEFINE_PIDTEMP_FUNCS(N) \
|
||||
_DEFINE_PIDTEMP_BASE_FUNCS(N); \
|
||||
void lcd_autotune_callback_E ## N() { _lcd_autotune(N); } //
|
||||
#else
|
||||
#define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N); //
|
||||
#endif
|
||||
|
||||
DEFINE_PIDTEMP_FUNCS(0);
|
||||
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
||||
#if HOTENDS > 1
|
||||
DEFINE_PIDTEMP_FUNCS(1);
|
||||
#if HOTENDS > 2
|
||||
DEFINE_PIDTEMP_FUNCS(2);
|
||||
#if HOTENDS > 3
|
||||
DEFINE_PIDTEMP_FUNCS(3);
|
||||
#if HOTENDS > 4
|
||||
DEFINE_PIDTEMP_FUNCS(4);
|
||||
#if HOTENDS > 5
|
||||
DEFINE_PIDTEMP_FUNCS(5);
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
#endif // HOTENDS > 2
|
||||
#endif // HOTENDS > 1
|
||||
#endif // PID_PARAMS_PER_HOTEND
|
||||
|
||||
#define SHOW_MENU_ADVANCED_TEMPERATURE ((ENABLED(AUTOTEMP) && HAS_TEMP_HOTEND) || ENABLED(PID_AUTOTUNE_MENU) || ENABLED(PID_EDIT_MENU))
|
||||
|
||||
//
|
||||
// Advanced Settings > Temperature
|
||||
//
|
||||
void menu_advanced_temperature() {
|
||||
START_MENU();
|
||||
MENU_BACK(MSG_ADVANCED_SETTINGS);
|
||||
//
|
||||
// Autotemp, Min, Max, Fact
|
||||
//
|
||||
#if ENABLED(AUTOTEMP) && HAS_TEMP_HOTEND
|
||||
MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &planner.autotemp_enabled);
|
||||
MENU_ITEM_EDIT(float3, MSG_MIN, &planner.autotemp_min, 0, float(HEATER_0_MAXTEMP) - 15);
|
||||
MENU_ITEM_EDIT(float3, MSG_MAX, &planner.autotemp_max, 0, float(HEATER_0_MAXTEMP) - 15);
|
||||
MENU_ITEM_EDIT(float52, MSG_FACTOR, &planner.autotemp_factor, 0, 1);
|
||||
#endif
|
||||
#if SHOW_MENU_ADVANCED_TEMPERATURE
|
||||
|
||||
//
|
||||
// PID-P, PID-I, PID-D, PID-C, PID Autotune
|
||||
// PID-P E1, PID-I E1, PID-D E1, PID-C E1, PID Autotune E1
|
||||
// PID-P E2, PID-I E2, PID-D E2, PID-C E2, PID Autotune E2
|
||||
// PID-P E3, PID-I E3, PID-D E3, PID-C E3, PID Autotune E3
|
||||
// PID-P E4, PID-I E4, PID-D E4, PID-C E4, PID Autotune E4
|
||||
// PID-P E5, PID-I E5, PID-D E5, PID-C E5, PID Autotune E5
|
||||
//
|
||||
#if ENABLED(PIDTEMP)
|
||||
void menu_advanced_temperature() {
|
||||
START_MENU();
|
||||
MENU_BACK(MSG_ADVANCED_SETTINGS);
|
||||
//
|
||||
// Autotemp, Min, Max, Fact
|
||||
//
|
||||
#if ENABLED(AUTOTEMP) && HAS_TEMP_HOTEND
|
||||
MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &planner.autotemp_enabled);
|
||||
MENU_ITEM_EDIT(float3, MSG_MIN, &planner.autotemp_min, 0, float(HEATER_0_MAXTEMP) - 15);
|
||||
MENU_ITEM_EDIT(float3, MSG_MAX, &planner.autotemp_max, 0, float(HEATER_0_MAXTEMP) - 15);
|
||||
MENU_ITEM_EDIT(float52, MSG_FACTOR, &planner.autotemp_factor, 0, 1);
|
||||
#endif
|
||||
|
||||
#define _PID_BASE_MENU_ITEMS(ELABEL, eindex) \
|
||||
raw_Ki = unscalePID_i(PID_PARAM(Ki, eindex)); \
|
||||
raw_Kd = unscalePID_d(PID_PARAM(Kd, eindex)); \
|
||||
MENU_ITEM_EDIT(float52sign, MSG_PID_P ELABEL, &PID_PARAM(Kp, eindex), 1, 9990); \
|
||||
MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_PID_I ELABEL, &raw_Ki, 0.01f, 9990, copy_and_scalePID_i_E ## eindex); \
|
||||
MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_PID_D ELABEL, &raw_Kd, 1, 9990, copy_and_scalePID_d_E ## eindex)
|
||||
//
|
||||
// PID-P, PID-I, PID-D, PID-C, PID Autotune
|
||||
// PID-P E1, PID-I E1, PID-D E1, PID-C E1, PID Autotune E1
|
||||
// PID-P E2, PID-I E2, PID-D E2, PID-C E2, PID Autotune E2
|
||||
// PID-P E3, PID-I E3, PID-D E3, PID-C E3, PID Autotune E3
|
||||
// PID-P E4, PID-I E4, PID-D E4, PID-C E4, PID Autotune E4
|
||||
// PID-P E5, PID-I E5, PID-D E5, PID-C E5, PID Autotune E5
|
||||
//
|
||||
#if ENABLED(PID_EDIT_MENU)
|
||||
|
||||
#define _PID_BASE_MENU_ITEMS(ELABEL, eindex) \
|
||||
raw_Ki = unscalePID_i(PID_PARAM(Ki, eindex)); \
|
||||
raw_Kd = unscalePID_d(PID_PARAM(Kd, eindex)); \
|
||||
MENU_ITEM_EDIT(float52sign, MSG_PID_P ELABEL, &PID_PARAM(Kp, eindex), 1, 9990); \
|
||||
MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_PID_I ELABEL, &raw_Ki, 0.01f, 9990, copy_and_scalePID_i_E ## eindex); \
|
||||
MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_PID_D ELABEL, &raw_Kd, 1, 9990, copy_and_scalePID_d_E ## eindex)
|
||||
|
||||
#if ENABLED(PID_EXTRUSION_SCALING)
|
||||
#define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) \
|
||||
_PID_BASE_MENU_ITEMS(ELABEL, eindex); \
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C ELABEL, &PID_PARAM(Kc, eindex), 1, 9990)
|
||||
#else
|
||||
#define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) _PID_BASE_MENU_ITEMS(ELABEL, eindex)
|
||||
#endif
|
||||
|
||||
#if ENABLED(PID_EXTRUSION_SCALING)
|
||||
#define _PID_MENU_ITEMS(ELABEL, eindex) \
|
||||
_PID_BASE_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_BASE_MENU_ITEMS(ELABEL, eindex)
|
||||
|
||||
#define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) NOOP
|
||||
|
||||
#endif
|
||||
|
||||
#if ENABLED(PID_AUTOTUNE_MENU)
|
||||
#define PID_MENU_ITEMS(ELABEL, eindex) \
|
||||
_PID_MENU_ITEMS(ELABEL, eindex); \
|
||||
#define PID_EDIT_MENU_ITEMS(ELABEL, eindex) \
|
||||
_PID_EDIT_MENU_ITEMS(ELABEL, eindex); \
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_PID_AUTOTUNE ELABEL, &autotune_temp[eindex], 150, heater_maxtemp[eindex] - 15, lcd_autotune_callback_E ## eindex)
|
||||
#else
|
||||
#define PID_MENU_ITEMS(ELABEL, eindex) _PID_MENU_ITEMS(ELABEL, eindex)
|
||||
#define PID_EDIT_MENU_ITEMS(ELABEL, eindex) _PID_EDIT_MENU_ITEMS(ELABEL, eindex)
|
||||
#endif
|
||||
|
||||
#if ENABLED(PID_PARAMS_PER_HOTEND) && HOTENDS > 1
|
||||
PID_MENU_ITEMS(" " MSG_E1, 0);
|
||||
PID_MENU_ITEMS(" " MSG_E2, 1);
|
||||
PID_EDIT_MENU_ITEMS(" " MSG_E1, 0);
|
||||
PID_EDIT_MENU_ITEMS(" " MSG_E2, 1);
|
||||
#if HOTENDS > 2
|
||||
PID_MENU_ITEMS(" " MSG_E3, 2);
|
||||
PID_EDIT_MENU_ITEMS(" " MSG_E3, 2);
|
||||
#if HOTENDS > 3
|
||||
PID_MENU_ITEMS(" " MSG_E4, 3);
|
||||
PID_EDIT_MENU_ITEMS(" " MSG_E4, 3);
|
||||
#if HOTENDS > 4
|
||||
PID_MENU_ITEMS(" " MSG_E5, 4);
|
||||
PID_EDIT_MENU_ITEMS(" " MSG_E5, 4);
|
||||
#if HOTENDS > 5
|
||||
PID_MENU_ITEMS(" " MSG_E6, 5);
|
||||
PID_EDIT_MENU_ITEMS(" " MSG_E6, 5);
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
#endif // HOTENDS > 2
|
||||
#else // !PID_PARAMS_PER_HOTEND || HOTENDS == 1
|
||||
PID_MENU_ITEMS("", 0);
|
||||
PID_EDIT_MENU_ITEMS("", 0);
|
||||
#endif // !PID_PARAMS_PER_HOTEND || HOTENDS == 1
|
||||
|
||||
#endif // PIDTEMP
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
END_MENU();
|
||||
}
|
||||
#endif // SHOW_MENU_ADVANCED_TEMPERATURE
|
||||
|
||||
#if DISABLED(SLIM_LCD_MENUS)
|
||||
|
||||
@ -640,7 +654,9 @@ void menu_advanced_settings() {
|
||||
MENU_ITEM(submenu, MSG_TMC_DRIVERS, menu_tmc);
|
||||
#endif
|
||||
|
||||
MENU_ITEM(submenu, MSG_TEMPERATURE, menu_advanced_temperature);
|
||||
#if SHOW_MENU_ADVANCED_TEMPERATURE
|
||||
MENU_ITEM(submenu, MSG_TEMPERATURE, menu_advanced_temperature);
|
||||
#endif
|
||||
|
||||
#if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||
MENU_ITEM(submenu, MSG_FILAMENT, menu_advanced_filament);
|
||||
|
Reference in New Issue
Block a user