static void lcd_control_temperature_menu() { #ifdef PIDTEMP // set up temp variables - undo the default scaling raw_Ki = unscalePID_i(Ki); raw_Kd = unscalePID_d(Kd); #endif START_MENU(); MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); //MENU_ITEM(back, MSG_CONTROL, lcd_control_menu); #if TEMP_SENSOR_0 != 0 MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 3); #endif #if TEMP_SENSOR_1 != 0 MENU_ITEM_EDIT(int3, MSG_NOZZLE1, &target_temperature[1], 0, HEATER_1_MAXTEMP - 3); #endif #if TEMP_SENSOR_2 != 0 MENU_ITEM_EDIT(int3, MSG_NOZZLE2, &target_temperature[2], 0, HEATER_2_MAXTEMP - 3); #endif #if TEMP_SENSOR_BED != 0 MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 3); #endif MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255); #if defined AUTOTEMP && (TEMP_SENSOR_0 != 0) MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &autotemp_enabled); MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 3); MENU_ITEM_EDIT(float3, MSG_MAX, &autotemp_max, 0, HEATER_0_MAXTEMP - 3); MENU_ITEM_EDIT(float32, MSG_FACTOR, &autotemp_factor, 0.0, 1.0); #endif END_MENU(); }
static void lcd_temp_config_menu() { #ifdef PIDTEMP // set up temp variables - undo the default scaling raw_Ki = unscalePID_i(Ki); raw_Kd = unscalePID_d(Kd); #endif START_MENU(); MENU_ITEM(back, MSG_HERRAMIENTAS, lcd_herramientas_menu); MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 5); MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 15); MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255); END_MENU(); }
static void lcd_control_temperature_menu() { #ifdef PIDTEMP // set up temp variables - undo the default scaling raw_Ki = unscalePID_i(Ki); raw_Kd = unscalePID_d(Kd); #endif START_MENU(); MENU_ITEM(back, MSG_CONTROL, lcd_control_menu); #if TEMP_SENSOR_0 != 0 MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 15); #endif #if TEMP_SENSOR_1 != 0 MENU_ITEM_EDIT(int3, MSG_NOZZLE1, &target_temperature[1], 0, HEATER_1_MAXTEMP - 15); #endif #if TEMP_SENSOR_2 != 0 MENU_ITEM_EDIT(int3, MSG_NOZZLE2, &target_temperature[2], 0, HEATER_2_MAXTEMP - 15); #endif #if TEMP_SENSOR_BED != 0 MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 15); #endif MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255); #if defined AUTOTEMP && (TEMP_SENSOR_0 != 0) MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &autotemp_enabled); MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 15); MENU_ITEM_EDIT(float3, MSG_MAX, &autotemp_max, 0, HEATER_0_MAXTEMP - 15); MENU_ITEM_EDIT(float32, MSG_FACTOR, &autotemp_factor, 0.0, 1.0); #endif #ifdef PIDTEMP MENU_ITEM_EDIT(float52, MSG_PID_P, &Kp, 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); MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D, &raw_Kd, 1, 9990, copy_and_scalePID_d); # ifdef PID_ADD_EXTRUSION_RATE MENU_ITEM_EDIT(float3, MSG_PID_C, &Kc, 1, 9990); # endif//PID_ADD_EXTRUSION_RATE #endif//PIDTEMP MENU_ITEM(submenu, MSG_PREHEAT_PLA_SETTINGS, lcd_control_temperature_preheat_pla_settings_menu); MENU_ITEM(submenu, MSG_PREHEAT_ABS_SETTINGS, lcd_control_temperature_preheat_abs_settings_menu); END_MENU(); }
void Config_PrintSettings(bool forReplay) { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Steps per unit:"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M92 X", axis_steps_per_unit[X_AXIS]); SERIAL_ECHOPAIR(" Y", axis_steps_per_unit[Y_AXIS]); SERIAL_ECHOPAIR(" Z", axis_steps_per_unit[Z_AXIS]); SERIAL_ECHOPAIR(" E", axis_steps_per_unit[E_AXIS]); SERIAL_EOL; CONFIG_ECHO_START; #if ENABLED(SCARA) if (!forReplay) { SERIAL_ECHOLNPGM("Scaling factors:"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M365 X", axis_scaling[X_AXIS]); SERIAL_ECHOPAIR(" Y", axis_scaling[Y_AXIS]); SERIAL_ECHOPAIR(" Z", axis_scaling[Z_AXIS]); SERIAL_EOL; CONFIG_ECHO_START; #endif // SCARA if (!forReplay) { SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M203 X", max_feedrate[X_AXIS]); SERIAL_ECHOPAIR(" Y", max_feedrate[Y_AXIS]); SERIAL_ECHOPAIR(" Z", max_feedrate[Z_AXIS]); SERIAL_ECHOPAIR(" E", max_feedrate[E_AXIS]); SERIAL_EOL; CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M201 X", max_acceleration_units_per_sq_second[X_AXIS]); SERIAL_ECHOPAIR(" Y", max_acceleration_units_per_sq_second[Y_AXIS]); SERIAL_ECHOPAIR(" Z", max_acceleration_units_per_sq_second[Z_AXIS]); SERIAL_ECHOPAIR(" E", max_acceleration_units_per_sq_second[E_AXIS]); SERIAL_EOL; CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Accelerations: P=printing, R=retract and T=travel"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M204 P", acceleration); SERIAL_ECHOPAIR(" R", retract_acceleration); SERIAL_ECHOPAIR(" T", travel_acceleration); SERIAL_EOL; CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M205 S", minimumfeedrate); SERIAL_ECHOPAIR(" T", mintravelfeedrate); SERIAL_ECHOPAIR(" B", minsegmenttime); SERIAL_ECHOPAIR(" X", max_xy_jerk); SERIAL_ECHOPAIR(" Z", max_z_jerk); SERIAL_ECHOPAIR(" E", max_e_jerk); SERIAL_EOL; CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Home offset (mm):"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M206 X", home_offset[X_AXIS]); SERIAL_ECHOPAIR(" Y", home_offset[Y_AXIS]); SERIAL_ECHOPAIR(" Z", home_offset[Z_AXIS]); SERIAL_EOL; #if ENABLED(MESH_BED_LEVELING) if (!forReplay) { SERIAL_ECHOLNPGM("Mesh bed leveling:"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M420 S", (unsigned long)mbl.active); SERIAL_ECHOPAIR(" X", (unsigned long)MESH_NUM_X_POINTS); SERIAL_ECHOPAIR(" Y", (unsigned long)MESH_NUM_Y_POINTS); SERIAL_EOL; for (int y = 0; y < MESH_NUM_Y_POINTS; y++) { for (int x = 0; x < MESH_NUM_X_POINTS; x++) { CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M421 X", mbl.get_x(x)); SERIAL_ECHOPAIR(" Y", mbl.get_y(y)); SERIAL_ECHOPAIR(" Z", mbl.z_values[y][x]); SERIAL_EOL; } } #endif #if ENABLED(DELTA) CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Endstop adjustment (mm):"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M666 X", endstop_adj[X_AXIS]); SERIAL_ECHOPAIR(" Y", endstop_adj[Y_AXIS]); SERIAL_ECHOPAIR(" Z", endstop_adj[Z_AXIS]); SERIAL_EOL; CONFIG_ECHO_START; SERIAL_ECHOLNPGM("Delta settings: L=delta_diagonal_rod, R=delta_radius, S=delta_segments_per_second"); CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M665 L", delta_diagonal_rod); SERIAL_ECHOPAIR(" R", delta_radius); SERIAL_ECHOPAIR(" S", delta_segments_per_second); SERIAL_EOL; #elif ENABLED(Z_DUAL_ENDSTOPS) CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Z2 Endstop adjustment (mm):"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M666 Z", z_endstop_adj); SERIAL_EOL; #endif // DELTA #if ENABLED(ULTIPANEL) CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Material heatup parameters:"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M145 M0 H", (unsigned long)plaPreheatHotendTemp); SERIAL_ECHOPAIR(" B", (unsigned long)plaPreheatHPBTemp); SERIAL_ECHOPAIR(" F", (unsigned long)plaPreheatFanSpeed); SERIAL_EOL; CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M145 M1 H", (unsigned long)absPreheatHotendTemp); SERIAL_ECHOPAIR(" B", (unsigned long)absPreheatHPBTemp); SERIAL_ECHOPAIR(" F", (unsigned long)absPreheatFanSpeed); SERIAL_EOL; #endif // ULTIPANEL #if ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED) CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("PID settings:"); } #if ENABLED(PIDTEMP) #if EXTRUDERS > 1 if (forReplay) { for (uint8_t i = 0; i < EXTRUDERS; i++) { CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M301 E", (unsigned long)i); SERIAL_ECHOPAIR(" P", PID_PARAM(Kp, i)); SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, i))); SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, i))); #if ENABLED(PID_ADD_EXTRUSION_RATE) SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, i)); if (i == 0) SERIAL_ECHOPAIR(" L", lpq_len); #endif SERIAL_EOL; } } else #endif // EXTRUDERS > 1 // !forReplay || EXTRUDERS == 1 { CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M301 P", PID_PARAM(Kp, 0)); // for compatibility with hosts, only echo values for E0 SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, 0))); SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, 0))); #if ENABLED(PID_ADD_EXTRUSION_RATE) SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, 0)); SERIAL_ECHOPAIR(" L", lpq_len); #endif SERIAL_EOL; } #endif // PIDTEMP #if ENABLED(PIDTEMPBED) CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M304 P", bedKp); SERIAL_ECHOPAIR(" I", unscalePID_i(bedKi)); SERIAL_ECHOPAIR(" D", unscalePID_d(bedKd)); SERIAL_EOL; #endif #endif // PIDTEMP || PIDTEMPBED #if ENABLED(HAS_LCD_CONTRAST) CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("LCD Contrast:"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M250 C", (unsigned long)lcd_contrast); SERIAL_EOL; #endif #if ENABLED(FWRETRACT) CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M207 S", retract_length); #if EXTRUDERS > 1 SERIAL_ECHOPAIR(" W", retract_length_swap); #endif SERIAL_ECHOPAIR(" F", retract_feedrate * 60); SERIAL_ECHOPAIR(" Z", retract_zlift); SERIAL_EOL; CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M208 S", retract_recover_length); #if EXTRUDERS > 1 SERIAL_ECHOPAIR(" W", retract_recover_length_swap); #endif SERIAL_ECHOPAIR(" F", retract_recover_feedrate * 60); SERIAL_EOL; CONFIG_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries"); CONFIG_ECHO_START; } SERIAL_ECHOPAIR(" M209 S", (unsigned long)(autoretract_enabled ? 1 : 0)); SERIAL_EOL; #endif // FWRETRACT /** * Volumetric extrusion M200 */ if (!forReplay) { CONFIG_ECHO_START; SERIAL_ECHOPGM("Filament settings:"); if (volumetric_enabled) SERIAL_EOL; else SERIAL_ECHOLNPGM(" Disabled"); } CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M200 D", filament_size[0]); SERIAL_EOL; #if EXTRUDERS > 1 CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M200 T1 D", filament_size[1]); SERIAL_EOL; #if EXTRUDERS > 2 CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M200 T2 D", filament_size[2]); SERIAL_EOL; #if EXTRUDERS > 3 CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M200 T3 D", filament_size[3]); SERIAL_EOL; #endif #endif #endif if (!volumetric_enabled) { CONFIG_ECHO_START; SERIAL_ECHOLNPGM(" M200 D0"); } /** * Auto Bed Leveling */ #if ENABLED(AUTO_BED_LEVELING_FEATURE) #if ENABLED(CUSTOM_M_CODES) if (!forReplay) { CONFIG_ECHO_START; SERIAL_ECHOLNPGM("Z-Probe Offset (mm):"); } CONFIG_ECHO_START; SERIAL_ECHOPAIR(" M" STRINGIFY(CUSTOM_M_CODE_SET_Z_PROBE_OFFSET) " Z", zprobe_zoffset); #else if (!forReplay) { CONFIG_ECHO_START; SERIAL_ECHOPAIR("Z-Probe Offset (mm):", zprobe_zoffset); } #endif SERIAL_EOL; #endif }
void Config_PrintSettings() { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Steps per unit:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M92 X",axis_steps_per_unit[0]); SERIAL_ECHOPAIR(" Y",axis_steps_per_unit[1]); SERIAL_ECHOPAIR(" Z",axis_steps_per_unit[2]); SERIAL_ECHOPAIR(" E",axis_steps_per_unit[3]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M203 X",max_feedrate[0]); SERIAL_ECHOPAIR(" Y",max_feedrate[1] ); SERIAL_ECHOPAIR(" Z", max_feedrate[2] ); SERIAL_ECHOPAIR(" E", max_feedrate[3]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M201 X" ,max_acceleration_units_per_sq_second[0] ); SERIAL_ECHOPAIR(" Y" , max_acceleration_units_per_sq_second[1] ); SERIAL_ECHOPAIR(" Z" ,max_acceleration_units_per_sq_second[2] ); SERIAL_ECHOPAIR(" E" ,max_acceleration_units_per_sq_second[3]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M204 S",acceleration ); SERIAL_ECHOPAIR(" T" ,retract_acceleration); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M205 S",minimumfeedrate ); SERIAL_ECHOPAIR(" T" ,mintravelfeedrate ); SERIAL_ECHOPAIR(" B" ,minsegmenttime ); SERIAL_ECHOPAIR(" X" ,max_xy_jerk ); SERIAL_ECHOPAIR(" Z" ,max_z_jerk); SERIAL_ECHOPAIR(" E" ,max_e_jerk); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Home offset (mm):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M206 X",add_homeing[0] ); SERIAL_ECHOPAIR(" Y" ,add_homeing[1] ); SERIAL_ECHOPAIR(" Z" ,add_homeing[2] ); SERIAL_ECHOLN(""); #ifdef DELTA SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Endstop adjustment (mm):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M666 X",endstop_adj[0]); SERIAL_ECHOPAIR(" Y" ,endstop_adj[1]); SERIAL_ECHOPAIR(" Z" ,endstop_adj[2]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Delta Geometry adjustment:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M666 A",tower_adj[0]); SERIAL_ECHOPAIR(" B" ,tower_adj[1]); SERIAL_ECHOPAIR(" C" ,tower_adj[2]); SERIAL_ECHOPAIR(" I" ,tower_adj[3]); SERIAL_ECHOPAIR(" J" ,tower_adj[4]); SERIAL_ECHOPAIR(" K" ,tower_adj[5]); SERIAL_ECHOPAIR(" R" ,delta_radius); SERIAL_ECHOPAIR(" D" ,delta_diagonal_rod); SERIAL_ECHOPAIR(" H" ,max_pos[Z_AXIS]); SERIAL_ECHOPAIR(" P" ,z_probe_offset[Z_AXIS]); SERIAL_ECHOPAIR(" S" ,delta_segments_per_second ); SERIAL_ECHOLN(""); /* SERIAL_ECHOLN("Tower Positions"); SERIAL_ECHOPAIR("Tower1 X:",delta_tower1_x); SERIAL_ECHOPAIR(" Y:",delta_tower1_y); SERIAL_ECHOLN(""); SERIAL_ECHOPAIR("Tower2 X:",delta_tower2_x); SERIAL_ECHOPAIR(" Y:",delta_tower2_y); SERIAL_ECHOLN(""); SERIAL_ECHOPAIR("Tower3 X:",delta_tower3_x); SERIAL_ECHOPAIR(" Y:",delta_tower3_y); SERIAL_ECHOLN(""); */ #endif #ifdef PIDTEMP SERIAL_ECHO_START; SERIAL_ECHOLNPGM("PID settings:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M301 P",Kp); SERIAL_ECHOPAIR(" I" ,unscalePID_i(Ki)); SERIAL_ECHOPAIR(" D" ,unscalePID_d(Kd)); SERIAL_ECHOLN(""); #endif }
void Config_PrintSettings() { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Steps per unit:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M92 X",axis_steps_per_unit[0]); SERIAL_ECHOPAIR(" Y",axis_steps_per_unit[1]); SERIAL_ECHOPAIR(" Z",axis_steps_per_unit[2]); SERIAL_ECHOPAIR(" E",axis_steps_per_unit[3]); SERIAL_ECHOPAIR(" E1",e1_steps_per_unit); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M203 X",max_feedrate[0]); SERIAL_ECHOPAIR(" Y",max_feedrate[1] ); SERIAL_ECHOPAIR(" Z", max_feedrate[2] ); SERIAL_ECHOPAIR(" E", max_feedrate[3]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M201 X" ,max_acceleration_units_per_sq_second[0] ); SERIAL_ECHOPAIR(" Y" , max_acceleration_units_per_sq_second[1] ); SERIAL_ECHOPAIR(" Z" ,max_acceleration_units_per_sq_second[2] ); SERIAL_ECHOPAIR(" E" ,max_acceleration_units_per_sq_second[3]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M204 S",acceleration ); SERIAL_ECHOPAIR(" T" ,retract_acceleration); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M205 S",minimumfeedrate ); SERIAL_ECHOPAIR(" T" ,mintravelfeedrate ); SERIAL_ECHOPAIR(" B" ,minsegmenttime ); SERIAL_ECHOPAIR(" X" ,max_xy_jerk ); SERIAL_ECHOPAIR(" Z" ,max_z_jerk); SERIAL_ECHOPAIR(" E" ,max_e_jerk); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Home offset (mm):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M206 X",add_homeing[0] ); SERIAL_ECHOPAIR(" Y" ,add_homeing[1] ); SERIAL_ECHOPAIR(" Z" ,add_homeing[2] ); SERIAL_ECHOLN(""); #ifdef DELTA SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Endstop adjustement (mm):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M666 X",endstop_adj[0] ); SERIAL_ECHOPAIR(" Y" ,endstop_adj[1] ); SERIAL_ECHOPAIR(" Z" ,endstop_adj[2] ); SERIAL_ECHOLN(""); #endif #ifdef PIDTEMP SERIAL_ECHO_START; SERIAL_ECHOLNPGM("PID settings:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M301 P",Kp); SERIAL_ECHOPAIR(" I" ,unscalePID_i(Ki)); SERIAL_ECHOPAIR(" D" ,unscalePID_d(Kd)); SERIAL_ECHOLN(""); #endif }
void Config_PrintSettings(bool forReplay) { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Steps per unit:"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M92 X", axis_steps_per_unit[X_AXIS]); SERIAL_ECHOPAIR(" Y", axis_steps_per_unit[Y_AXIS]); SERIAL_ECHOPAIR(" Z", axis_steps_per_unit[Z_AXIS]); SERIAL_ECHOPAIR(" E", axis_steps_per_unit[E_AXIS]); SERIAL_EOL; SERIAL_ECHO_START; #ifdef SCARA if (!forReplay) { SERIAL_ECHOLNPGM("Scaling factors:"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M365 X", axis_scaling[X_AXIS]); SERIAL_ECHOPAIR(" Y", axis_scaling[Y_AXIS]); SERIAL_ECHOPAIR(" Z", axis_scaling[Z_AXIS]); SERIAL_EOL; SERIAL_ECHO_START; #endif // SCARA if (!forReplay) { SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M203 X", max_feedrate[X_AXIS]); SERIAL_ECHOPAIR(" Y", max_feedrate[Y_AXIS]); SERIAL_ECHOPAIR(" Z", max_feedrate[Z_AXIS]); SERIAL_ECHOPAIR(" E", max_feedrate[E_AXIS]); SERIAL_EOL; SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M201 X", max_acceleration_units_per_sq_second[X_AXIS] ); SERIAL_ECHOPAIR(" Y", max_acceleration_units_per_sq_second[Y_AXIS] ); SERIAL_ECHOPAIR(" Z", max_acceleration_units_per_sq_second[Z_AXIS] ); SERIAL_ECHOPAIR(" E", max_acceleration_units_per_sq_second[E_AXIS]); SERIAL_EOL; SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M204 S", acceleration ); SERIAL_ECHOPAIR(" T", retract_acceleration); SERIAL_EOL; SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M205 S", minimumfeedrate ); SERIAL_ECHOPAIR(" T", mintravelfeedrate ); SERIAL_ECHOPAIR(" B", minsegmenttime ); SERIAL_ECHOPAIR(" X", max_xy_jerk ); SERIAL_ECHOPAIR(" Z", max_z_jerk); SERIAL_ECHOPAIR(" E", max_e_jerk); SERIAL_EOL; SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Home offset (mm):"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M206 X", add_homing[X_AXIS] ); SERIAL_ECHOPAIR(" Y", add_homing[Y_AXIS] ); SERIAL_ECHOPAIR(" Z", add_homing[Z_AXIS] ); SERIAL_EOL; #ifdef DELTA SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Endstop adjustement (mm):"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M666 X", endstop_adj[X_AXIS] ); SERIAL_ECHOPAIR(" Y", endstop_adj[Y_AXIS] ); SERIAL_ECHOPAIR(" Z", endstop_adj[Z_AXIS] ); SERIAL_EOL; SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Delta settings: L=delta_diagonal_rod, R=delta_radius, S=delta_segments_per_second"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M665 L", delta_diagonal_rod ); SERIAL_ECHOPAIR(" R", delta_radius ); SERIAL_ECHOPAIR(" S", delta_segments_per_second ); SERIAL_EOL; #endif // DELTA #ifdef PIDTEMP SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("PID settings:"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M301 P", PID_PARAM(Kp, 0)); // for compatibility with hosts, only echos values for E0 SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, 0))); SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, 0))); SERIAL_EOL; #endif // PIDTEMP #ifdef FWRETRACT SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M207 S", retract_length); SERIAL_ECHOPAIR(" F", retract_feedrate*60); SERIAL_ECHOPAIR(" Z", retract_zlift); SERIAL_EOL; SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M208 S", retract_recover_length); SERIAL_ECHOPAIR(" F", retract_recover_feedrate*60); SERIAL_EOL; SERIAL_ECHO_START; if (!forReplay) { SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M209 S", (unsigned long)(autoretract_enabled ? 1 : 0)); SERIAL_EOL; #if EXTRUDERS > 1 if (!forReplay) { SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Multi-extruder settings:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" Swap retract length (mm): ", retract_length_swap); SERIAL_EOL; SERIAL_ECHO_START; SERIAL_ECHOPAIR(" Swap rec. addl. length (mm): ", retract_recover_length_swap); SERIAL_EOL; } #endif // EXTRUDERS > 1 #endif // FWRETRACT SERIAL_ECHO_START; if (volumetric_enabled) { if (!forReplay) { SERIAL_ECHOLNPGM("Filament settings:"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M200 D", filament_size[0]); SERIAL_EOL; #if EXTRUDERS > 1 SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M200 T1 D", filament_size[1]); SERIAL_EOL; #if EXTRUDERS > 2 SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M200 T2 D", filament_size[2]); SERIAL_EOL; #if EXTRUDERS > 3 SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M200 T3 D", filament_size[3]); SERIAL_EOL; #endif #endif #endif } else { if (!forReplay) { SERIAL_ECHOLNPGM("Filament settings: Disabled"); } } #ifdef LEVEL_SENSOR SERIAL_ECHO_START; #ifdef CUSTOM_M_CODES if (!forReplay) { SERIAL_ECHOLNPGM("Z-Probe Offset (mm):"); SERIAL_ECHO_START; } SERIAL_ECHOPAIR(" M", (unsigned long)CUSTOM_M_CODE_SET_Z_PROBE_OFFSET); SERIAL_ECHOPAIR(" Z", zprobe_zoffset); #else if (!forReplay) { SERIAL_ECHOPAIR("Z-Probe Offset (mm):", zprobe_zoffset); } #endif SERIAL_EOL; #endif }
/** * M503 - Print Configuration */ void Config_PrintSettings(bool forReplay) { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown CONFIG_ECHO_START("Steps per unit:"); ECHO_SMV(CFG, " M92 X", planner.axis_steps_per_mm[X_AXIS]); ECHO_MV(" Y", planner.axis_steps_per_mm[Y_AXIS]); ECHO_MV(" Z", planner.axis_steps_per_mm[Z_AXIS]); ECHO_EMV(" E", planner.axis_steps_per_mm[E_AXIS]); #if EXTRUDERS > 1 for (short i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M92 T", i); ECHO_EMV(" E", planner.axis_steps_per_mm[E_AXIS + i]); } #endif //EXTRUDERS > 1 #if MECH(SCARA) CONFIG_ECHO_START("Scaling factors:"); ECHO_SMV(CFG, " M365 X", axis_scaling[X_AXIS]); ECHO_MV(" Y", axis_scaling[Y_AXIS]); ECHO_EMV(" Z", axis_scaling[Z_AXIS]); #endif // SCARA CONFIG_ECHO_START("Maximum feedrates (mm/s):"); ECHO_SMV(CFG, " M203 X", planner.max_feedrate[X_AXIS]); ECHO_MV(" Y", planner.max_feedrate[Y_AXIS] ); ECHO_MV(" Z", planner.max_feedrate[Z_AXIS] ); ECHO_EMV(" E", planner.max_feedrate[E_AXIS]); #if EXTRUDERS > 1 for (short i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M203 T", i); ECHO_EMV(" E", planner.max_acceleration_mm_per_s2[E_AXIS + i]); } #endif //EXTRUDERS > 1 CONFIG_ECHO_START("Maximum Acceleration (mm/s2):"); ECHO_SMV(CFG, " M201 X", planner.max_acceleration_mm_per_s2[X_AXIS] ); ECHO_MV(" Y", planner.max_acceleration_mm_per_s2[Y_AXIS] ); ECHO_MV(" Z", planner.max_acceleration_mm_per_s2[Z_AXIS] ); ECHO_EMV(" E", planner.max_acceleration_mm_per_s2[E_AXIS]); #if EXTRUDERS > 1 for (int8_t i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M201 T", i); ECHO_EMV(" E", planner.max_acceleration_mm_per_s2[E_AXIS + i]); } #endif //EXTRUDERS > 1 CONFIG_ECHO_START("Accelerations: P=printing, V=travel and T* R=retract"); ECHO_SMV(CFG," M204 P", planner.acceleration); ECHO_EMV(" V", planner.travel_acceleration); #if EXTRUDERS > 0 for (int8_t i = 0; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M204 T", i); ECHO_EMV(" R", planner.retract_acceleration[i]); } #endif CONFIG_ECHO_START("Advanced variables: S=Min feedrate (mm/s), V=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); ECHO_SMV(CFG, " M205 S", planner.min_feedrate ); ECHO_MV(" V", planner.min_travel_feedrate ); ECHO_MV(" B", planner.min_segment_time ); ECHO_MV(" X", planner.max_xy_jerk ); ECHO_MV(" Z", planner.max_z_jerk); ECHO_EMV(" E", planner.max_e_jerk[0]); #if (EXTRUDERS > 1) for(int8_t i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M205 T", i); ECHO_EMV(" E" , planner.max_e_jerk[i]); } #endif CONFIG_ECHO_START("Home offset (mm):"); ECHO_SMV(CFG, " M206 X", home_offset[X_AXIS] ); ECHO_MV(" Y", home_offset[Y_AXIS] ); ECHO_EMV(" Z", home_offset[Z_AXIS] ); CONFIG_ECHO_START("Hotend offset (mm):"); for (int8_t h = 0; h < HOTENDS; h++) { ECHO_SMV(CFG, " M218 T", h); ECHO_MV(" X", hotend_offset[X_AXIS][h]); ECHO_MV(" Y", hotend_offset[Y_AXIS][h]); ECHO_EMV(" Z", hotend_offset[Z_AXIS][h]); } #if HAS(LCD_CONTRAST) CONFIG_ECHO_START("LCD Contrast:"); ECHO_LMV(CFG, " M250 C", lcd_contrast); #endif #if ENABLED(MESH_BED_LEVELING) CONFIG_ECHO_START("Mesh bed leveling:"); ECHO_SMV(CFG, " M420 S", mbl.has_mesh() ? 1 : 0); ECHO_MV(" X", MESH_NUM_X_POINTS); ECHO_MV(" Y", MESH_NUM_Y_POINTS); ECHO_E; for (uint8_t py = 1; py <= MESH_NUM_Y_POINTS; py++) { for (uint8_t px = 1; px <= MESH_NUM_X_POINTS; px++) { ECHO_SMV(CFG, " G29 S3 X", px); ECHO_MV(" Y", py); ECHO_EMV(" Z", mbl.z_values[py-1][px-1], 5); } } #endif #if HEATER_USES_AD595 CONFIG_ECHO_START("AD595 Offset and Gain:"); for (int8_t h = 0; h < HOTENDS; h++) { ECHO_SMV(CFG, " M595 T", h); ECHO_MV(" O", ad595_offset[h]); ECHO_EMV(", S", ad595_gain[h]); } #endif // HEATER_USES_AD595 #if MECH(DELTA) CONFIG_ECHO_START("Delta Geometry adjustment:"); ECHO_SMV(CFG, " M666 A", tower_adj[0], 3); ECHO_MV(" B", tower_adj[1], 3); ECHO_MV(" C", tower_adj[2], 3); ECHO_MV(" I", tower_adj[3], 3); ECHO_MV(" J", tower_adj[4], 3); ECHO_MV(" K", tower_adj[5], 3); ECHO_MV(" U", diagrod_adj[0], 3); ECHO_MV(" V", diagrod_adj[1], 3); ECHO_MV(" W", diagrod_adj[2], 3); ECHO_MV(" R", delta_radius); ECHO_MV(" D", delta_diagonal_rod); ECHO_EMV(" H", sw_endstop_max[2]); CONFIG_ECHO_START("Endstop Offsets:"); ECHO_SMV(CFG, " M666 X", endstop_adj[X_AXIS]); ECHO_MV(" Y", endstop_adj[Y_AXIS]); ECHO_EMV(" Z", endstop_adj[Z_AXIS]); #elif ENABLED(Z_DUAL_ENDSTOPS) CONFIG_ECHO_START("Z2 Endstop adjustement (mm):"); ECHO_LMV(CFG, " M666 Z", z_endstop_adj ); #endif // DELTA /** * Auto Bed Leveling */ #if HAS(BED_PROBE) CONFIG_ECHO_START("Z Probe offset (mm):"); ECHO_LMV(CFG, " M666 P", zprobe_zoffset); #endif #if ENABLED(ULTIPANEL) CONFIG_ECHO_START("Material heatup parameters:"); ECHO_SMV(CFG, " M145 S0 H", plaPreheatHotendTemp); ECHO_MV(" B", plaPreheatHPBTemp); ECHO_MV(" F", plaPreheatFanSpeed); ECHO_EM(" (Material PLA)"); ECHO_SMV(CFG, " M145 S1 H", absPreheatHotendTemp); ECHO_MV(" B", absPreheatHPBTemp); ECHO_MV(" F", absPreheatFanSpeed); ECHO_EM(" (Material ABS)"); ECHO_SMV(CFG, " M145 S2 H", gumPreheatHotendTemp); ECHO_MV(" B", gumPreheatHPBTemp); ECHO_MV(" F", gumPreheatFanSpeed); ECHO_EM(" (Material GUM)"); #endif // ULTIPANEL #if ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED) || ENABLED(PIDTEMPCHAMBER) || ENABLED(PIDTEMPCOOLER) CONFIG_ECHO_START("PID settings:"); #if ENABLED(PIDTEMP) for (int8_t h = 0; h < HOTENDS; h++) { ECHO_SMV(CFG, " M301 H", h); ECHO_MV(" P", PID_PARAM(Kp, h)); ECHO_MV(" I", unscalePID_i(PID_PARAM(Ki, h))); ECHO_MV(" D", unscalePID_d(PID_PARAM(Kd, h))); #if ENABLED(PID_ADD_EXTRUSION_RATE) ECHO_MV(" C", PID_PARAM(Kc, h)); #endif ECHO_E; } #if ENABLED(PID_ADD_EXTRUSION_RATE) ECHO_SMV(CFG, " M301 L", lpq_len); #endif #endif #if ENABLED(PIDTEMPBED) ECHO_SMV(CFG, " M304 P", bedKp); ECHO_MV(" I", unscalePID_i(bedKi)); ECHO_EMV(" D", unscalePID_d(bedKd)); #endif #if ENABLED(PIDTEMPCHAMBER) ECHO_SMV(CFG, " M305 P", chamberKp); ECHO_MV(" I", unscalePID_i(chamberKi)); ECHO_EMV(" D", unscalePID_d(chamberKd)); #endif #if ENABLED(PIDTEMPCOOLER) ECHO_SMV(CFG, " M306 P", coolerKp); ECHO_MV(" I", unscalePID_i(coolerKi)); ECHO_EMV(" D", unscalePID_d(coolerKd)); #endif #endif #if ENABLED(FWRETRACT) CONFIG_ECHO_START("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)"); ECHO_SMV(CFG, " M207 S", retract_length); #if EXTRUDERS > 1 ECHO_MV(" W", retract_length_swap); #endif ECHO_MV(" F", retract_feedrate * 60); ECHO_EMV(" Z", retract_zlift); CONFIG_ECHO_START("Recover: S=Extra length (mm) F:Speed (mm/m)"); ECHO_SMV(CFG, " M208 S", retract_recover_length); #if EXTRUDERS > 1 ECHO_MV(" W", retract_recover_length_swap); #endif ECHO_MV(" F", retract_recover_feedrate * 60); CONFIG_ECHO_START("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries"); ECHO_LMV(CFG, " M209 S", autoretract_enabled ? 1 : 0); #endif // FWRETRACT if (volumetric_enabled) { CONFIG_ECHO_START("Filament settings:"); ECHO_LMV(CFG, " M200 D", filament_size[0]); #if EXTRUDERS > 1 ECHO_LMV(CFG, " M200 T1 D", filament_size[1]); #if EXTRUDERS > 2 ECHO_LMV(CFG, " M200 T2 D", filament_size[2]); #if EXTRUDERS > 3 ECHO_LMV(CFG, " M200 T3 D", filament_size[3]); #endif #endif #endif } else CONFIG_ECHO_START(" M200 D0"); #if MB(ALLIGATOR) CONFIG_ECHO_START("Motor current:"); ECHO_SMV(CFG, " M906 X", motor_current[X_AXIS]); ECHO_MV(" Y", motor_current[Y_AXIS]); ECHO_MV(" Z", motor_current[Z_AXIS]); ECHO_EMV(" E", motor_current[E_AXIS]); #if DRIVER_EXTRUDERS > 1 for (uint8_t i = 1; i < DRIVER_EXTRUDERS; i++) { ECHO_SMV(CFG, " M906 T", i); ECHO_EMV(" E", motor_current[E_AXIS + i]); } #endif // DRIVER_EXTRUDERS > 1 #endif // ALLIGATOR ConfigSD_PrintSettings(forReplay); }
void Config_PrintSettings() { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Steps per unit:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M92 X",axis_steps_per_unit[X_AXIS]); SERIAL_ECHOPAIR(" Y",axis_steps_per_unit[Y_AXIS]); SERIAL_ECHOPAIR(" Z",axis_steps_per_unit[Z_AXIS]); SERIAL_ECHOPAIR(" E",axis_steps_per_unit[E_AXIS]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; #ifdef SCARA SERIAL_ECHOLNPGM("Scaling factors:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M365 X",axis_scaling[X_AXIS]); SERIAL_ECHOPAIR(" Y",axis_scaling[Y_AXIS]); SERIAL_ECHOPAIR(" Z",axis_scaling[Z_AXIS]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; #endif SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M203 X", max_feedrate[X_AXIS]); SERIAL_ECHOPAIR(" Y", max_feedrate[Y_AXIS]); SERIAL_ECHOPAIR(" Z", max_feedrate[Z_AXIS]); SERIAL_ECHOPAIR(" E", max_feedrate[E_AXIS]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M201 X" ,max_acceleration_units_per_sq_second[X_AXIS] ); SERIAL_ECHOPAIR(" Y" , max_acceleration_units_per_sq_second[Y_AXIS] ); SERIAL_ECHOPAIR(" Z" ,max_acceleration_units_per_sq_second[Z_AXIS] ); SERIAL_ECHOPAIR(" E" ,max_acceleration_units_per_sq_second[E_AXIS]); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M204 S",acceleration ); SERIAL_ECHOPAIR(" T" ,retract_acceleration); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M205 S",minimumfeedrate ); SERIAL_ECHOPAIR(" T" ,mintravelfeedrate ); SERIAL_ECHOPAIR(" B" ,minsegmenttime ); SERIAL_ECHOPAIR(" X" ,max_xy_jerk ); SERIAL_ECHOPAIR(" Z" ,max_z_jerk); SERIAL_ECHOPAIR(" E" ,max_e_jerk); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Home offset (mm):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M206 X",add_homing[X_AXIS] ); SERIAL_ECHOPAIR(" Y" ,add_homing[Y_AXIS] ); SERIAL_ECHOPAIR(" Z" ,add_homing[Z_AXIS] ); SERIAL_ECHOLN(""); #ifdef DELTA SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Endstop adjustement (mm):"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M666 X",endstop_adj[X_AXIS] ); SERIAL_ECHOPAIR(" Y" ,endstop_adj[Y_AXIS] ); SERIAL_ECHOPAIR(" Z" ,endstop_adj[Z_AXIS] ); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Delta settings: L=delta_diagonal_rod, R=delta_radius, S=delta_segments_per_second"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M665 L",delta_diagonal_rod ); SERIAL_ECHOPAIR(" R" ,delta_radius ); SERIAL_ECHOPAIR(" S" ,delta_segments_per_second ); SERIAL_ECHOLN(""); #endif #ifdef PIDTEMP SERIAL_ECHO_START; SERIAL_ECHOLNPGM("PID settings:"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M301 P",Kp); SERIAL_ECHOPAIR(" I" ,unscalePID_i(Ki)); SERIAL_ECHOPAIR(" D" ,unscalePID_d(Kd)); SERIAL_ECHOLN(""); #endif #ifdef FWRETRACT SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M207 S",retract_length); SERIAL_ECHOPAIR(" F" ,retract_feedrate*60); SERIAL_ECHOPAIR(" Z" ,retract_zlift); SERIAL_ECHOLN(""); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)"); SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M208 S",retract_recover_length); SERIAL_ECHOPAIR(" F" ,retract_recover_feedrate*60); SERIAL_ECHOLN(""); #endif }
/** * Print Configuration Settings - M503 */ void Config_PrintSettings(bool forReplay) { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown if (!forReplay) { ECHO_LM(CFG, "Steps per unit:"); } ECHO_SMV(CFG, " M92 X", axis_steps_per_unit[X_AXIS]); ECHO_MV(" Y", axis_steps_per_unit[Y_AXIS]); ECHO_MV(" Z", axis_steps_per_unit[Z_AXIS]); ECHO_EMV(" E", axis_steps_per_unit[E_AXIS]); #if EXTRUDERS > 1 for (short i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M92 T", i); ECHO_EMV(" E", axis_steps_per_unit[E_AXIS + i]); } #endif //EXTRUDERS > 1 #if MECH(SCARA) if (!forReplay) { ECHO_LM(CFG, "Scaling factors:"); } ECHO_SMV(CFG, " M365 X", axis_scaling[X_AXIS]); ECHO_MV(" Y", axis_scaling[Y_AXIS]); ECHO_EMV(" Z", axis_scaling[Z_AXIS]); #endif // SCARA if (!forReplay) { ECHO_LM(CFG, "Maximum feedrates (mm/s):"); } ECHO_SMV(CFG, " M203 X", max_feedrate[X_AXIS]); ECHO_MV(" Y", max_feedrate[Y_AXIS] ); ECHO_MV(" Z", max_feedrate[Z_AXIS] ); ECHO_EMV(" E", max_feedrate[E_AXIS]); #if EXTRUDERS > 1 for (short i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M203 T", i); ECHO_EMV(" E", max_feedrate[E_AXIS + i]); } #endif //EXTRUDERS > 1 if (!forReplay) { ECHO_LM(CFG, "Maximum Acceleration (mm/s2):"); } ECHO_SMV(CFG, " M201 X", max_acceleration_units_per_sq_second[X_AXIS] ); ECHO_MV(" Y", max_acceleration_units_per_sq_second[Y_AXIS] ); ECHO_MV(" Z", max_acceleration_units_per_sq_second[Z_AXIS] ); ECHO_EMV(" E", max_acceleration_units_per_sq_second[E_AXIS]); #if EXTRUDERS > 1 for (int8_t i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M201 T", i); ECHO_EMV(" E", max_acceleration_units_per_sq_second[E_AXIS + i]); } #endif //EXTRUDERS > 1 ECHO_E; if (!forReplay) { ECHO_LM(CFG, "Accelerations: P=printing, V=travel and T* R=retract"); } ECHO_SMV(CFG," M204 P", acceleration); ECHO_EMV(" V", travel_acceleration); #if EXTRUDERS > 0 for (int8_t i = 0; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M204 T", i); ECHO_EMV(" R", retract_acceleration[i]); } #endif if (!forReplay) { ECHO_LM(CFG, "Advanced variables: S=Min feedrate (mm/s), V=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); } ECHO_SMV(CFG, " M205 S", minimumfeedrate ); ECHO_MV(" V", mintravelfeedrate ); ECHO_MV(" B", minsegmenttime ); ECHO_MV(" X", max_xy_jerk ); ECHO_MV(" Z", max_z_jerk); ECHO_EMV(" E", max_e_jerk[0]); #if (EXTRUDERS > 1) for(int8_t i = 1; i < EXTRUDERS; i++) { ECHO_SMV(CFG, " M205 T", i); ECHO_EMV(" E" , max_e_jerk[i]); } #endif if (!forReplay) { ECHO_LM(CFG, "Home offset (mm):"); } ECHO_SMV(CFG, " M206 X", home_offset[X_AXIS] ); ECHO_MV(" Y", home_offset[Y_AXIS] ); ECHO_EMV(" Z", home_offset[Z_AXIS] ); if (!forReplay) { ECHO_LM(CFG, "Hotend offset (mm):"); } for (int8_t h = 0; h < HOTENDS; h++) { ECHO_SMV(CFG, " M218 T", h); ECHO_MV(" X", hotend_offset[X_AXIS][h]); ECHO_MV(" Y", hotend_offset[Y_AXIS][h]); ECHO_EMV(" Z", hotend_offset[Z_AXIS][h]); } #if HEATER_USES_AD595 if (!forReplay) { ECHO_LM(CFG, "AD595 Offset and Gain:"); } for (int8_t h = 0; h < HOTENDS; h++) { ECHO_SMV(CFG, " M595 T", h); ECHO_MV(" O", ad595_offset[h]); ECHO_EMV(", S", ad595_gain[h]); } #endif // HEATER_USES_AD595 #if MECH(DELTA) if (!forReplay) { ECHO_LM(CFG, "Delta Geometry adjustment:"); } ECHO_SMV(CFG, " M666 A", tower_adj[0], 3); ECHO_MV(" B", tower_adj[1], 3); ECHO_MV(" C", tower_adj[2], 3); ECHO_MV(" I", tower_adj[3], 3); ECHO_MV(" J", tower_adj[4], 3); ECHO_MV(" K", tower_adj[5], 3); ECHO_MV(" U", diagrod_adj[0], 3); ECHO_MV(" V", diagrod_adj[1], 3); ECHO_MV(" W", diagrod_adj[2], 3); ECHO_MV(" R", delta_radius); ECHO_MV(" D", delta_diagonal_rod); ECHO_EMV(" H", sw_endstop_max[2]); if (!forReplay) { ECHO_LM(CFG, "Endstop Offsets:"); } ECHO_SMV(CFG, " M666 X", endstop_adj[X_AXIS]); ECHO_MV(" Y", endstop_adj[Y_AXIS]); ECHO_EMV(" Z", endstop_adj[Z_AXIS]); if (!forReplay) { ECHO_LM(CFG, "Z-Probe Offset:"); } ECHO_SMV(CFG, " M666 P X", z_probe_offset[0]); ECHO_MV(" Y", z_probe_offset[1]); ECHO_EMV(" Z", z_probe_offset[2]); #elif ENABLED(Z_DUAL_ENDSTOPS) if (!forReplay) { ECHO_LM(CFG, "Z2 Endstop adjustement (mm):"); } ECHO_LMV(CFG, " M666 Z", z_endstop_adj ); #elif ENABLED(AUTO_BED_LEVELING_FEATURE) if (!forReplay) { ECHO_LM(CFG, "Z Probe offset (mm)"); } ECHO_LMV(CFG, " M666 P", zprobe_zoffset); #endif #if ENABLED(ULTIPANEL) if (!forReplay) { ECHO_LM(CFG, "Material heatup parameters:"); } ECHO_SMV(CFG, " M145 S0 H", plaPreheatHotendTemp); ECHO_MV(" B", plaPreheatHPBTemp); ECHO_MV(" F", plaPreheatFanSpeed); ECHO_EM(" (Material PLA)"); ECHO_SMV(CFG, " M145 S1 H", absPreheatHotendTemp); ECHO_MV(" B", absPreheatHPBTemp); ECHO_MV(" F", absPreheatFanSpeed); ECHO_EM(" (Material ABS)"); ECHO_SMV(CFG, " M145 S2 H", gumPreheatHotendTemp); ECHO_MV(" B", gumPreheatHPBTemp); ECHO_MV(" F", gumPreheatFanSpeed); ECHO_EM(" (Material GUM)"); #endif // ULTIPANEL #if ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED) if (!forReplay) { ECHO_LM(CFG, "PID settings:"); } #if ENABLED(PIDTEMP) for (uint8_t h = 0; h < HOTENDS; h++) { ECHO_SMV(CFG, " M301 H", h); ECHO_MV(" P", PID_PARAM(Kp, h)); ECHO_MV(" I", unscalePID_i(PID_PARAM(Ki, h))); ECHO_MV(" D", unscalePID_d(PID_PARAM(Kd, h))); #if ENABLED(PID_ADD_EXTRUSION_RATE) ECHO_MV(" C", PID_PARAM(Kc, h)); #endif ECHO_E; } #if ENABLED(PID_ADD_EXTRUSION_RATE) ECHO_SMV(CFG, " M301 L", lpq_len); #endif #endif #if ENABLED(PIDTEMPBED) ECHO_SMV(CFG, " M304 P", bedKp); // for compatibility with hosts, only echos values for E0 ECHO_MV(" I", unscalePID_i(bedKi)); ECHO_EMV(" D", unscalePID_d(bedKd)); #endif #endif #if ENABLED(FWRETRACT) if (!forReplay) { ECHO_LM(CFG, "Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)"); } ECHO_SMV(CFG, " M207 S", retract_length); ECHO_MV(" F", retract_feedrate*60); ECHO_EMV(" Z", retract_zlift); if (!forReplay) { ECHO_LM(CFG, "Recover: S=Extra length (mm) F:Speed (mm/m)"); } ECHO_SMV(CFG, " M208 S", retract_recover_length); ECHO_MV(" F", retract_recover_feedrate*60); if (!forReplay) { ECHO_LM(CFG, "Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries"); } ECHO_LMV(CFG, " M209 S", autoretract_enabled); #if EXTRUDERS > 1 if (!forReplay) { ECHO_LM(CFG, "Multi-extruder settings:"); ECHO_LMV(CFG, " Swap retract length (mm): ", retract_length_swap); ECHO_LMV(CFG, " Swap rec. addl. length (mm): ", retract_recover_length_swap); } #endif // EXTRUDERS > 1 #endif // FWRETRACT if (volumetric_enabled) { if (!forReplay) { ECHO_LM(CFG, "Filament settings:"); } ECHO_LMV(CFG, " M200 D", filament_size[0]); #if EXTRUDERS > 1 ECHO_LMV(CFG, " M200 T1 D", filament_size[1]); #if EXTRUDERS > 2 ECHO_LMV(CFG, " M200 T2 D", filament_size[2]); #if EXTRUDERS > 3 ECHO_LMV(CFG, " M200 T3 D", filament_size[3]); #endif #endif #endif } else { if (!forReplay) { ECHO_LM(CFG, "Filament settings: Disabled"); } } #if MB(ALLIGATOR) if (!forReplay) { ECHO_LM(CFG, "Current:"); } ECHO_SMV(CFG, " M906 X", motor_current[X_AXIS]); ECHO_MV(" Y", motor_current[Y_AXIS]); ECHO_MV(" Z", motor_current[Z_AXIS]); ECHO_EMV(" E", motor_current[E_AXIS]); #if DRIVER_EXTRUDERS > 1 for (uint8_t i = 1; i < DRIVER_EXTRUDERS; i++) { ECHO_SMV(CFG, " M906 T", i); ECHO_EMV(" E", motor_current[E_AXIS + i]); } #endif // DRIVER_EXTRUDERS > 1 #endif // ALLIGATOR ConfigSD_PrintSettings(forReplay); }
void Config_PrintSettings() { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("FABtotum TOTUMDUINO"); SERIAL_ECHOPAIR(" Batch Number: ", (unsigned long)fab_batch_number); SERIAL_ECHOLN(""); SERIAL_ECHOLNPGM("FABlin"); SERIAL_ECHOLNPGM(" Version: " STRING_BUILD_VERSION); SERIAL_ECHOPAIR(" Baudrate: ", (unsigned long)BAUDRATE); SERIAL_ECHOLN(""); SERIAL_ECHOLNPGM("Steps per unit:"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M92 X",axis_steps_per_unit[0]); SERIAL_ECHOPAIR_P(PMSG_WS_Y,axis_steps_per_unit[1]); SERIAL_ECHOPAIR_P(PMSG_WS_Z,axis_steps_per_unit[2]); SERIAL_ECHOPAIR_P(PMSG_WS_E,axis_steps_per_unit[3]); SERIAL_ECHOLN(""); //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M203 X",max_feedrate[0]); SERIAL_ECHOPAIR_P(PMSG_WS_Y,max_feedrate[1] ); SERIAL_ECHOPAIR_P(PMSG_WS_Z, max_feedrate[2] ); SERIAL_ECHOPAIR_P(PMSG_WS_E, max_feedrate[3]); SERIAL_ECHOLN(""); //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M201 X" ,max_acceleration_units_per_sq_second[0] ); SERIAL_ECHOPAIR_P(PMSG_WS_Y , max_acceleration_units_per_sq_second[1] ); SERIAL_ECHOPAIR_P(PMSG_WS_Z ,max_acceleration_units_per_sq_second[2] ); SERIAL_ECHOPAIR_P(PMSG_WS_E ,max_acceleration_units_per_sq_second[3]); SERIAL_ECHOLN(""); //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M204 S",acceleration ); SERIAL_ECHOPAIR_P(PMSG_WS_T, retract_acceleration); SERIAL_ECHOLN(""); //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M205 S",minimumfeedrate ); SERIAL_ECHOPAIR_P(PMSG_WS_T, mintravelfeedrate ); SERIAL_ECHOPAIR(" B" ,minsegmenttime ); SERIAL_ECHOPAIR_P(PMSG_WS_X, max_xy_jerk ); SERIAL_ECHOPAIR_P(PMSG_WS_Z, max_z_jerk); SERIAL_ECHOPAIR_P(PMSG_WS_E, max_e_jerk); SERIAL_ECHOLN(""); //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Home offset (mm):"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M206 X",add_homeing[0] ); SERIAL_ECHOPAIR_P(PMSG_WS_Y, add_homeing[1] ); SERIAL_ECHOPAIR_P(PMSG_WS_Z, add_homeing[2] ); SERIAL_ECHOLN(""); #ifdef DELTA //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Endstop adjustement (mm):"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M666 X",endstop_adj[0] ); SERIAL_ECHOPAIR_P(PMSG_WS_Y, endstop_adj[1] ); SERIAL_ECHOPAIR_P(PMSG_WS_Z, endstop_adj[2] ); SERIAL_ECHOLN(""); //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Delta settings: L=delta_diagonal_rod, R=delta_radius, S=delta_segments_per_second"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M665 L",delta_diagonal_rod ); SERIAL_ECHOPAIR(" R" ,delta_radius ); SERIAL_ECHOPAIR(" S" ,delta_segments_per_second ); SERIAL_ECHOLN(""); #endif #ifdef PIDTEMP //SERIAL_ECHO_START; SERIAL_ECHOLNPGM("PID settings:"); //SERIAL_ECHO_START; SERIAL_ECHOPAIR(" M301 P",Kp); SERIAL_ECHOPAIR(" I" ,unscalePID_i(Ki)); SERIAL_ECHOPAIR(" D" ,unscalePID_d(Kd)); SERIAL_ECHOLN(""); #endif //SERIAL_ECHO_START; SERIAL_ECHOPGM("Servo Endstop settings:"); SERIAL_PROTOCOL(" R: "); SERIAL_PROTOCOL(servo_endstop_angles[5]); SERIAL_PROTOCOL(" E: "); SERIAL_PROTOCOL(servo_endstop_angles[4]); SERIAL_PROTOCOLLN(""); //SERIAL_ECHO_START; SERIAL_ECHOPGM("Z Probe Length: "); SERIAL_PROTOCOL_F(-zprobe_zoffset,2); SERIAL_PROTOCOLLN(""); SERIAL_ECHOLNPGM("Installed head ID:"); SERIAL_ECHOPAIR(" M793 S", (unsigned long)installed_head_id); SERIAL_ECHOLN(""); }
void Config_PrintSettings() { // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown ECHO_STRING("Steps per unit:"); ECHOPAIR_F(" M92 X",axis_steps_per_unit[0]); ECHOPAIR_F(" Y",axis_steps_per_unit[1]); ECHOPAIR_F(" Z",axis_steps_per_unit[2]); ECHOPAIR_F(" E",axis_steps_per_unit[3]); ECHO_STRING("Maximum feedrates (mm/s):"); ECHOPAIR_F(" M203 X",max_feedrate[0]); ECHOPAIR_F(" Y",max_feedrate[1] ); ECHOPAIR_F(" Z", max_feedrate[2] ); ECHOPAIR_F(" E", max_feedrate[3]); ECHO_STRING(""); ECHO_STRING("Maximum Acceleration (mm/s2):"); ECHOPAIR_L(" M201 X" ,max_acceleration_units_per_sq_second[0] ); ECHOPAIR_L(" Y" , max_acceleration_units_per_sq_second[1] ); ECHOPAIR_L(" Z" ,max_acceleration_units_per_sq_second[2] ); ECHOPAIR_L(" E" ,max_acceleration_units_per_sq_second[3]); ECHO_STRING(""); ECHO_STRING("Acceleration: S=acceleration, T=retract acceleration"); ECHOPAIR_F(" M204 S",acceleration ); ECHOPAIR_F(" T" ,retract_acceleration); ECHO_STRING(""); ECHO_STRING("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)"); ECHOPAIR_F(" M205 S",minimumfeedrate ); ECHOPAIR_F(" T" ,mintravelfeedrate ); ECHOPAIR_L(" B" ,minsegmenttime ); ECHOPAIR_F(" X" ,max_xy_jerk ); ECHOPAIR_F(" Z" ,max_z_jerk); ECHOPAIR_F(" E" ,max_e_jerk); ECHO_STRING(""); ECHO_STRING("Home offset (mm):"); ECHOPAIR_F(" M206 X",add_homeing[0] ); ECHOPAIR_F(" Y" ,add_homeing[1] ); ECHOPAIR_F(" Z" ,add_homeing[2] ); ECHO_STRING(""); #ifdef PIDTEMP ECHO_STRING("PID settings:"); ECHOPAIR_F(" M301 P",Kp); ECHOPAIR_F(" I" ,unscalePID_i(Ki)); ECHOPAIR_F(" D" ,unscalePID_d(Kd)); ECHO_STRING(""); #endif ECHO_STRING("Min position (mm):"); ECHOPAIR_F(" M210 X" , base_min_pos[0] ); ECHOPAIR_F(" Y" , base_min_pos[1] ); ECHOPAIR_F(" Z" , base_min_pos[2] ); ECHO_STRING(""); ECHO_STRING("Max position (mm):"); ECHOPAIR_F(" M211 X" , base_max_pos[0] ); ECHOPAIR_F(" Y" , base_max_pos[1] ); ECHOPAIR_F(" Z" , base_max_pos[2] ); ECHO_STRING(""); #ifdef ENABLE_AUTO_BED_LEVELING ECHO_STRING("Bed probe offset (mm):"); ECHOPAIR_F(" M212 X" , bed_level_probe_offset[0] ); ECHOPAIR_F(" Y" , bed_level_probe_offset[1] ); ECHOPAIR_F(" Z" , bed_level_probe_offset[2] ); ECHO_STRING(""); #endif }