@ -1067,6 +1067,33 @@ static void lcd_control_menu() {
*
*/
# if ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED)
# if ENABLED(PIDTEMP)
int autotune_temp [ EXTRUDERS ] = { 150 } ;
const int heater_maxtemp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_MAXTEMP , HEATER_1_MAXTEMP , HEATER_2_MAXTEMP , HEATER_3_MAXTEMP ) ;
# endif
# if ENABLED(PIDTEMPBED)
int autotune_temp_bed = 70 ;
# endif
static void _lcd_autotune ( int e ) {
char cmd [ 30 ] ;
sprintf_P ( cmd , PSTR ( " M303 U1 E%d S%d " ) , e ,
# if ENABLED(PIDTEMP) && ENABLED(PIDTEMPBED)
e < 0 ? autotune_temp_bed : autotune_temp [ e ]
# elif ENABLED(PIDTEMPBED)
autotune_temp_bed
# else
autotune_temp [ e ]
# endif
) ;
enqueue_and_echo_command_now ( cmd ) ;
}
# endif PIDTEMP || PIDTEMPBED
# if ENABLED(PIDTEMP)
// Helpers for editing PID Ki & Kd values
@ -1079,18 +1106,19 @@ static void lcd_control_menu() {
PID_PARAM ( Kd , e ) = scalePID_d ( raw_Kd ) ;
updatePID ( ) ;
}
# define COPY_AND_SCALE (eindex) \
# define _PIDTEMP_FUNCTIONS (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 ) ; }
void copy_and_scalePID_d_E # # eindex ( ) { copy_and_scalePID_d ( eindex ) ; } \
void lcd_autotune_callback_E # # eindex ( ) { _lcd_autotune ( eindex ) ; }
COPY_AND_SCALE ( 0 ) ;
_PIDTEMP_FUNCTIONS ( 0 ) ;
# if ENABLED(PID_PARAMS_PER_EXTRUDER)
# if EXTRUDERS > 1
COPY_AND_SCALE ( 1 ) ;
_PIDTEMP_FUNCTIONS ( 1 ) ;
# if EXTRUDERS > 2
COPY_AND_SCALE ( 2 ) ;
_PIDTEMP_FUNCTIONS ( 2 ) ;
# if EXTRUDERS > 3
COPY_AND_SCALE ( 3 ) ;
_PIDTEMP_FUNCTIONS ( 3 ) ;
# endif //EXTRUDERS > 3
# endif //EXTRUDERS > 2
# endif //EXTRUDERS > 1
@ -1184,35 +1212,36 @@ static void lcd_control_temperature_menu() {
//
# if ENABLED(PIDTEMP)
# define _PID_MENU_ITEMS(ELABEL, eindex) \
# 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 ( 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)
# define PID_MENU_ITEMS(ELABEL, eindex, AUTOTUNE_CMD) \
_PID_MENU_ITEMS ( ELABEL , eindex ) ; \
MENU_ITEM_EDIT ( float3 , MSG_PID_C ELABEL , & PID_PARAM ( Kc , eindex ) , 1 , 9990 ) ; \
MENU_ITEM ( gcode , MSG_PID_AUTOTUNE ELABEL , PSTR ( AUTOTUNE_CMD ) )
# 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, AUTOTUNE_CMD) \
_PID_MENU_ITEMS ( ELABEL , eindex ) ; \
MENU_ITEM ( gcode , MSG_PID_AUTOTUNE ELABEL , PSTR ( AUTOTUNE_CMD ) )
# define _PID_MENU_ITEMS(ELABEL, eindex) _PID_BASE_MENU_ITEMS(ELABEL, eindex)
# endif
# define PID_MENU_ITEMS(ELABEL, eindex) \
_PID_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 )
# if ENABLED(PID_PARAMS_PER_EXTRUDER) && EXTRUDERS > 1
PID_MENU_ITEMS ( MSG_E1 , 0 , " M303 U1 " ) ;
PID_MENU_ITEMS ( MSG_E2 , 1 , " M303 U1 E1 " ) ;
PID_MENU_ITEMS ( MSG_E1 , 0 ) ;
PID_MENU_ITEMS ( MSG_E2 , 1 ) ;
# if EXTRUDERS > 2
PID_MENU_ITEMS ( MSG_E3 , 2 , " M303 U1 E2 " ) ;
PID_MENU_ITEMS ( MSG_E3 , 2 ) ;
# if EXTRUDERS > 3
PID_MENU_ITEMS ( MSG_E4 , 3 , " M303 U1 E3 " ) ;
PID_MENU_ITEMS ( MSG_E4 , 3 ) ;
# endif //EXTRUDERS > 3
# endif //EXTRUDERS > 2
# else //!PID_PARAMS_PER_EXTRUDER || EXTRUDERS == 1
PID_MENU_ITEMS ( " " , 0 , " M303 U1 " ) ;
PID_MENU_ITEMS ( " " , 0 ) ;
# endif //!PID_PARAMS_PER_EXTRUDER || EXTRUDERS == 1
# endif //PIDTEMP