Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-I', '/home/pi/printer_data/comms/klippy.serial', '-l', '/home/pi/printer_data/logs/klippy.log', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.12.0-85-gd785b396' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper CPU: 4 core ARMv7 Processor rev 4 (v7l) Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Sat Jan 20 19:20:08 2024 (1705778408.6 3747.4) ===== Config file ===== [virtual_sdcard] path = /home/pi/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [respond] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} CLEAR_PAUSE SDCARD_RESET_FILE PRINT_END BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = BASE_PAUSE gcode = {% set z = params.Z|default(10)|int %} {% if printer['pause_resume'].is_paused|int == 0 %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 SAVE_GCODE_STATE NAME=PAUSE BASE_PAUSE {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} G91 G1 Z{z} F900 {% else %} { action_respond_info("Pause zhop exceeds maximum Z height.") } SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0 {% endif %} G90 G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000 SAVE_GCODE_STATE NAME=PAUSEPARK M104 S0 SET_IDLE_TIMEOUT TIMEOUT=43200 {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = BASE_RESUME variable_last_extruder_temp = {'restore': False, 'temp': 0} variable_restore_idle_timeout = 0 variable_idle_state = False gcode = {% set e = params.E|default(2.5)|int %} {% if printer['pause_resume'].is_paused|int == 1 %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} {% if etemp > 0 %} M109 S{etemp|int} {% endif %} RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100 G91 M83 {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %} G1 Z{zhop * -1} E{e} F900 {% else %} G1 Z{zhop * -1} F900 {% endif %} RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 BASE_RESUME {% endif %} variable_zhop = 0 variable_etemp = 0 [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1)|int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER | int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos | default(false) | lower == 'true' %} {% set custom_park_x = client.custom_park_x | default(0.0) %} {% set custom_park_y = client.custom_park_y | default(0.0) %} {% set park_dz = client.custom_park_dz | default(2.0) | abs %} {% set sp_hop = client.speed_hop | default(15) * 60 %} {% set sp_move = client.speed_move | default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z | default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN | default(0) | float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)] | min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set use_fw_retract = (client.use_fw_retract | default(false) | lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH | default(client.unretract) | default(1.0) | float %} {% set speed = params.SPEED | default(client.speed_unretract) | default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed | float | abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set length = params.LENGTH | default(client.retract) | default(1.0) | float %} {% set speed = params.SPEED | default(client.speed_retract) | default(35) %} _CLIENT_EXTRUDE LENGTH=-{length | float | abs} SPEED={speed | float | abs} [force_move] enable_force_move = true [exclude_object] [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_macro _globals] variable_filament_sensor_enabled = 1 variable_beeping_enabled = 0 variable_bed_temp_over = 10 variable_kamp_enable = 1 variable_pre_purge_prime_length = 1.40 gcode = [gcode_macro CONDITIONAL_BEEP] gcode = {% set i = params.I|default(1)|int %} {% set dur = params.DUR|default(100)|int %} {% set freq = params.FREQ|default(2000)|int %} {% set BEEPING_ENABLED=printer["gcode_macro _globals"].beeping_enabled|default(-1)|int %} {% if BEEPING_ENABLED == 1 %} BEEP I={i} DUR={dur} FREQ={freq} {% endif %} [gcode_macro ADJUST_FILAMENT_SENSOR_STATUS] gcode = {% set NEWSTATUS = params.ENABLE|default(-1)|int %} {% set FILAMENT_SENSOR_ENABLED=printer["gcode_macro _globals"].filament_sensor_enabled|default(-1)|int %} {% if FILAMENT_SENSOR_ENABLED == 1 and NEWSTATUS != -1 %} SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE={NEWSTATUS} {% endif %} [gcode_macro M109] rename_existing = M99109 gcode = {% set s = params.S|float %} M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} {% if s != 0 %} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} {% endif %} [gcode_macro M190] rename_existing = M99190 gcode = {% set s = params.S|float %} M140 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} {% if s != 0 %} TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={s} MAXIMUM={s+1} {% endif %} [gcode_macro PURGE_LINE] gcode = {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 {% set extrudeAmount = 26.6 %} {% set movementLength = 100.0 %} {% set movementSpeed = 15 * 60 %} {% set xStart = 0.5 %} {% set yStart = 0.5 %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} G92 E0.0 G90 G0 X{xStart} Y{yStart} F{maxVelocityAdjusted} G1 Z0.4 F500.0 M83 G1 E{PRE_PURGE_PRIME_LENGTH} F500 G1 X{xStart + movementLength} E{extrudeAmount} F{movementSpeed} G92 E0.0 M82 G1 Z5.0 [gcode_macro PRINT_START] gcode = ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 {% set bedtemp = params.BED|int %} {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} {% set bedtempSlicer = bedtemp %} {% set bedtempOver = printer["gcode_macro _globals"].bed_temp_over|default(0)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} {% set kampEnabled=printer["gcode_macro _globals"].kamp_enable|default(0)|int %} {% if printer.configfile.settings.safe_z_home %} {% set startX = printer.configfile.settings.safe_z_home.home_xy_position[0]|float %} {% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %} {% endif %} {% set bedtempAlmost = ((bedtemp - 2, 0, printer.heater_bed.temperature|int)|max, bedtemp)|max %} {% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %} {% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %} {% if bedtempAlmost > bedtemp %} {% if (bedtempAlmost - bedtempOver) <= bedtemp %} {% set bedtemp = bedtempAlmost %} {% endif %} {% endif %} G90 M140 S{bedtempAlmost} M104 S{hotendtempStepOne} G28 X Y {% if printer.configfile.settings.safe_z_home %} G1 X{startX} Y{startY} F{maxVelocityAdjusted} {% endif %} M190 S{bedtempAlmost} {% if kampEnabled == 0 %} M104 S{hotendtempStepTwo} {% endif %} M190 S{bedtemp} M140 S{bedtempSlicer} {% if kampEnabled == 0 %} BED_MESH_PROFILE LOAD=default M104 S{hotendtemp} G28 Z {% else %} G28 Z M104 S{hotendtemp} BED_MESH_CALIBRATE M104 S{hotendtemp} {% endif %} G1 X0 Y0 F{maxVelocityAdjusted} M109 S{hotendtemp} G1 Z20 F3000 LINE_PURGE [gcode_macro PRINT_END] gcode = ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} M400 G92 E0 G1 E-{PRE_PURGE_PRIME_LENGTH} F400 G91 {% set zVelocity = printer.configfile.settings.printer.max_z_velocity|default(15)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set zVelocityAdjusted = (0.95 * zVelocity * 60)|int %} {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} {% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %} {% if printer.toolhead.position.x < (max_x - 20) %} {% set x_safe = 20.0 %} {% else %} {% set x_safe = -20.0 %} {% endif %} {% if printer.toolhead.position.y < (max_y - 20) %} {% set y_safe = 20.0 %} {% else %} {% set y_safe = -20.0 %} {% endif %} {% set lift_height = 25.0 %} {% if printer.toolhead.position.z < (max_z - lift_height) %} {% set z_safe = lift_height %} {% else %} {% set z_safe = max_z - printer.toolhead.position.z %} {% endif %} G0 Z{z_safe} F{zVelocityAdjusted} G0 X{x_safe} Y{y_safe} F{maxVelocityAdjusted} TURN_OFF_HEATERS M107 G90 G0 X60 Y{max_y} F3600 [gcode_macro LOAD_FILAMENT] gcode = M83 G1 E30 F300 G1 E15 F150 M82 [gcode_macro UNLOAD_FILAMENT] gcode = M83 G1 E10 F300 G1 E-40 F1800 M82 [gcode_macro M600] gcode = CONDITIONAL_BEEP i=1 dur=300 CONDITIONAL_BEEP i=1 dur=100 CONDITIONAL_BEEP i=1 dur=100 PAUSE [gcode_macro _CG28] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} [gcode_macro BEEP] description = BEEP I=3 DUR=200 FREQ=2000: Beep 3 times, for 200ms each, at 2kHz frequency. gcode = {% set i = params.I|default(1)|int %} {% set dur = params.DUR|default(100)|int %} {% set freq = params.FREQ|default(2000)|int %} {% for iteration in range(i|int) %} SET_PIN PIN=beeper VALUE=0.8 CYCLE_TIME={ 1.0/freq if freq > 0 else 1 } G4 P{dur} SET_PIN PIN=beeper VALUE=0 G4 P{dur} {% endfor %} [gcode_macro PARKFRONT] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKFRONT G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000 RESTORE_GCODE_STATE NAME=PARKFRONT [gcode_macro PARKFRONTLOW] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKFRONT G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000 RESTORE_GCODE_STATE NAME=PARKFRONT [gcode_macro PARKREAR] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKREAR G90 G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000 RESTORE_GCODE_STATE NAME=PARKREAR [gcode_macro PARKCENTER] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKCENTER G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000 RESTORE_GCODE_STATE NAME=PARKCENTER [gcode_macro PARKBED] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKBED G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000 RESTORE_GCODE_STATE NAME=PARKBED [gcode_macro MECHANICAL_GANTRY_CALIBRATION] gcode = {% set my_current = params.CURRENT|default(0.20)|float %} {% set oldcurrent = printer.configfile.settings["tmc2209 stepper_z"].run_current %} {% set oldhold = printer.configfile.settings["tmc2209 stepper_z"].hold_current %} {% set x_max = printer.toolhead.axis_maximum.x %} {% set y_max = printer.toolhead.axis_maximum.y %} {% set z_max = printer.toolhead.axis_maximum.z %} {% set fast_move_z = printer.configfile.settings["printer"].max_z_velocity %} {% set fast_move = printer.configfile.settings["printer"].max_velocity %} M117 {printer.homed_axes} {% if printer.homed_axes != 'xyz' %} G28 {% endif %} G90 G0 X{x_max / 2} Y{y_max / 2} F{fast_move * 30 } G0 Z{z_max -5} F{fast_move_z * 60 } SET_TMC_CURRENT STEPPER=stepper_z CURRENT={my_current} {% if printer.configfile.settings["stepper_z1"] %} SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={my_current} {% endif %} CONDITIONAL_BEEP I=1 G4 P200 SET_KINEMATIC_POSITION Z={z_max - 25} G1 Z{z_max} F{6 * 60} CONDITIONAL_BEEP I=2 G4 P10000 G1 Z{z_max -6} F{6 * 60} CONDITIONAL_BEEP I=3 G4 P200 SET_TMC_CURRENT STEPPER=stepper_z CURRENT={oldcurrent} HOLDCURRENT={oldhold} {% if printer.configfile.settings["stepper_z1"] %} SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={oldcurrent} HOLDCURRENT={oldhold} {% endif %} G1 Z{z_max -30} F{6 * 60} G4 P200 G28 Z [gcode_macro G34] gcode = MECHANICAL_GANTRY_CALIBRATION [gcode_macro PID_TEST_BED] gcode = {% set TARGETTEMP = params.TEMP|default(70)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} G28 G90 G1 X{max_x/2} Y{max_y/2} Z40 F6000 PID_CALIBRATE HEATER=heater_bed TARGET={TARGETTEMP} [gcode_macro PID_TEST_HOTEND] gcode = {% set TARGETTEMP = params.TEMP|default(245)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} G28 G90 G1 X{max_x/2} Y{max_y/2} Z10 F6000 M106 S64 PID_CALIBRATE HEATER=extruder TARGET={TARGETTEMP} M107 [gcode_macro PID_TEST_ALL] gcode = PID_TEST_BED PID_TEST_HOTEND SAVE_CONFIG [gcode_macro DO_PROBE_CALIBRATE] gcode = SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 G28 PROBE_CALIBRATE [gcode_macro DO_CREATE_MESH] gcode = SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 G28 _BED_MESH_CALIBRATE [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE gcode = {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set kamp_settings = printer["gcode_macro _KAMP_Settings"] %} {% set verbose_enable = kamp_settings.verbose_enable | abs %} {% set probe_dock_enable = kamp_settings.probe_dock_enable | abs %} {% set attach_macro = kamp_settings.attach_macro | string %} {% set detach_macro = kamp_settings.detach_macro | string %} {% set mesh_margin = kamp_settings.mesh_margin | float %} {% set fuzz_amount = kamp_settings.fuzz_amount | float %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} {% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} {% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} {% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} {% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} {% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} {% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} {% set adapted_x_max = [adapted_x_max , bed_mesh_max[0]] | min %} {% set adapted_y_max = [adapted_y_max , bed_mesh_max[1]] | min %} {% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} {% set points_x = [points_x , min_points]|max %} {% set points_y = [points_y , min_points]|max %} {% set points_x = [points_x , probe_count[0]]|min %} {% set points_y = [points_y , probe_count[1]]|min %} {% if verbose_enable == True %} {% if printer.exclude_object.objects != [] %} { action_respond_info( "Algorithm: {}.".format( (algorithm), )) } { action_respond_info("Default probe count: {},{}.".format( (probe_count[0]), (probe_count[1]), )) } { action_respond_info("Adapted probe count: {},{}.".format( (points_x), (points_y), )) } {action_respond_info("Default mesh bounds: {}, {}.".format( (bed_mesh_min[0],bed_mesh_min[1]), (bed_mesh_max[0],bed_mesh_max[1]), )) } {% if mesh_margin > 0 %} {action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format( (mesh_margin), (mesh_margin), )) } {% else %} {action_respond_info("Mesh margin is 0, margin not increased.")} {% endif %} {% if fuzz_amount > 0 %} {action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format( (fuzz_amount), )) } {% else %} {action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")} {% endif %} { action_respond_info("Adapted mesh bounds: {}, {}.".format( (adapted_x_min, adapted_y_min), (adapted_x_max, adapted_y_max), )) } {action_respond_info("KAMP adjustments successful. Happy KAMPing!")} {% else %} {action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")} G4 P5000 {% endif %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} bicubic_tension=0.5 {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects gcode = {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} {% set cross_section = printer.configfile.settings.extruder.max_extrude_cross_section | float %} {% if printer.firmware_retraction is defined %} {% set RETRACT = G10 | string %} {% set UNRETRACT = G11 | string %} {% else %} {% set RETRACT = 'G1 E-.5 F2100' | string %} {% set UNRETRACT = 'G1 E.5 F2100' | string %} {% endif %} {% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} {% set purge_height = printer["gcode_macro _KAMP_Settings"].purge_height | float %} {% set tip_distance = printer["gcode_macro _KAMP_Settings"].tip_distance | float %} {% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %} {% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %} {% set flow_rate = printer["gcode_macro _KAMP_Settings"].flow_rate | float %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set purge_x_min = (all_points | map(attribute=0) | min | default(0)) %} {% set purge_x_max = (all_points | map(attribute=0) | max | default(0)) %} {% set purge_y_min = (all_points | map(attribute=1) | min | default(0)) %} {% set purge_y_max = (all_points | map(attribute=1) | max | default(0)) %} {% set purge_x_center = ([((purge_x_max + purge_x_min) / 2) - (purge_amount / 2), 0] | max) %} {% set purge_y_center = ([((purge_y_max + purge_y_min) / 2) - (purge_amount / 2), 0] | max) %} {% set purge_x_origin = ([purge_x_min - purge_margin, 0] | max) %} {% set purge_y_origin = ([purge_y_min - purge_margin, 0] | max) %} {% set purge_move_speed = (flow_rate / 5.0) * 60 | float %} {% if cross_section < 5 %} {action_respond_info("[Extruder] max_extrude_cross_section is insufficient for purge, please set it to 5 or greater. Purge skipped.")} {% else %} {% if verbose_enable == True %} {action_respond_info("Moving filament tip {}mms".format( (tip_distance), )) } {% endif %} {% if printer.firmware_retraction is defined %} {action_respond_info("KAMP purge is using firmware retraction.")} {% else %} {action_respond_info("KAMP purge is not using firmware retraction, it is recommended to configure it.")} {% endif %} {% if purge_y_origin > 0 %} {action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( (purge_x_center), (purge_y_origin), (purge_amount), (flow_rate), )) } {% else %} {action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( (purge_x_origin), (purge_y_center), (purge_amount), (flow_rate), )) } {% endif %} SAVE_GCODE_STATE NAME=Prepurge_State {% if purge_y_origin > 0 %} G92 E0 G0 F{travel_speed} G90 G0 X{purge_x_center} Y{purge_y_origin} G0 Z{purge_height} M83 G1 E{tip_distance} F{purge_move_speed} G1 X{purge_x_center + purge_amount} E{purge_amount} F{purge_move_speed} {RETRACT} G0 X{purge_x_center + purge_amount + 10} F{travel_speed} G92 E0 M82 G0 Z{purge_height * 2} F{travel_speed} {% else %} G92 E0 G0 F{travel_speed} G90 G0 X{purge_x_origin} Y{purge_y_center} G0 Z{purge_height} M83 G1 E{tip_distance} F{purge_move_speed} G1 Y{purge_y_center + purge_amount} E{purge_amount} F{purge_move_speed} {RETRACT} G0 Y{purge_y_center + purge_amount + 10} F{travel_speed} G92 E0 M82 G0 Z{purge_height * 2} F{travel_speed} {% endif %} RESTORE_GCODE_STATE NAME=Prepurge_State {% endif %} [gcode_macro _KAMP_Settings] description = This macro contains all adjustable settings for KAMP variable_verbose_enable = True variable_mesh_margin = 0 variable_fuzz_amount = 0 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_purge_height = 0.8 variable_tip_distance = 0 variable_purge_margin = 30 variable_purge_amount = 15 variable_flow_rate = 12 variable_smart_park_height = 10 gcode = {action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")} [gcode_macro TEST_SPEED] gcode = {% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %} {% set iterations = params.ITERATIONS|default(5)|int %} {% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %} {% set bound = params.BOUND|default(20)|int %} {% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %} {% set x_min = printer.toolhead.axis_minimum.x + bound %} {% set x_max = printer.toolhead.axis_maximum.x - bound %} {% set y_min = printer.toolhead.axis_minimum.y + bound %} {% set y_max = printer.toolhead.axis_maximum.y - bound %} {% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %} {% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %} {% set x_center_min = x_center - (smallpatternsize/2) %} {% set x_center_max = x_center + (smallpatternsize/2) %} {% set y_center_min = y_center - (smallpatternsize/2) %} {% set y_center_max = y_center + (smallpatternsize/2) %} SAVE_GCODE_STATE NAME=TEST_SPEED { action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) } M400 G28 {% if printer.configfile.settings.quad_gantry_level %} {% if printer.quad_gantry_level.applied == False %} QUAD_GANTRY_LEVEL G28 Z {% endif %} {% endif %} G90 G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60} M400 G28 X Y G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60} SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2} {% for i in range(iterations) %} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} {% endfor %} SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel} M400 G28 G90 G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION RESTORE_GCODE_STATE NAME=TEST_SPEED [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [printer] kinematics = cartesian max_velocity = 250 max_accel = 2500 max_z_velocity = 15 max_z_accel = 45 square_corner_velocity = 8.0 [stepper_x] step_pin = PC2 dir_pin = !PB9 enable_pin = !PC3 microsteps = 32 rotation_distance = 40 endstop_pin = tmc2209_stepper_x:virtual_endstop position_endstop = 0 position_max = 300 homing_speed = 60 homing_retract_dist = 0 [tmc2209 stepper_x] uart_pin = PC1 run_current = 0.820 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 driver_sgthrs = 100 diag_pin = PA5 [stepper_y] step_pin = PB8 dir_pin = PB7 enable_pin = !PC3 microsteps = 32 rotation_distance = 40 endstop_pin = tmc2209_stepper_y:virtual_endstop position_endstop = 0 position_max = 300 homing_speed = 60 homing_retract_dist = 0 [tmc2209 stepper_y] uart_pin = PC0 run_current = 0.880 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 driver_sgthrs = 130 diag_pin = PA6 [stepper_z] step_pin = PB6 dir_pin = !PB5 enable_pin = !PC3 microsteps = 32 rotation_distance = 4 endstop_pin = probe:z_virtual_endstop position_min = -1 position_max = 340 homing_speed = 7 [tmc2209 stepper_z] uart_pin = PA15 run_current = 0.800 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 diag_pin = PA7 [extruder] step_pin = PB4 dir_pin = !PB3 enable_pin = !PC3 microsteps = 128 rotation_distance = 4.65 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 max_extrude_only_distance = 150.0 max_extrude_cross_section = 5 pressure_advance = 0.04 control = pid pid_kp = 25.452 pid_ki = 1.996 pid_kd = 81.128 [tmc2209 extruder] uart_pin = PC14 run_current = 0.550 stealthchop_threshold = 0 interpolate = False sense_resistor = 0.150 uart_address = 3 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 110 control = pid pid_kp = 72.380 pid_ki = 1.049 pid_kd = 1248.561 [probe] pin = PB1 x_offset = 27 y_offset = -20 samples = 3 samples_result = median samples_tolerance = 0.01 samples_tolerance_retries = 5 z_offset = 2.225 [safe_z_home] home_xy_position = 123, 170 speed = 100.0 z_hop = 3 z_hop_speed = 20 [bed_mesh] speed = 175 mesh_min = 28, 20 mesh_max = 278, 280 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 bicubic_tension = 0.5 [axis_twist_compensation] calibrate_start_x = 27 calibrate_end_x = 272 calibrate_y = 154 z_compensations = 0.059740, -0.012135, -0.047604 compensation_start_x = 27.0 compensation_end_x = 272.0 [fan] pin = PA0 [screws_tilt_adjust] screw1_name = center front left base screw1 = 84, 136 screw2_name = front left screw2 = 5, 55 screw3_name = front right screw3 = 244, 55 screw4_name = center front right screw4 = 164, 136 screw5_name = center back left screw5 = 84, 216 screw6_name = center back right screw6 = 164, 216 screw7_name = back left screw7 = 5, 295 screw8_name = back right screw8 = 244, 295 horizontal_move_z = 10 screw_thread = CCW-M4 [filament_switch_sensor filament_sensor] switch_pin = PA4 pause_on_runout = True insert_gcode = { action_respond_info("Insert Detected") } runout_gcode = { action_respond_info("Runout Detected") } CONDITIONAL_BEEP i=3 dur=300 freq=400 [t5uid1] volume = 100 [bed_mesh silicone sixth go 55c good enough] version = 1 points = -0.042969, -0.084844, -0.105625, -0.110469, -0.095938, -0.067813, -0.069531 -0.005781, -0.080938, -0.084219, -0.080938, -0.069375, -0.038281, -0.043125 -0.054531, -0.073750, -0.071406, -0.075313, -0.032656, -0.016875, -0.017969 -0.056875, -0.066094, -0.048906, -0.033906, -0.018594, 0.008125, -0.006875 -0.047969, -0.058438, -0.049063, -0.042031, -0.013438, -0.012344, -0.041094 -0.022188, -0.060625, -0.067656, -0.068906, -0.053594, -0.050156, -0.084688 -0.030781, -0.073438, -0.092969, -0.094219, -0.090313, -0.077188, -0.116719 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.2 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 10 after tweaking z steppers ] version = 1 points = 0.029062, 0.023594, -0.018906, -0.061250, -0.130469, -0.172188, -0.210469 0.068281, -0.048438, -0.069844, -0.107344, -0.118438, -0.131094, -0.171250 0.012187, -0.047656, -0.056563, -0.083125, -0.072500, -0.092969, -0.133125 0.017031, -0.027500, -0.030000, -0.041719, -0.036875, -0.046719, -0.103906 0.050469, -0.010625, -0.031875, -0.040000, -0.030781, -0.057188, -0.123281 0.135625, 0.042031, -0.014375, -0.047656, -0.061094, -0.089375, -0.153906 0.211250, 0.107500, 0.017187, -0.031406, -0.076250, -0.089063, -0.161406 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 11 after adjusting with calliper] version = 1 points = -0.109531, -0.065938, -0.063125, -0.079844, -0.143594, -0.193750, -0.239688 -0.013750, -0.083594, -0.088750, -0.108438, -0.133281, -0.143906, -0.203281 -0.014219, -0.041094, -0.049219, -0.077500, -0.084688, -0.113594, -0.161719 0.005781, -0.022031, -0.032969, -0.034688, -0.043125, -0.082813, -0.137656 0.042344, 0.004844, -0.014844, -0.042188, -0.033594, -0.078750, -0.140156 0.098750, 0.025156, -0.018594, -0.047656, -0.068594, -0.100781, -0.162344 0.115625, 0.042969, -0.015156, -0.060000, -0.084219, -0.110156, -0.169063 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 12 after adjusting right z down a bit and tape and bed screws] version = 1 points = -0.163438, -0.097813, -0.083281, -0.074219, -0.113281, -0.136875, -0.139219 -0.070000, -0.121719, -0.105156, -0.107813, -0.103750, -0.088906, -0.108594 -0.077500, -0.078750, -0.067969, -0.078281, -0.060938, -0.060938, -0.072969 -0.068281, -0.065313, -0.054688, -0.026875, -0.022031, -0.023438, -0.048906 -0.051719, -0.046094, -0.037031, -0.044844, -0.021094, -0.024688, -0.057344 -0.028125, -0.054063, -0.059219, -0.056719, -0.051094, -0.054375, -0.084219 -0.041875, -0.061406, -0.079219, -0.074063, -0.073750, -0.067188, -0.099375 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 13 leave it alone !] version = 1 points = -0.020625, -0.055000, -0.046250, -0.052031, -0.081563, -0.083750, -0.077813 -0.026094, -0.098125, -0.083125, -0.095469, -0.080156, -0.060781, -0.064844 -0.052031, -0.067188, -0.061250, -0.068750, -0.057344, -0.034219, -0.046094 -0.057969, -0.059844, -0.052813, -0.025938, -0.017500, -0.011094, -0.029844 -0.050625, -0.051406, -0.039688, -0.029531, -0.012500, -0.008750, -0.038281 -0.043594, -0.064531, -0.067656, -0.056250, -0.046719, -0.035000, -0.066563 -0.063438, -0.080781, -0.090000, -0.079531, -0.073750, -0.056250, -0.080469 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 14 tweaked right up a bit ] version = 1 points = -0.051250, -0.062813, -0.053750, -0.039844, -0.066875, -0.067344, -0.034844 -0.045469, -0.105156, -0.096094, -0.089844, -0.070938, -0.038125, -0.022813 -0.072500, -0.071875, -0.064688, -0.070938, -0.047344, -0.020156, -0.004844 -0.079219, -0.071250, -0.056563, -0.029844, -0.016094, -0.000000, 0.005312 -0.063750, -0.056250, -0.040313, -0.035781, -0.004375, 0.000469, 0.000937 -0.051719, -0.071719, -0.064063, -0.063281, -0.034219, -0.019063, -0.017031 -0.066875, -0.082344, -0.088125, -0.068906, -0.052500, -0.016406, -0.019219 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 15 after axis twist calibrate] version = 1 points = -0.026095, -0.048229, -0.014113, -0.043591, -0.078694, -0.092547, -0.142306, -0.169662, -0.163894, -0.188594 0.019530, -0.028542, -0.007082, -0.029997, -0.044944, -0.073016, -0.140118, -0.147631, -0.156394, -0.170157 0.066561, -0.014011, -0.001926, -0.027341, -0.051663, -0.083797, -0.114181, -0.114975, -0.122956, -0.146719 0.038905, -0.024948, -0.035207, -0.045154, -0.076819, -0.089109, -0.098556, -0.097318, -0.098269, -0.121719 0.029530, -0.000104, -0.015676, -0.019216, -0.038381, -0.052547, -0.067774, -0.073725, -0.092956, -0.106407 0.038280, 0.010833, -0.003801, -0.009060, -0.019631, -0.030203, -0.050431, -0.064350, -0.089519, -0.104219 0.047186, 0.022239, -0.005363, -0.003747, -0.029006, -0.042547, -0.048868, -0.065131, -0.092331, -0.117032 0.056873, 0.010208, -0.014113, -0.030935, -0.051819, -0.060047, -0.074649, -0.092006, -0.112956, -0.145313 0.049998, 0.002552, -0.021145, -0.046247, -0.074319, -0.073016, -0.081368, -0.102006, -0.139050, -0.175469 0.048592, 0.003333, 0.055262, -0.004997, -0.053850, -0.016609, -0.021056, -0.094662, -0.158269, -0.191719 x_count = 10 y_count = 10 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.93 min_y = 20.0 max_y = 279.92 [bed_mesh 16 after aligning x to bed. manual probe doesnt agree with auto probe] version = 1 points = -0.115942, -0.057926, -0.080222, -0.123740, -0.120430 -0.029536, -0.073395, -0.093190, -0.077021, -0.074961 -0.062974, -0.066988, -0.060065, -0.026083, -0.044180 -0.035005, -0.065582, -0.073034, -0.056240, -0.094336 -0.002349, -0.038707, -0.065222, -0.062646, -0.145586 x_count = 5 y_count = 5 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.5 min_x = 28.0 max_x = 278.0 min_y = 20.0 max_y = 280.0 [bed_mesh 17 before tape on 2 right corners] version = 1 points = -0.119067, -0.062573, -0.055142, -0.065366, -0.087231, -0.117106, -0.125575 -0.036099, -0.051948, -0.037173, -0.020210, -0.079106, -0.080075, -0.089950 -0.045630, -0.078042, -0.056548, -0.061304, -0.041606, -0.024606, -0.053543 -0.052661, -0.041480, -0.028735, -0.015679, 0.004488, -0.010700, -0.032918 -0.037974, -0.044761, -0.022329, -0.030054, -0.000512, -0.026325, -0.061512 -0.022349, -0.048980, -0.027798, -0.036148, -0.025200, -0.074293, -0.121668 -0.038286, -0.065698, -0.026860, -0.055523, -0.045825, -0.112106, -0.180262 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 17 another tweak] version = 1 points = -0.185474, -0.125386, -0.123423, -0.128960, -0.149106, -0.163825, -0.078543 -0.087817, -0.100855, -0.088735, -0.068179, -0.132387, -0.125075, -0.126668 -0.101880, -0.120542, -0.108267, -0.094429, -0.088012, -0.077887, -0.082137 -0.098286, -0.083355, -0.067173, -0.044429, -0.035044, -0.046325, -0.063543 -0.080474, -0.085855, -0.065610, -0.063648, -0.045669, -0.059293, -0.085575 -0.042817, -0.081636, -0.068423, -0.073023, -0.071137, -0.086950, -0.101825 -0.037505, -0.085542, -0.057329, -0.087866, -0.078169, -0.069293, -0.066200 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 17 tape and screws] version = 1 points = 0.104526, 0.039770, -0.006392, -0.036773, -0.055981, -0.005856, -0.089012 0.059214, 0.008677, -0.011860, -0.018804, -0.088950, -0.069450, -0.069950 -0.001880, -0.058198, -0.067954, -0.080835, -0.060981, -0.032418, -0.039637 -0.022661, -0.048042, -0.042485, -0.030210, -0.022700, -0.016637, -0.025418 -0.022817, -0.051167, -0.042329, -0.041148, -0.030356, -0.031950, -0.054481 0.004995, -0.053667, -0.041392, -0.052710, -0.050356, -0.061637, -0.073231 -0.005786, -0.067417, -0.041704, -0.067554, -0.065200, -0.053825, -0.059481 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 18 before gantry align] version = 1 points = -0.082661, -0.092886, -0.089985, -0.089741, -0.094731, -0.024293, -0.101981 -0.080317, -0.080698, -0.073423, -0.050679, -0.105981, -0.080231, -0.080575 -0.095317, -0.115386, -0.096548, -0.097398, -0.087231, -0.041325, -0.046668 -0.087974, -0.080542, -0.061079, -0.045835, -0.032856, -0.024293, -0.032918 -0.080317, -0.081636, -0.058579, -0.052866, -0.040044, -0.036168, -0.057606 -0.063599, -0.091948, -0.071860, -0.066304, -0.054419, -0.069450, -0.079168 -0.084224, -0.111636, -0.067954, -0.083648, -0.074262, -0.064762, -0.085887 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 18 after gantry levelling block align] version = 1 points = -0.027817, -0.045542, -0.040923, -0.046304, -0.045981, 0.009613, -0.050106 -0.023130, -0.043198, -0.030142, -0.011616, -0.074419, -0.048043, -0.035106 -0.043130, -0.081792, -0.054517, -0.064741, -0.040669, -0.002575, -0.005887 -0.030161, -0.040073, -0.009985, -0.024741, 0.007613, 0.016175, 0.002863 -0.027817, -0.035542, -0.020923, -0.018648, 0.003706, 0.003832, -0.017606 -0.002661, -0.037261, -0.019360, -0.027866, -0.013794, -0.017887, -0.034012 -0.020630, -0.059292, -0.015923, -0.037085, -0.030512, -0.012106, -0.024325 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 5pm ] version = 1 points = -0.004849, -0.034605, -0.057017, -0.068804, -0.072387, -0.016012, 0.000363 -0.019849, -0.047730, -0.040454, -0.038804, -0.096450, -0.063512, -0.057762 -0.054849, -0.098511, -0.083735, -0.083335, -0.073169, -0.035856, -0.030418 -0.047192, -0.067105, -0.041392, -0.040054, -0.023481, -0.000075, -0.020418 -0.049849, -0.063667, -0.048579, -0.045679, -0.024731, -0.024293, -0.045418 -0.023286, -0.060855, -0.046704, -0.050210, -0.043481, -0.054762, -0.068387 -0.042036, -0.079448, -0.053579, -0.068491, -0.057700, -0.055387, -0.064325 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 14_1 1] version = 1 points = -0.028911, -0.044292, -0.046079, -0.055366, -0.041762, 0.014457, 0.045832 -0.011099, -0.025542, -0.018892, -0.004116, -0.055669, -0.024137, -0.006356 -0.035786, -0.064292, -0.050767, -0.053648, -0.033950, 0.002894, 0.011300 -0.015161, -0.026948, -0.011860, -0.003179, -0.000512, 0.021488, 0.006925 0.002495, -0.014136, -0.004360, -0.014116, -0.000356, -0.009762, -0.036825 0.040464, -0.006167, -0.007798, -0.018648, -0.024419, -0.050231, -0.070262 0.035620, -0.020073, 0.002515, -0.027398, -0.031450, -0.039606, -0.066825 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 16_1 1] version = 1 points = 0.083120, 0.055708, 0.047671, 0.038696, 0.028394, 0.074925, 0.023332 0.077183, 0.058989, 0.056108, 0.072915, 0.015738, 0.046957, 0.050988 0.047339, 0.100708, 0.086733, 0.117290, 0.037144, 0.086175, 0.090363 0.059214, 0.050708, 0.064702, 0.070102, 0.078238, 0.110863, 0.097707 0.052183, 0.045395, 0.065952, 0.059946, 0.077300, 0.082738, 0.075988 0.050620, 0.016333, 0.050327, 0.049946, 0.051363, 0.049457, 0.057863 -0.002505, -0.026480, 0.032827, 0.023852, 0.041519, 0.069144, 0.070675 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 16_1 2] version = 1 points = 0.025620, -0.002261, -0.014673, -0.037866, -0.049419, -0.021793, -0.101043 0.028120, 0.002270, -0.012329, -0.004273, -0.063950, -0.056481, -0.078231 0.015620, 0.051333, 0.015015, 0.033852, -0.033481, -0.010700, -0.031043 0.003120, -0.002573, -0.001860, -0.019116, 0.004331, -0.002731, -0.022606 0.021870, 0.001489, 0.003765, -0.022710, -0.012544, -0.023200, -0.047293 0.043433, -0.005073, 0.000796, -0.022241, -0.026606, -0.041950, -0.048075 0.029839, -0.022573, 0.001265, -0.025366, -0.034575, -0.009293, -0.012293 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh default] version = 1 points = -0.088755, -0.101323, -0.072017, -0.046460, -0.096762, -0.086325, -0.095262 -0.056880, -0.070698, -0.062017, -0.053960, -0.070512, -0.061950, -0.050887 -0.073130, -0.005073, 0.017358, 0.031665, -0.040512, -0.024450, -0.028387 -0.066880, -0.056323, -0.036392, -0.025210, -0.008012, -0.005075, -0.014012 -0.069380, -0.065698, -0.040767, -0.035835, -0.018637, -0.028825, -0.035262 -0.076880, -0.081948, -0.070142, -0.061460, -0.062387, -0.060075, -0.070262 -0.103755, -0.113823, -0.019517, -0.036460, -0.013637, -0.036950, -0.039637 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 41.6 max_y = 258.38 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1965058104: New connection webhooks client 1965058104: Client info {'program': 'Moonraker', 'version': 'v0.8.0-268-ga23187b'} Unable to issue reset command on MCU 'mcu' webhooks client 1965058104: Disconnected Restarting printer Start printer at Sat Jan 20 19:20:16 2024 (1705778416.6 3755.4) ===== Config file ===== [virtual_sdcard] path = /home/pi/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [respond] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} CLEAR_PAUSE SDCARD_RESET_FILE PRINT_END BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = BASE_PAUSE gcode = {% set z = params.Z|default(10)|int %} {% if printer['pause_resume'].is_paused|int == 0 %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 SAVE_GCODE_STATE NAME=PAUSE BASE_PAUSE {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} G91 G1 Z{z} F900 {% else %} { action_respond_info("Pause zhop exceeds maximum Z height.") } SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0 {% endif %} G90 G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000 SAVE_GCODE_STATE NAME=PAUSEPARK M104 S0 SET_IDLE_TIMEOUT TIMEOUT=43200 {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = BASE_RESUME variable_last_extruder_temp = {'restore': False, 'temp': 0} variable_restore_idle_timeout = 0 variable_idle_state = False gcode = {% set e = params.E|default(2.5)|int %} {% if printer['pause_resume'].is_paused|int == 1 %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} {% if etemp > 0 %} M109 S{etemp|int} {% endif %} RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100 G91 M83 {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %} G1 Z{zhop * -1} E{e} F900 {% else %} G1 Z{zhop * -1} F900 {% endif %} RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 BASE_RESUME {% endif %} variable_zhop = 0 variable_etemp = 0 [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1)|int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER | int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos | default(false) | lower == 'true' %} {% set custom_park_x = client.custom_park_x | default(0.0) %} {% set custom_park_y = client.custom_park_y | default(0.0) %} {% set park_dz = client.custom_park_dz | default(2.0) | abs %} {% set sp_hop = client.speed_hop | default(15) * 60 %} {% set sp_move = client.speed_move | default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z | default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN | default(0) | float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)] | min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set use_fw_retract = (client.use_fw_retract | default(false) | lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH | default(client.unretract) | default(1.0) | float %} {% set speed = params.SPEED | default(client.speed_unretract) | default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed | float | abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set length = params.LENGTH | default(client.retract) | default(1.0) | float %} {% set speed = params.SPEED | default(client.speed_retract) | default(35) %} _CLIENT_EXTRUDE LENGTH=-{length | float | abs} SPEED={speed | float | abs} [force_move] enable_force_move = true [exclude_object] [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_macro _globals] variable_filament_sensor_enabled = 1 variable_beeping_enabled = 0 variable_bed_temp_over = 10 variable_kamp_enable = 1 variable_pre_purge_prime_length = 1.40 gcode = [gcode_macro CONDITIONAL_BEEP] gcode = {% set i = params.I|default(1)|int %} {% set dur = params.DUR|default(100)|int %} {% set freq = params.FREQ|default(2000)|int %} {% set BEEPING_ENABLED=printer["gcode_macro _globals"].beeping_enabled|default(-1)|int %} {% if BEEPING_ENABLED == 1 %} BEEP I={i} DUR={dur} FREQ={freq} {% endif %} [gcode_macro ADJUST_FILAMENT_SENSOR_STATUS] gcode = {% set NEWSTATUS = params.ENABLE|default(-1)|int %} {% set FILAMENT_SENSOR_ENABLED=printer["gcode_macro _globals"].filament_sensor_enabled|default(-1)|int %} {% if FILAMENT_SENSOR_ENABLED == 1 and NEWSTATUS != -1 %} SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE={NEWSTATUS} {% endif %} [gcode_macro M109] rename_existing = M99109 gcode = {% set s = params.S|float %} M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} {% if s != 0 %} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} {% endif %} [gcode_macro M190] rename_existing = M99190 gcode = {% set s = params.S|float %} M140 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} {% if s != 0 %} TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={s} MAXIMUM={s+1} {% endif %} [gcode_macro PURGE_LINE] gcode = {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 {% set extrudeAmount = 26.6 %} {% set movementLength = 100.0 %} {% set movementSpeed = 15 * 60 %} {% set xStart = 0.5 %} {% set yStart = 0.5 %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} G92 E0.0 G90 G0 X{xStart} Y{yStart} F{maxVelocityAdjusted} G1 Z0.4 F500.0 M83 G1 E{PRE_PURGE_PRIME_LENGTH} F500 G1 X{xStart + movementLength} E{extrudeAmount} F{movementSpeed} G92 E0.0 M82 G1 Z5.0 [gcode_macro PRINT_START] gcode = ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 {% set bedtemp = params.BED|int %} {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} {% set bedtempSlicer = bedtemp %} {% set bedtempOver = printer["gcode_macro _globals"].bed_temp_over|default(0)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} {% set kampEnabled=printer["gcode_macro _globals"].kamp_enable|default(0)|int %} {% if printer.configfile.settings.safe_z_home %} {% set startX = printer.configfile.settings.safe_z_home.home_xy_position[0]|float %} {% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %} {% endif %} {% set bedtempAlmost = ((bedtemp - 2, 0, printer.heater_bed.temperature|int)|max, bedtemp)|max %} {% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %} {% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %} {% if bedtempAlmost > bedtemp %} {% if (bedtempAlmost - bedtempOver) <= bedtemp %} {% set bedtemp = bedtempAlmost %} {% endif %} {% endif %} G90 M140 S{bedtempAlmost} M104 S{hotendtempStepOne} G28 X Y {% if printer.configfile.settings.safe_z_home %} G1 X{startX} Y{startY} F{maxVelocityAdjusted} {% endif %} M190 S{bedtempAlmost} {% if kampEnabled == 0 %} M104 S{hotendtempStepTwo} {% endif %} M190 S{bedtemp} M140 S{bedtempSlicer} {% if kampEnabled == 0 %} BED_MESH_PROFILE LOAD=default M104 S{hotendtemp} G28 Z {% else %} G28 Z M104 S{hotendtemp} BED_MESH_CALIBRATE M104 S{hotendtemp} {% endif %} G1 X0 Y0 F{maxVelocityAdjusted} M109 S{hotendtemp} G1 Z20 F3000 LINE_PURGE [gcode_macro PRINT_END] gcode = ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} M400 G92 E0 G1 E-{PRE_PURGE_PRIME_LENGTH} F400 G91 {% set zVelocity = printer.configfile.settings.printer.max_z_velocity|default(15)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set zVelocityAdjusted = (0.95 * zVelocity * 60)|int %} {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} {% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %} {% if printer.toolhead.position.x < (max_x - 20) %} {% set x_safe = 20.0 %} {% else %} {% set x_safe = -20.0 %} {% endif %} {% if printer.toolhead.position.y < (max_y - 20) %} {% set y_safe = 20.0 %} {% else %} {% set y_safe = -20.0 %} {% endif %} {% set lift_height = 25.0 %} {% if printer.toolhead.position.z < (max_z - lift_height) %} {% set z_safe = lift_height %} {% else %} {% set z_safe = max_z - printer.toolhead.position.z %} {% endif %} G0 Z{z_safe} F{zVelocityAdjusted} G0 X{x_safe} Y{y_safe} F{maxVelocityAdjusted} TURN_OFF_HEATERS M107 G90 G0 X60 Y{max_y} F3600 [gcode_macro LOAD_FILAMENT] gcode = M83 G1 E30 F300 G1 E15 F150 M82 [gcode_macro UNLOAD_FILAMENT] gcode = M83 G1 E10 F300 G1 E-40 F1800 M82 [gcode_macro M600] gcode = CONDITIONAL_BEEP i=1 dur=300 CONDITIONAL_BEEP i=1 dur=100 CONDITIONAL_BEEP i=1 dur=100 PAUSE [gcode_macro _CG28] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} [gcode_macro BEEP] description = BEEP I=3 DUR=200 FREQ=2000: Beep 3 times, for 200ms each, at 2kHz frequency. gcode = {% set i = params.I|default(1)|int %} {% set dur = params.DUR|default(100)|int %} {% set freq = params.FREQ|default(2000)|int %} {% for iteration in range(i|int) %} SET_PIN PIN=beeper VALUE=0.8 CYCLE_TIME={ 1.0/freq if freq > 0 else 1 } G4 P{dur} SET_PIN PIN=beeper VALUE=0 G4 P{dur} {% endfor %} [gcode_macro PARKFRONT] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKFRONT G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000 RESTORE_GCODE_STATE NAME=PARKFRONT [gcode_macro PARKFRONTLOW] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKFRONT G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000 RESTORE_GCODE_STATE NAME=PARKFRONT [gcode_macro PARKREAR] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKREAR G90 G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000 RESTORE_GCODE_STATE NAME=PARKREAR [gcode_macro PARKCENTER] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKCENTER G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000 RESTORE_GCODE_STATE NAME=PARKCENTER [gcode_macro PARKBED] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKBED G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000 RESTORE_GCODE_STATE NAME=PARKBED [gcode_macro MECHANICAL_GANTRY_CALIBRATION] gcode = {% set my_current = params.CURRENT|default(0.20)|float %} {% set oldcurrent = printer.configfile.settings["tmc2209 stepper_z"].run_current %} {% set oldhold = printer.configfile.settings["tmc2209 stepper_z"].hold_current %} {% set x_max = printer.toolhead.axis_maximum.x %} {% set y_max = printer.toolhead.axis_maximum.y %} {% set z_max = printer.toolhead.axis_maximum.z %} {% set fast_move_z = printer.configfile.settings["printer"].max_z_velocity %} {% set fast_move = printer.configfile.settings["printer"].max_velocity %} M117 {printer.homed_axes} {% if printer.homed_axes != 'xyz' %} G28 {% endif %} G90 G0 X{x_max / 2} Y{y_max / 2} F{fast_move * 30 } G0 Z{z_max -5} F{fast_move_z * 60 } SET_TMC_CURRENT STEPPER=stepper_z CURRENT={my_current} {% if printer.configfile.settings["stepper_z1"] %} SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={my_current} {% endif %} CONDITIONAL_BEEP I=1 G4 P200 SET_KINEMATIC_POSITION Z={z_max - 25} G1 Z{z_max} F{6 * 60} CONDITIONAL_BEEP I=2 G4 P10000 G1 Z{z_max -6} F{6 * 60} CONDITIONAL_BEEP I=3 G4 P200 SET_TMC_CURRENT STEPPER=stepper_z CURRENT={oldcurrent} HOLDCURRENT={oldhold} {% if printer.configfile.settings["stepper_z1"] %} SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={oldcurrent} HOLDCURRENT={oldhold} {% endif %} G1 Z{z_max -30} F{6 * 60} G4 P200 G28 Z [gcode_macro G34] gcode = MECHANICAL_GANTRY_CALIBRATION [gcode_macro PID_TEST_BED] gcode = {% set TARGETTEMP = params.TEMP|default(70)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} G28 G90 G1 X{max_x/2} Y{max_y/2} Z40 F6000 PID_CALIBRATE HEATER=heater_bed TARGET={TARGETTEMP} [gcode_macro PID_TEST_HOTEND] gcode = {% set TARGETTEMP = params.TEMP|default(245)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} G28 G90 G1 X{max_x/2} Y{max_y/2} Z10 F6000 M106 S64 PID_CALIBRATE HEATER=extruder TARGET={TARGETTEMP} M107 [gcode_macro PID_TEST_ALL] gcode = PID_TEST_BED PID_TEST_HOTEND SAVE_CONFIG [gcode_macro DO_PROBE_CALIBRATE] gcode = SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 G28 PROBE_CALIBRATE [gcode_macro DO_CREATE_MESH] gcode = SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 G28 _BED_MESH_CALIBRATE [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE gcode = {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set kamp_settings = printer["gcode_macro _KAMP_Settings"] %} {% set verbose_enable = kamp_settings.verbose_enable | abs %} {% set probe_dock_enable = kamp_settings.probe_dock_enable | abs %} {% set attach_macro = kamp_settings.attach_macro | string %} {% set detach_macro = kamp_settings.detach_macro | string %} {% set mesh_margin = kamp_settings.mesh_margin | float %} {% set fuzz_amount = kamp_settings.fuzz_amount | float %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} {% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} {% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} {% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} {% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} {% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} {% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} {% set adapted_x_max = [adapted_x_max , bed_mesh_max[0]] | min %} {% set adapted_y_max = [adapted_y_max , bed_mesh_max[1]] | min %} {% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} {% set points_x = [points_x , min_points]|max %} {% set points_y = [points_y , min_points]|max %} {% set points_x = [points_x , probe_count[0]]|min %} {% set points_y = [points_y , probe_count[1]]|min %} {% if verbose_enable == True %} {% if printer.exclude_object.objects != [] %} { action_respond_info( "Algorithm: {}.".format( (algorithm), )) } { action_respond_info("Default probe count: {},{}.".format( (probe_count[0]), (probe_count[1]), )) } { action_respond_info("Adapted probe count: {},{}.".format( (points_x), (points_y), )) } {action_respond_info("Default mesh bounds: {}, {}.".format( (bed_mesh_min[0],bed_mesh_min[1]), (bed_mesh_max[0],bed_mesh_max[1]), )) } {% if mesh_margin > 0 %} {action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format( (mesh_margin), (mesh_margin), )) } {% else %} {action_respond_info("Mesh margin is 0, margin not increased.")} {% endif %} {% if fuzz_amount > 0 %} {action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format( (fuzz_amount), )) } {% else %} {action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")} {% endif %} { action_respond_info("Adapted mesh bounds: {}, {}.".format( (adapted_x_min, adapted_y_min), (adapted_x_max, adapted_y_max), )) } {action_respond_info("KAMP adjustments successful. Happy KAMPing!")} {% else %} {action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")} G4 P5000 {% endif %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} bicubic_tension=0.5 {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects gcode = {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} {% set cross_section = printer.configfile.settings.extruder.max_extrude_cross_section | float %} {% if printer.firmware_retraction is defined %} {% set RETRACT = G10 | string %} {% set UNRETRACT = G11 | string %} {% else %} {% set RETRACT = 'G1 E-.5 F2100' | string %} {% set UNRETRACT = 'G1 E.5 F2100' | string %} {% endif %} {% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} {% set purge_height = printer["gcode_macro _KAMP_Settings"].purge_height | float %} {% set tip_distance = printer["gcode_macro _KAMP_Settings"].tip_distance | float %} {% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %} {% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %} {% set flow_rate = printer["gcode_macro _KAMP_Settings"].flow_rate | float %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set purge_x_min = (all_points | map(attribute=0) | min | default(0)) %} {% set purge_x_max = (all_points | map(attribute=0) | max | default(0)) %} {% set purge_y_min = (all_points | map(attribute=1) | min | default(0)) %} {% set purge_y_max = (all_points | map(attribute=1) | max | default(0)) %} {% set purge_x_center = ([((purge_x_max + purge_x_min) / 2) - (purge_amount / 2), 0] | max) %} {% set purge_y_center = ([((purge_y_max + purge_y_min) / 2) - (purge_amount / 2), 0] | max) %} {% set purge_x_origin = ([purge_x_min - purge_margin, 0] | max) %} {% set purge_y_origin = ([purge_y_min - purge_margin, 0] | max) %} {% set purge_move_speed = (flow_rate / 5.0) * 60 | float %} {% if cross_section < 5 %} {action_respond_info("[Extruder] max_extrude_cross_section is insufficient for purge, please set it to 5 or greater. Purge skipped.")} {% else %} {% if verbose_enable == True %} {action_respond_info("Moving filament tip {}mms".format( (tip_distance), )) } {% endif %} {% if printer.firmware_retraction is defined %} {action_respond_info("KAMP purge is using firmware retraction.")} {% else %} {action_respond_info("KAMP purge is not using firmware retraction, it is recommended to configure it.")} {% endif %} {% if purge_y_origin > 0 %} {action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( (purge_x_center), (purge_y_origin), (purge_amount), (flow_rate), )) } {% else %} {action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( (purge_x_origin), (purge_y_center), (purge_amount), (flow_rate), )) } {% endif %} SAVE_GCODE_STATE NAME=Prepurge_State {% if purge_y_origin > 0 %} G92 E0 G0 F{travel_speed} G90 G0 X{purge_x_center} Y{purge_y_origin} G0 Z{purge_height} M83 G1 E{tip_distance} F{purge_move_speed} G1 X{purge_x_center + purge_amount} E{purge_amount} F{purge_move_speed} {RETRACT} G0 X{purge_x_center + purge_amount + 10} F{travel_speed} G92 E0 M82 G0 Z{purge_height * 2} F{travel_speed} {% else %} G92 E0 G0 F{travel_speed} G90 G0 X{purge_x_origin} Y{purge_y_center} G0 Z{purge_height} M83 G1 E{tip_distance} F{purge_move_speed} G1 Y{purge_y_center + purge_amount} E{purge_amount} F{purge_move_speed} {RETRACT} G0 Y{purge_y_center + purge_amount + 10} F{travel_speed} G92 E0 M82 G0 Z{purge_height * 2} F{travel_speed} {% endif %} RESTORE_GCODE_STATE NAME=Prepurge_State {% endif %} [gcode_macro _KAMP_Settings] description = This macro contains all adjustable settings for KAMP variable_verbose_enable = True variable_mesh_margin = 0 variable_fuzz_amount = 0 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_purge_height = 0.8 variable_tip_distance = 0 variable_purge_margin = 30 variable_purge_amount = 15 variable_flow_rate = 12 variable_smart_park_height = 10 gcode = {action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")} [gcode_macro TEST_SPEED] gcode = {% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %} {% set iterations = params.ITERATIONS|default(5)|int %} {% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %} {% set bound = params.BOUND|default(20)|int %} {% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %} {% set x_min = printer.toolhead.axis_minimum.x + bound %} {% set x_max = printer.toolhead.axis_maximum.x - bound %} {% set y_min = printer.toolhead.axis_minimum.y + bound %} {% set y_max = printer.toolhead.axis_maximum.y - bound %} {% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %} {% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %} {% set x_center_min = x_center - (smallpatternsize/2) %} {% set x_center_max = x_center + (smallpatternsize/2) %} {% set y_center_min = y_center - (smallpatternsize/2) %} {% set y_center_max = y_center + (smallpatternsize/2) %} SAVE_GCODE_STATE NAME=TEST_SPEED { action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) } M400 G28 {% if printer.configfile.settings.quad_gantry_level %} {% if printer.quad_gantry_level.applied == False %} QUAD_GANTRY_LEVEL G28 Z {% endif %} {% endif %} G90 G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60} M400 G28 X Y G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60} SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2} {% for i in range(iterations) %} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} {% endfor %} SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel} M400 G28 G90 G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION RESTORE_GCODE_STATE NAME=TEST_SPEED [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [printer] kinematics = cartesian max_velocity = 250 max_accel = 2500 max_z_velocity = 15 max_z_accel = 45 square_corner_velocity = 8.0 [stepper_x] step_pin = PC2 dir_pin = !PB9 enable_pin = !PC3 microsteps = 32 rotation_distance = 40 endstop_pin = tmc2209_stepper_x:virtual_endstop position_endstop = 0 position_max = 300 homing_speed = 60 homing_retract_dist = 0 [tmc2209 stepper_x] uart_pin = PC1 run_current = 0.820 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 driver_sgthrs = 100 diag_pin = PA5 [stepper_y] step_pin = PB8 dir_pin = PB7 enable_pin = !PC3 microsteps = 32 rotation_distance = 40 endstop_pin = tmc2209_stepper_y:virtual_endstop position_endstop = 0 position_max = 300 homing_speed = 60 homing_retract_dist = 0 [tmc2209 stepper_y] uart_pin = PC0 run_current = 0.880 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 driver_sgthrs = 130 diag_pin = PA6 [stepper_z] step_pin = PB6 dir_pin = !PB5 enable_pin = !PC3 microsteps = 32 rotation_distance = 4 endstop_pin = probe:z_virtual_endstop position_min = -1 position_max = 340 homing_speed = 7 [tmc2209 stepper_z] uart_pin = PA15 run_current = 0.800 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 diag_pin = PA7 [extruder] step_pin = PB4 dir_pin = !PB3 enable_pin = !PC3 microsteps = 128 rotation_distance = 4.65 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 max_extrude_only_distance = 150.0 max_extrude_cross_section = 5 pressure_advance = 0.04 control = pid pid_kp = 25.452 pid_ki = 1.996 pid_kd = 81.128 [tmc2209 extruder] uart_pin = PC14 run_current = 0.550 stealthchop_threshold = 0 interpolate = False sense_resistor = 0.150 uart_address = 3 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 110 control = pid pid_kp = 72.380 pid_ki = 1.049 pid_kd = 1248.561 [probe] pin = PB1 x_offset = 27 y_offset = -20 samples = 3 samples_result = median samples_tolerance = 0.01 samples_tolerance_retries = 5 z_offset = 2.225 [safe_z_home] home_xy_position = 123, 170 speed = 100.0 z_hop = 3 z_hop_speed = 20 [bed_mesh] speed = 175 mesh_min = 28, 20 mesh_max = 278, 280 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 bicubic_tension = 0.5 [axis_twist_compensation] calibrate_start_x = 27 calibrate_end_x = 272 calibrate_y = 154 z_compensations = 0.059740, -0.012135, -0.047604 compensation_start_x = 27.0 compensation_end_x = 272.0 [fan] pin = PA0 [screws_tilt_adjust] screw1_name = center front left base screw1 = 84, 136 screw2_name = front left screw2 = 5, 55 screw3_name = front right screw3 = 244, 55 screw4_name = center front right screw4 = 164, 136 screw5_name = center back left screw5 = 84, 216 screw6_name = center back right screw6 = 164, 216 screw7_name = back left screw7 = 5, 295 screw8_name = back right screw8 = 244, 295 horizontal_move_z = 10 screw_thread = CCW-M4 [filament_switch_sensor filament_sensor] switch_pin = PA4 pause_on_runout = True insert_gcode = { action_respond_info("Insert Detected") } runout_gcode = { action_respond_info("Runout Detected") } CONDITIONAL_BEEP i=3 dur=300 freq=400 [t5uid1] volume = 100 [bed_mesh silicone sixth go 55c good enough] version = 1 points = -0.042969, -0.084844, -0.105625, -0.110469, -0.095938, -0.067813, -0.069531 -0.005781, -0.080938, -0.084219, -0.080938, -0.069375, -0.038281, -0.043125 -0.054531, -0.073750, -0.071406, -0.075313, -0.032656, -0.016875, -0.017969 -0.056875, -0.066094, -0.048906, -0.033906, -0.018594, 0.008125, -0.006875 -0.047969, -0.058438, -0.049063, -0.042031, -0.013438, -0.012344, -0.041094 -0.022188, -0.060625, -0.067656, -0.068906, -0.053594, -0.050156, -0.084688 -0.030781, -0.073438, -0.092969, -0.094219, -0.090313, -0.077188, -0.116719 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.2 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 10 after tweaking z steppers ] version = 1 points = 0.029062, 0.023594, -0.018906, -0.061250, -0.130469, -0.172188, -0.210469 0.068281, -0.048438, -0.069844, -0.107344, -0.118438, -0.131094, -0.171250 0.012187, -0.047656, -0.056563, -0.083125, -0.072500, -0.092969, -0.133125 0.017031, -0.027500, -0.030000, -0.041719, -0.036875, -0.046719, -0.103906 0.050469, -0.010625, -0.031875, -0.040000, -0.030781, -0.057188, -0.123281 0.135625, 0.042031, -0.014375, -0.047656, -0.061094, -0.089375, -0.153906 0.211250, 0.107500, 0.017187, -0.031406, -0.076250, -0.089063, -0.161406 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 11 after adjusting with calliper] version = 1 points = -0.109531, -0.065938, -0.063125, -0.079844, -0.143594, -0.193750, -0.239688 -0.013750, -0.083594, -0.088750, -0.108438, -0.133281, -0.143906, -0.203281 -0.014219, -0.041094, -0.049219, -0.077500, -0.084688, -0.113594, -0.161719 0.005781, -0.022031, -0.032969, -0.034688, -0.043125, -0.082813, -0.137656 0.042344, 0.004844, -0.014844, -0.042188, -0.033594, -0.078750, -0.140156 0.098750, 0.025156, -0.018594, -0.047656, -0.068594, -0.100781, -0.162344 0.115625, 0.042969, -0.015156, -0.060000, -0.084219, -0.110156, -0.169063 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 12 after adjusting right z down a bit and tape and bed screws] version = 1 points = -0.163438, -0.097813, -0.083281, -0.074219, -0.113281, -0.136875, -0.139219 -0.070000, -0.121719, -0.105156, -0.107813, -0.103750, -0.088906, -0.108594 -0.077500, -0.078750, -0.067969, -0.078281, -0.060938, -0.060938, -0.072969 -0.068281, -0.065313, -0.054688, -0.026875, -0.022031, -0.023438, -0.048906 -0.051719, -0.046094, -0.037031, -0.044844, -0.021094, -0.024688, -0.057344 -0.028125, -0.054063, -0.059219, -0.056719, -0.051094, -0.054375, -0.084219 -0.041875, -0.061406, -0.079219, -0.074063, -0.073750, -0.067188, -0.099375 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 13 leave it alone !] version = 1 points = -0.020625, -0.055000, -0.046250, -0.052031, -0.081563, -0.083750, -0.077813 -0.026094, -0.098125, -0.083125, -0.095469, -0.080156, -0.060781, -0.064844 -0.052031, -0.067188, -0.061250, -0.068750, -0.057344, -0.034219, -0.046094 -0.057969, -0.059844, -0.052813, -0.025938, -0.017500, -0.011094, -0.029844 -0.050625, -0.051406, -0.039688, -0.029531, -0.012500, -0.008750, -0.038281 -0.043594, -0.064531, -0.067656, -0.056250, -0.046719, -0.035000, -0.066563 -0.063438, -0.080781, -0.090000, -0.079531, -0.073750, -0.056250, -0.080469 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 14 tweaked right up a bit ] version = 1 points = -0.051250, -0.062813, -0.053750, -0.039844, -0.066875, -0.067344, -0.034844 -0.045469, -0.105156, -0.096094, -0.089844, -0.070938, -0.038125, -0.022813 -0.072500, -0.071875, -0.064688, -0.070938, -0.047344, -0.020156, -0.004844 -0.079219, -0.071250, -0.056563, -0.029844, -0.016094, -0.000000, 0.005312 -0.063750, -0.056250, -0.040313, -0.035781, -0.004375, 0.000469, 0.000937 -0.051719, -0.071719, -0.064063, -0.063281, -0.034219, -0.019063, -0.017031 -0.066875, -0.082344, -0.088125, -0.068906, -0.052500, -0.016406, -0.019219 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 15 after axis twist calibrate] version = 1 points = -0.026095, -0.048229, -0.014113, -0.043591, -0.078694, -0.092547, -0.142306, -0.169662, -0.163894, -0.188594 0.019530, -0.028542, -0.007082, -0.029997, -0.044944, -0.073016, -0.140118, -0.147631, -0.156394, -0.170157 0.066561, -0.014011, -0.001926, -0.027341, -0.051663, -0.083797, -0.114181, -0.114975, -0.122956, -0.146719 0.038905, -0.024948, -0.035207, -0.045154, -0.076819, -0.089109, -0.098556, -0.097318, -0.098269, -0.121719 0.029530, -0.000104, -0.015676, -0.019216, -0.038381, -0.052547, -0.067774, -0.073725, -0.092956, -0.106407 0.038280, 0.010833, -0.003801, -0.009060, -0.019631, -0.030203, -0.050431, -0.064350, -0.089519, -0.104219 0.047186, 0.022239, -0.005363, -0.003747, -0.029006, -0.042547, -0.048868, -0.065131, -0.092331, -0.117032 0.056873, 0.010208, -0.014113, -0.030935, -0.051819, -0.060047, -0.074649, -0.092006, -0.112956, -0.145313 0.049998, 0.002552, -0.021145, -0.046247, -0.074319, -0.073016, -0.081368, -0.102006, -0.139050, -0.175469 0.048592, 0.003333, 0.055262, -0.004997, -0.053850, -0.016609, -0.021056, -0.094662, -0.158269, -0.191719 x_count = 10 y_count = 10 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.93 min_y = 20.0 max_y = 279.92 [bed_mesh 16 after aligning x to bed. manual probe doesnt agree with auto probe] version = 1 points = -0.115942, -0.057926, -0.080222, -0.123740, -0.120430 -0.029536, -0.073395, -0.093190, -0.077021, -0.074961 -0.062974, -0.066988, -0.060065, -0.026083, -0.044180 -0.035005, -0.065582, -0.073034, -0.056240, -0.094336 -0.002349, -0.038707, -0.065222, -0.062646, -0.145586 x_count = 5 y_count = 5 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.5 min_x = 28.0 max_x = 278.0 min_y = 20.0 max_y = 280.0 [bed_mesh 17 before tape on 2 right corners] version = 1 points = -0.119067, -0.062573, -0.055142, -0.065366, -0.087231, -0.117106, -0.125575 -0.036099, -0.051948, -0.037173, -0.020210, -0.079106, -0.080075, -0.089950 -0.045630, -0.078042, -0.056548, -0.061304, -0.041606, -0.024606, -0.053543 -0.052661, -0.041480, -0.028735, -0.015679, 0.004488, -0.010700, -0.032918 -0.037974, -0.044761, -0.022329, -0.030054, -0.000512, -0.026325, -0.061512 -0.022349, -0.048980, -0.027798, -0.036148, -0.025200, -0.074293, -0.121668 -0.038286, -0.065698, -0.026860, -0.055523, -0.045825, -0.112106, -0.180262 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 17 another tweak] version = 1 points = -0.185474, -0.125386, -0.123423, -0.128960, -0.149106, -0.163825, -0.078543 -0.087817, -0.100855, -0.088735, -0.068179, -0.132387, -0.125075, -0.126668 -0.101880, -0.120542, -0.108267, -0.094429, -0.088012, -0.077887, -0.082137 -0.098286, -0.083355, -0.067173, -0.044429, -0.035044, -0.046325, -0.063543 -0.080474, -0.085855, -0.065610, -0.063648, -0.045669, -0.059293, -0.085575 -0.042817, -0.081636, -0.068423, -0.073023, -0.071137, -0.086950, -0.101825 -0.037505, -0.085542, -0.057329, -0.087866, -0.078169, -0.069293, -0.066200 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 17 tape and screws] version = 1 points = 0.104526, 0.039770, -0.006392, -0.036773, -0.055981, -0.005856, -0.089012 0.059214, 0.008677, -0.011860, -0.018804, -0.088950, -0.069450, -0.069950 -0.001880, -0.058198, -0.067954, -0.080835, -0.060981, -0.032418, -0.039637 -0.022661, -0.048042, -0.042485, -0.030210, -0.022700, -0.016637, -0.025418 -0.022817, -0.051167, -0.042329, -0.041148, -0.030356, -0.031950, -0.054481 0.004995, -0.053667, -0.041392, -0.052710, -0.050356, -0.061637, -0.073231 -0.005786, -0.067417, -0.041704, -0.067554, -0.065200, -0.053825, -0.059481 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 18 before gantry align] version = 1 points = -0.082661, -0.092886, -0.089985, -0.089741, -0.094731, -0.024293, -0.101981 -0.080317, -0.080698, -0.073423, -0.050679, -0.105981, -0.080231, -0.080575 -0.095317, -0.115386, -0.096548, -0.097398, -0.087231, -0.041325, -0.046668 -0.087974, -0.080542, -0.061079, -0.045835, -0.032856, -0.024293, -0.032918 -0.080317, -0.081636, -0.058579, -0.052866, -0.040044, -0.036168, -0.057606 -0.063599, -0.091948, -0.071860, -0.066304, -0.054419, -0.069450, -0.079168 -0.084224, -0.111636, -0.067954, -0.083648, -0.074262, -0.064762, -0.085887 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 18 after gantry levelling block align] version = 1 points = -0.027817, -0.045542, -0.040923, -0.046304, -0.045981, 0.009613, -0.050106 -0.023130, -0.043198, -0.030142, -0.011616, -0.074419, -0.048043, -0.035106 -0.043130, -0.081792, -0.054517, -0.064741, -0.040669, -0.002575, -0.005887 -0.030161, -0.040073, -0.009985, -0.024741, 0.007613, 0.016175, 0.002863 -0.027817, -0.035542, -0.020923, -0.018648, 0.003706, 0.003832, -0.017606 -0.002661, -0.037261, -0.019360, -0.027866, -0.013794, -0.017887, -0.034012 -0.020630, -0.059292, -0.015923, -0.037085, -0.030512, -0.012106, -0.024325 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 5pm ] version = 1 points = -0.004849, -0.034605, -0.057017, -0.068804, -0.072387, -0.016012, 0.000363 -0.019849, -0.047730, -0.040454, -0.038804, -0.096450, -0.063512, -0.057762 -0.054849, -0.098511, -0.083735, -0.083335, -0.073169, -0.035856, -0.030418 -0.047192, -0.067105, -0.041392, -0.040054, -0.023481, -0.000075, -0.020418 -0.049849, -0.063667, -0.048579, -0.045679, -0.024731, -0.024293, -0.045418 -0.023286, -0.060855, -0.046704, -0.050210, -0.043481, -0.054762, -0.068387 -0.042036, -0.079448, -0.053579, -0.068491, -0.057700, -0.055387, -0.064325 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 14_1 1] version = 1 points = -0.028911, -0.044292, -0.046079, -0.055366, -0.041762, 0.014457, 0.045832 -0.011099, -0.025542, -0.018892, -0.004116, -0.055669, -0.024137, -0.006356 -0.035786, -0.064292, -0.050767, -0.053648, -0.033950, 0.002894, 0.011300 -0.015161, -0.026948, -0.011860, -0.003179, -0.000512, 0.021488, 0.006925 0.002495, -0.014136, -0.004360, -0.014116, -0.000356, -0.009762, -0.036825 0.040464, -0.006167, -0.007798, -0.018648, -0.024419, -0.050231, -0.070262 0.035620, -0.020073, 0.002515, -0.027398, -0.031450, -0.039606, -0.066825 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 16_1 1] version = 1 points = 0.083120, 0.055708, 0.047671, 0.038696, 0.028394, 0.074925, 0.023332 0.077183, 0.058989, 0.056108, 0.072915, 0.015738, 0.046957, 0.050988 0.047339, 0.100708, 0.086733, 0.117290, 0.037144, 0.086175, 0.090363 0.059214, 0.050708, 0.064702, 0.070102, 0.078238, 0.110863, 0.097707 0.052183, 0.045395, 0.065952, 0.059946, 0.077300, 0.082738, 0.075988 0.050620, 0.016333, 0.050327, 0.049946, 0.051363, 0.049457, 0.057863 -0.002505, -0.026480, 0.032827, 0.023852, 0.041519, 0.069144, 0.070675 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 16_1 2] version = 1 points = 0.025620, -0.002261, -0.014673, -0.037866, -0.049419, -0.021793, -0.101043 0.028120, 0.002270, -0.012329, -0.004273, -0.063950, -0.056481, -0.078231 0.015620, 0.051333, 0.015015, 0.033852, -0.033481, -0.010700, -0.031043 0.003120, -0.002573, -0.001860, -0.019116, 0.004331, -0.002731, -0.022606 0.021870, 0.001489, 0.003765, -0.022710, -0.012544, -0.023200, -0.047293 0.043433, -0.005073, 0.000796, -0.022241, -0.026606, -0.041950, -0.048075 0.029839, -0.022573, 0.001265, -0.025366, -0.034575, -0.009293, -0.012293 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh default] version = 1 points = -0.088755, -0.101323, -0.072017, -0.046460, -0.096762, -0.086325, -0.095262 -0.056880, -0.070698, -0.062017, -0.053960, -0.070512, -0.061950, -0.050887 -0.073130, -0.005073, 0.017358, 0.031665, -0.040512, -0.024450, -0.028387 -0.066880, -0.056323, -0.036392, -0.025210, -0.008012, -0.005075, -0.014012 -0.069380, -0.065698, -0.040767, -0.035835, -0.018637, -0.028825, -0.035262 -0.076880, -0.081948, -0.070142, -0.061460, -0.062387, -0.060075, -0.070262 -0.103755, -0.113823, -0.019517, -0.036460, -0.013637, -0.036950, -0.039637 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 41.6 max_y = 258.38 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1965220288: New connection webhooks client 1965220288: Client info {'program': 'Moonraker', 'version': 'v0.8.0-268-ga23187b'} webhooks client 1965220288: Disconnected Restarting printer Start printer at Sat Jan 20 19:20:21 2024 (1705778421.9 3760.7) ===== Config file ===== [virtual_sdcard] path = /home/pi/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [respond] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} CLEAR_PAUSE SDCARD_RESET_FILE PRINT_END BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = BASE_PAUSE gcode = {% set z = params.Z|default(10)|int %} {% if printer['pause_resume'].is_paused|int == 0 %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 SAVE_GCODE_STATE NAME=PAUSE BASE_PAUSE {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} G91 G1 Z{z} F900 {% else %} { action_respond_info("Pause zhop exceeds maximum Z height.") } SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0 {% endif %} G90 G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000 SAVE_GCODE_STATE NAME=PAUSEPARK M104 S0 SET_IDLE_TIMEOUT TIMEOUT=43200 {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = BASE_RESUME variable_last_extruder_temp = {'restore': False, 'temp': 0} variable_restore_idle_timeout = 0 variable_idle_state = False gcode = {% set e = params.E|default(2.5)|int %} {% if printer['pause_resume'].is_paused|int == 1 %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} {% if etemp > 0 %} M109 S{etemp|int} {% endif %} RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100 G91 M83 {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %} G1 Z{zhop * -1} E{e} F900 {% else %} G1 Z{zhop * -1} F900 {% endif %} RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 BASE_RESUME {% endif %} variable_zhop = 0 variable_etemp = 0 [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1)|int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER | int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos | default(false) | lower == 'true' %} {% set custom_park_x = client.custom_park_x | default(0.0) %} {% set custom_park_y = client.custom_park_y | default(0.0) %} {% set park_dz = client.custom_park_dz | default(2.0) | abs %} {% set sp_hop = client.speed_hop | default(15) * 60 %} {% set sp_move = client.speed_move | default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z | default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN | default(0) | float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)] | min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set use_fw_retract = (client.use_fw_retract | default(false) | lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH | default(client.unretract) | default(1.0) | float %} {% set speed = params.SPEED | default(client.speed_unretract) | default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed | float | abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE'] | default({}) %} {% set length = params.LENGTH | default(client.retract) | default(1.0) | float %} {% set speed = params.SPEED | default(client.speed_retract) | default(35) %} _CLIENT_EXTRUDE LENGTH=-{length | float | abs} SPEED={speed | float | abs} [force_move] enable_force_move = true [exclude_object] [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_macro _globals] variable_filament_sensor_enabled = 1 variable_beeping_enabled = 0 variable_bed_temp_over = 10 variable_kamp_enable = 1 variable_pre_purge_prime_length = 1.40 gcode = [gcode_macro CONDITIONAL_BEEP] gcode = {% set i = params.I|default(1)|int %} {% set dur = params.DUR|default(100)|int %} {% set freq = params.FREQ|default(2000)|int %} {% set BEEPING_ENABLED=printer["gcode_macro _globals"].beeping_enabled|default(-1)|int %} {% if BEEPING_ENABLED == 1 %} BEEP I={i} DUR={dur} FREQ={freq} {% endif %} [gcode_macro ADJUST_FILAMENT_SENSOR_STATUS] gcode = {% set NEWSTATUS = params.ENABLE|default(-1)|int %} {% set FILAMENT_SENSOR_ENABLED=printer["gcode_macro _globals"].filament_sensor_enabled|default(-1)|int %} {% if FILAMENT_SENSOR_ENABLED == 1 and NEWSTATUS != -1 %} SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE={NEWSTATUS} {% endif %} [gcode_macro M109] rename_existing = M99109 gcode = {% set s = params.S|float %} M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} {% if s != 0 %} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} {% endif %} [gcode_macro M190] rename_existing = M99190 gcode = {% set s = params.S|float %} M140 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} {% if s != 0 %} TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={s} MAXIMUM={s+1} {% endif %} [gcode_macro PURGE_LINE] gcode = {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 {% set extrudeAmount = 26.6 %} {% set movementLength = 100.0 %} {% set movementSpeed = 15 * 60 %} {% set xStart = 0.5 %} {% set yStart = 0.5 %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} G92 E0.0 G90 G0 X{xStart} Y{yStart} F{maxVelocityAdjusted} G1 Z0.4 F500.0 M83 G1 E{PRE_PURGE_PRIME_LENGTH} F500 G1 X{xStart + movementLength} E{extrudeAmount} F{movementSpeed} G92 E0.0 M82 G1 Z5.0 [gcode_macro PRINT_START] gcode = ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 {% set bedtemp = params.BED|int %} {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} {% set bedtempSlicer = bedtemp %} {% set bedtempOver = printer["gcode_macro _globals"].bed_temp_over|default(0)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} {% set kampEnabled=printer["gcode_macro _globals"].kamp_enable|default(0)|int %} {% if printer.configfile.settings.safe_z_home %} {% set startX = printer.configfile.settings.safe_z_home.home_xy_position[0]|float %} {% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %} {% endif %} {% set bedtempAlmost = ((bedtemp - 2, 0, printer.heater_bed.temperature|int)|max, bedtemp)|max %} {% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %} {% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %} {% if bedtempAlmost > bedtemp %} {% if (bedtempAlmost - bedtempOver) <= bedtemp %} {% set bedtemp = bedtempAlmost %} {% endif %} {% endif %} G90 M140 S{bedtempAlmost} M104 S{hotendtempStepOne} G28 X Y {% if printer.configfile.settings.safe_z_home %} G1 X{startX} Y{startY} F{maxVelocityAdjusted} {% endif %} M190 S{bedtempAlmost} {% if kampEnabled == 0 %} M104 S{hotendtempStepTwo} {% endif %} M190 S{bedtemp} M140 S{bedtempSlicer} {% if kampEnabled == 0 %} BED_MESH_PROFILE LOAD=default M104 S{hotendtemp} G28 Z {% else %} G28 Z M104 S{hotendtemp} BED_MESH_CALIBRATE M104 S{hotendtemp} {% endif %} G1 X0 Y0 F{maxVelocityAdjusted} M109 S{hotendtemp} G1 Z20 F3000 LINE_PURGE [gcode_macro PRINT_END] gcode = ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} M400 G92 E0 G1 E-{PRE_PURGE_PRIME_LENGTH} F400 G91 {% set zVelocity = printer.configfile.settings.printer.max_z_velocity|default(15)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set zVelocityAdjusted = (0.95 * zVelocity * 60)|int %} {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} {% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %} {% if printer.toolhead.position.x < (max_x - 20) %} {% set x_safe = 20.0 %} {% else %} {% set x_safe = -20.0 %} {% endif %} {% if printer.toolhead.position.y < (max_y - 20) %} {% set y_safe = 20.0 %} {% else %} {% set y_safe = -20.0 %} {% endif %} {% set lift_height = 25.0 %} {% if printer.toolhead.position.z < (max_z - lift_height) %} {% set z_safe = lift_height %} {% else %} {% set z_safe = max_z - printer.toolhead.position.z %} {% endif %} G0 Z{z_safe} F{zVelocityAdjusted} G0 X{x_safe} Y{y_safe} F{maxVelocityAdjusted} TURN_OFF_HEATERS M107 G90 G0 X60 Y{max_y} F3600 [gcode_macro LOAD_FILAMENT] gcode = M83 G1 E30 F300 G1 E15 F150 M82 [gcode_macro UNLOAD_FILAMENT] gcode = M83 G1 E10 F300 G1 E-40 F1800 M82 [gcode_macro M600] gcode = CONDITIONAL_BEEP i=1 dur=300 CONDITIONAL_BEEP i=1 dur=100 CONDITIONAL_BEEP i=1 dur=100 PAUSE [gcode_macro _CG28] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} [gcode_macro BEEP] description = BEEP I=3 DUR=200 FREQ=2000: Beep 3 times, for 200ms each, at 2kHz frequency. gcode = {% set i = params.I|default(1)|int %} {% set dur = params.DUR|default(100)|int %} {% set freq = params.FREQ|default(2000)|int %} {% for iteration in range(i|int) %} SET_PIN PIN=beeper VALUE=0.8 CYCLE_TIME={ 1.0/freq if freq > 0 else 1 } G4 P{dur} SET_PIN PIN=beeper VALUE=0 G4 P{dur} {% endfor %} [gcode_macro PARKFRONT] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKFRONT G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000 RESTORE_GCODE_STATE NAME=PARKFRONT [gcode_macro PARKFRONTLOW] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKFRONT G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000 RESTORE_GCODE_STATE NAME=PARKFRONT [gcode_macro PARKREAR] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKREAR G90 G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000 RESTORE_GCODE_STATE NAME=PARKREAR [gcode_macro PARKCENTER] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKCENTER G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000 RESTORE_GCODE_STATE NAME=PARKCENTER [gcode_macro PARKBED] gcode = {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} SAVE_GCODE_STATE NAME=PARKBED G90 G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000 RESTORE_GCODE_STATE NAME=PARKBED [gcode_macro MECHANICAL_GANTRY_CALIBRATION] gcode = {% set my_current = params.CURRENT|default(0.20)|float %} {% set oldcurrent = printer.configfile.settings["tmc2209 stepper_z"].run_current %} {% set oldhold = printer.configfile.settings["tmc2209 stepper_z"].hold_current %} {% set x_max = printer.toolhead.axis_maximum.x %} {% set y_max = printer.toolhead.axis_maximum.y %} {% set z_max = printer.toolhead.axis_maximum.z %} {% set fast_move_z = printer.configfile.settings["printer"].max_z_velocity %} {% set fast_move = printer.configfile.settings["printer"].max_velocity %} M117 {printer.homed_axes} {% if printer.homed_axes != 'xyz' %} G28 {% endif %} G90 G0 X{x_max / 2} Y{y_max / 2} F{fast_move * 30 } G0 Z{z_max -5} F{fast_move_z * 60 } SET_TMC_CURRENT STEPPER=stepper_z CURRENT={my_current} {% if printer.configfile.settings["stepper_z1"] %} SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={my_current} {% endif %} CONDITIONAL_BEEP I=1 G4 P200 SET_KINEMATIC_POSITION Z={z_max - 25} G1 Z{z_max} F{6 * 60} CONDITIONAL_BEEP I=2 G4 P10000 G1 Z{z_max -6} F{6 * 60} CONDITIONAL_BEEP I=3 G4 P200 SET_TMC_CURRENT STEPPER=stepper_z CURRENT={oldcurrent} HOLDCURRENT={oldhold} {% if printer.configfile.settings["stepper_z1"] %} SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={oldcurrent} HOLDCURRENT={oldhold} {% endif %} G1 Z{z_max -30} F{6 * 60} G4 P200 G28 Z [gcode_macro G34] gcode = MECHANICAL_GANTRY_CALIBRATION [gcode_macro PID_TEST_BED] gcode = {% set TARGETTEMP = params.TEMP|default(70)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} G28 G90 G1 X{max_x/2} Y{max_y/2} Z40 F6000 PID_CALIBRATE HEATER=heater_bed TARGET={TARGETTEMP} [gcode_macro PID_TEST_HOTEND] gcode = {% set TARGETTEMP = params.TEMP|default(245)|int %} {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} G28 G90 G1 X{max_x/2} Y{max_y/2} Z10 F6000 M106 S64 PID_CALIBRATE HEATER=extruder TARGET={TARGETTEMP} M107 [gcode_macro PID_TEST_ALL] gcode = PID_TEST_BED PID_TEST_HOTEND SAVE_CONFIG [gcode_macro DO_PROBE_CALIBRATE] gcode = SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 G28 PROBE_CALIBRATE [gcode_macro DO_CREATE_MESH] gcode = SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 G28 _BED_MESH_CALIBRATE [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE gcode = {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set kamp_settings = printer["gcode_macro _KAMP_Settings"] %} {% set verbose_enable = kamp_settings.verbose_enable | abs %} {% set probe_dock_enable = kamp_settings.probe_dock_enable | abs %} {% set attach_macro = kamp_settings.attach_macro | string %} {% set detach_macro = kamp_settings.detach_macro | string %} {% set mesh_margin = kamp_settings.mesh_margin | float %} {% set fuzz_amount = kamp_settings.fuzz_amount | float %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} {% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} {% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} {% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} {% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} {% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} {% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} {% set adapted_x_max = [adapted_x_max , bed_mesh_max[0]] | min %} {% set adapted_y_max = [adapted_y_max , bed_mesh_max[1]] | min %} {% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} {% set points_x = [points_x , min_points]|max %} {% set points_y = [points_y , min_points]|max %} {% set points_x = [points_x , probe_count[0]]|min %} {% set points_y = [points_y , probe_count[1]]|min %} {% if verbose_enable == True %} {% if printer.exclude_object.objects != [] %} { action_respond_info( "Algorithm: {}.".format( (algorithm), )) } { action_respond_info("Default probe count: {},{}.".format( (probe_count[0]), (probe_count[1]), )) } { action_respond_info("Adapted probe count: {},{}.".format( (points_x), (points_y), )) } {action_respond_info("Default mesh bounds: {}, {}.".format( (bed_mesh_min[0],bed_mesh_min[1]), (bed_mesh_max[0],bed_mesh_max[1]), )) } {% if mesh_margin > 0 %} {action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format( (mesh_margin), (mesh_margin), )) } {% else %} {action_respond_info("Mesh margin is 0, margin not increased.")} {% endif %} {% if fuzz_amount > 0 %} {action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format( (fuzz_amount), )) } {% else %} {action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")} {% endif %} { action_respond_info("Adapted mesh bounds: {}, {}.".format( (adapted_x_min, adapted_y_min), (adapted_x_max, adapted_y_max), )) } {action_respond_info("KAMP adjustments successful. Happy KAMPing!")} {% else %} {action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")} G4 P5000 {% endif %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} bicubic_tension=0.5 {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects gcode = {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} {% set cross_section = printer.configfile.settings.extruder.max_extrude_cross_section | float %} {% if printer.firmware_retraction is defined %} {% set RETRACT = G10 | string %} {% set UNRETRACT = G11 | string %} {% else %} {% set RETRACT = 'G1 E-.5 F2100' | string %} {% set UNRETRACT = 'G1 E.5 F2100' | string %} {% endif %} {% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} {% set purge_height = printer["gcode_macro _KAMP_Settings"].purge_height | float %} {% set tip_distance = printer["gcode_macro _KAMP_Settings"].tip_distance | float %} {% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %} {% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %} {% set flow_rate = printer["gcode_macro _KAMP_Settings"].flow_rate | float %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set purge_x_min = (all_points | map(attribute=0) | min | default(0)) %} {% set purge_x_max = (all_points | map(attribute=0) | max | default(0)) %} {% set purge_y_min = (all_points | map(attribute=1) | min | default(0)) %} {% set purge_y_max = (all_points | map(attribute=1) | max | default(0)) %} {% set purge_x_center = ([((purge_x_max + purge_x_min) / 2) - (purge_amount / 2), 0] | max) %} {% set purge_y_center = ([((purge_y_max + purge_y_min) / 2) - (purge_amount / 2), 0] | max) %} {% set purge_x_origin = ([purge_x_min - purge_margin, 0] | max) %} {% set purge_y_origin = ([purge_y_min - purge_margin, 0] | max) %} {% set purge_move_speed = (flow_rate / 5.0) * 60 | float %} {% if cross_section < 5 %} {action_respond_info("[Extruder] max_extrude_cross_section is insufficient for purge, please set it to 5 or greater. Purge skipped.")} {% else %} {% if verbose_enable == True %} {action_respond_info("Moving filament tip {}mms".format( (tip_distance), )) } {% endif %} {% if printer.firmware_retraction is defined %} {action_respond_info("KAMP purge is using firmware retraction.")} {% else %} {action_respond_info("KAMP purge is not using firmware retraction, it is recommended to configure it.")} {% endif %} {% if purge_y_origin > 0 %} {action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( (purge_x_center), (purge_y_origin), (purge_amount), (flow_rate), )) } {% else %} {action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( (purge_x_origin), (purge_y_center), (purge_amount), (flow_rate), )) } {% endif %} SAVE_GCODE_STATE NAME=Prepurge_State {% if purge_y_origin > 0 %} G92 E0 G0 F{travel_speed} G90 G0 X{purge_x_center} Y{purge_y_origin} G0 Z{purge_height} M83 G1 E{tip_distance} F{purge_move_speed} G1 X{purge_x_center + purge_amount} E{purge_amount} F{purge_move_speed} {RETRACT} G0 X{purge_x_center + purge_amount + 10} F{travel_speed} G92 E0 M82 G0 Z{purge_height * 2} F{travel_speed} {% else %} G92 E0 G0 F{travel_speed} G90 G0 X{purge_x_origin} Y{purge_y_center} G0 Z{purge_height} M83 G1 E{tip_distance} F{purge_move_speed} G1 Y{purge_y_center + purge_amount} E{purge_amount} F{purge_move_speed} {RETRACT} G0 Y{purge_y_center + purge_amount + 10} F{travel_speed} G92 E0 M82 G0 Z{purge_height * 2} F{travel_speed} {% endif %} RESTORE_GCODE_STATE NAME=Prepurge_State {% endif %} [gcode_macro _KAMP_Settings] description = This macro contains all adjustable settings for KAMP variable_verbose_enable = True variable_mesh_margin = 0 variable_fuzz_amount = 0 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_purge_height = 0.8 variable_tip_distance = 0 variable_purge_margin = 30 variable_purge_amount = 15 variable_flow_rate = 12 variable_smart_park_height = 10 gcode = {action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")} [gcode_macro TEST_SPEED] gcode = {% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %} {% set iterations = params.ITERATIONS|default(5)|int %} {% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %} {% set bound = params.BOUND|default(20)|int %} {% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %} {% set x_min = printer.toolhead.axis_minimum.x + bound %} {% set x_max = printer.toolhead.axis_maximum.x - bound %} {% set y_min = printer.toolhead.axis_minimum.y + bound %} {% set y_max = printer.toolhead.axis_maximum.y - bound %} {% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %} {% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %} {% set x_center_min = x_center - (smallpatternsize/2) %} {% set x_center_max = x_center + (smallpatternsize/2) %} {% set y_center_min = y_center - (smallpatternsize/2) %} {% set y_center_max = y_center + (smallpatternsize/2) %} SAVE_GCODE_STATE NAME=TEST_SPEED { action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) } M400 G28 {% if printer.configfile.settings.quad_gantry_level %} {% if printer.quad_gantry_level.applied == False %} QUAD_GANTRY_LEVEL G28 Z {% endif %} {% endif %} G90 G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60} M400 G28 X Y G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60} SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2} {% for i in range(iterations) %} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} {% endfor %} SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel} M400 G28 G90 G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION RESTORE_GCODE_STATE NAME=TEST_SPEED [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [printer] kinematics = cartesian max_velocity = 250 max_accel = 2500 max_z_velocity = 15 max_z_accel = 45 square_corner_velocity = 8.0 [stepper_x] step_pin = PC2 dir_pin = !PB9 enable_pin = !PC3 microsteps = 32 rotation_distance = 40 endstop_pin = tmc2209_stepper_x:virtual_endstop position_endstop = 0 position_max = 300 homing_speed = 60 homing_retract_dist = 0 [tmc2209 stepper_x] uart_pin = PC1 run_current = 0.820 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 driver_sgthrs = 100 diag_pin = PA5 [stepper_y] step_pin = PB8 dir_pin = PB7 enable_pin = !PC3 microsteps = 32 rotation_distance = 40 endstop_pin = tmc2209_stepper_y:virtual_endstop position_endstop = 0 position_max = 300 homing_speed = 60 homing_retract_dist = 0 [tmc2209 stepper_y] uart_pin = PC0 run_current = 0.880 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 driver_sgthrs = 130 diag_pin = PA6 [stepper_z] step_pin = PB6 dir_pin = !PB5 enable_pin = !PC3 microsteps = 32 rotation_distance = 4 endstop_pin = probe:z_virtual_endstop position_min = -1 position_max = 340 homing_speed = 7 [tmc2209 stepper_z] uart_pin = PA15 run_current = 0.800 stealthchop_threshold = 999999 interpolate = True sense_resistor = 0.150 uart_address = 3 diag_pin = PA7 [extruder] step_pin = PB4 dir_pin = !PB3 enable_pin = !PC3 microsteps = 128 rotation_distance = 4.65 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 max_extrude_only_distance = 150.0 max_extrude_cross_section = 5 pressure_advance = 0.04 control = pid pid_kp = 25.452 pid_ki = 1.996 pid_kd = 81.128 [tmc2209 extruder] uart_pin = PC14 run_current = 0.550 stealthchop_threshold = 0 interpolate = False sense_resistor = 0.150 uart_address = 3 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 110 control = pid pid_kp = 72.380 pid_ki = 1.049 pid_kd = 1248.561 [probe] pin = PB1 x_offset = 27 y_offset = -20 samples = 3 samples_result = median samples_tolerance = 0.01 samples_tolerance_retries = 5 z_offset = 2.225 [safe_z_home] home_xy_position = 123, 170 speed = 100.0 z_hop = 3 z_hop_speed = 20 [bed_mesh] speed = 175 mesh_min = 28, 20 mesh_max = 278, 280 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 bicubic_tension = 0.5 [axis_twist_compensation] calibrate_start_x = 27 calibrate_end_x = 272 calibrate_y = 154 z_compensations = 0.059740, -0.012135, -0.047604 compensation_start_x = 27.0 compensation_end_x = 272.0 [fan] pin = PA0 [screws_tilt_adjust] screw1_name = center front left base screw1 = 84, 136 screw2_name = front left screw2 = 5, 55 screw3_name = front right screw3 = 244, 55 screw4_name = center front right screw4 = 164, 136 screw5_name = center back left screw5 = 84, 216 screw6_name = center back right screw6 = 164, 216 screw7_name = back left screw7 = 5, 295 screw8_name = back right screw8 = 244, 295 horizontal_move_z = 10 screw_thread = CCW-M4 [filament_switch_sensor filament_sensor] switch_pin = PA4 pause_on_runout = True insert_gcode = { action_respond_info("Insert Detected") } runout_gcode = { action_respond_info("Runout Detected") } CONDITIONAL_BEEP i=3 dur=300 freq=400 [t5uid1] volume = 100 [bed_mesh silicone sixth go 55c good enough] version = 1 points = -0.042969, -0.084844, -0.105625, -0.110469, -0.095938, -0.067813, -0.069531 -0.005781, -0.080938, -0.084219, -0.080938, -0.069375, -0.038281, -0.043125 -0.054531, -0.073750, -0.071406, -0.075313, -0.032656, -0.016875, -0.017969 -0.056875, -0.066094, -0.048906, -0.033906, -0.018594, 0.008125, -0.006875 -0.047969, -0.058438, -0.049063, -0.042031, -0.013438, -0.012344, -0.041094 -0.022188, -0.060625, -0.067656, -0.068906, -0.053594, -0.050156, -0.084688 -0.030781, -0.073438, -0.092969, -0.094219, -0.090313, -0.077188, -0.116719 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.2 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 10 after tweaking z steppers ] version = 1 points = 0.029062, 0.023594, -0.018906, -0.061250, -0.130469, -0.172188, -0.210469 0.068281, -0.048438, -0.069844, -0.107344, -0.118438, -0.131094, -0.171250 0.012187, -0.047656, -0.056563, -0.083125, -0.072500, -0.092969, -0.133125 0.017031, -0.027500, -0.030000, -0.041719, -0.036875, -0.046719, -0.103906 0.050469, -0.010625, -0.031875, -0.040000, -0.030781, -0.057188, -0.123281 0.135625, 0.042031, -0.014375, -0.047656, -0.061094, -0.089375, -0.153906 0.211250, 0.107500, 0.017187, -0.031406, -0.076250, -0.089063, -0.161406 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 11 after adjusting with calliper] version = 1 points = -0.109531, -0.065938, -0.063125, -0.079844, -0.143594, -0.193750, -0.239688 -0.013750, -0.083594, -0.088750, -0.108438, -0.133281, -0.143906, -0.203281 -0.014219, -0.041094, -0.049219, -0.077500, -0.084688, -0.113594, -0.161719 0.005781, -0.022031, -0.032969, -0.034688, -0.043125, -0.082813, -0.137656 0.042344, 0.004844, -0.014844, -0.042188, -0.033594, -0.078750, -0.140156 0.098750, 0.025156, -0.018594, -0.047656, -0.068594, -0.100781, -0.162344 0.115625, 0.042969, -0.015156, -0.060000, -0.084219, -0.110156, -0.169063 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 12 after adjusting right z down a bit and tape and bed screws] version = 1 points = -0.163438, -0.097813, -0.083281, -0.074219, -0.113281, -0.136875, -0.139219 -0.070000, -0.121719, -0.105156, -0.107813, -0.103750, -0.088906, -0.108594 -0.077500, -0.078750, -0.067969, -0.078281, -0.060938, -0.060938, -0.072969 -0.068281, -0.065313, -0.054688, -0.026875, -0.022031, -0.023438, -0.048906 -0.051719, -0.046094, -0.037031, -0.044844, -0.021094, -0.024688, -0.057344 -0.028125, -0.054063, -0.059219, -0.056719, -0.051094, -0.054375, -0.084219 -0.041875, -0.061406, -0.079219, -0.074063, -0.073750, -0.067188, -0.099375 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 13 leave it alone !] version = 1 points = -0.020625, -0.055000, -0.046250, -0.052031, -0.081563, -0.083750, -0.077813 -0.026094, -0.098125, -0.083125, -0.095469, -0.080156, -0.060781, -0.064844 -0.052031, -0.067188, -0.061250, -0.068750, -0.057344, -0.034219, -0.046094 -0.057969, -0.059844, -0.052813, -0.025938, -0.017500, -0.011094, -0.029844 -0.050625, -0.051406, -0.039688, -0.029531, -0.012500, -0.008750, -0.038281 -0.043594, -0.064531, -0.067656, -0.056250, -0.046719, -0.035000, -0.066563 -0.063438, -0.080781, -0.090000, -0.079531, -0.073750, -0.056250, -0.080469 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 14 tweaked right up a bit ] version = 1 points = -0.051250, -0.062813, -0.053750, -0.039844, -0.066875, -0.067344, -0.034844 -0.045469, -0.105156, -0.096094, -0.089844, -0.070938, -0.038125, -0.022813 -0.072500, -0.071875, -0.064688, -0.070938, -0.047344, -0.020156, -0.004844 -0.079219, -0.071250, -0.056563, -0.029844, -0.016094, -0.000000, 0.005312 -0.063750, -0.056250, -0.040313, -0.035781, -0.004375, 0.000469, 0.000937 -0.051719, -0.071719, -0.064063, -0.063281, -0.034219, -0.019063, -0.017031 -0.066875, -0.082344, -0.088125, -0.068906, -0.052500, -0.016406, -0.019219 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 27.0 max_x = 271.98 min_y = 27.0 max_y = 279.96 [bed_mesh 15 after axis twist calibrate] version = 1 points = -0.026095, -0.048229, -0.014113, -0.043591, -0.078694, -0.092547, -0.142306, -0.169662, -0.163894, -0.188594 0.019530, -0.028542, -0.007082, -0.029997, -0.044944, -0.073016, -0.140118, -0.147631, -0.156394, -0.170157 0.066561, -0.014011, -0.001926, -0.027341, -0.051663, -0.083797, -0.114181, -0.114975, -0.122956, -0.146719 0.038905, -0.024948, -0.035207, -0.045154, -0.076819, -0.089109, -0.098556, -0.097318, -0.098269, -0.121719 0.029530, -0.000104, -0.015676, -0.019216, -0.038381, -0.052547, -0.067774, -0.073725, -0.092956, -0.106407 0.038280, 0.010833, -0.003801, -0.009060, -0.019631, -0.030203, -0.050431, -0.064350, -0.089519, -0.104219 0.047186, 0.022239, -0.005363, -0.003747, -0.029006, -0.042547, -0.048868, -0.065131, -0.092331, -0.117032 0.056873, 0.010208, -0.014113, -0.030935, -0.051819, -0.060047, -0.074649, -0.092006, -0.112956, -0.145313 0.049998, 0.002552, -0.021145, -0.046247, -0.074319, -0.073016, -0.081368, -0.102006, -0.139050, -0.175469 0.048592, 0.003333, 0.055262, -0.004997, -0.053850, -0.016609, -0.021056, -0.094662, -0.158269, -0.191719 x_count = 10 y_count = 10 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.93 min_y = 20.0 max_y = 279.92 [bed_mesh 16 after aligning x to bed. manual probe doesnt agree with auto probe] version = 1 points = -0.115942, -0.057926, -0.080222, -0.123740, -0.120430 -0.029536, -0.073395, -0.093190, -0.077021, -0.074961 -0.062974, -0.066988, -0.060065, -0.026083, -0.044180 -0.035005, -0.065582, -0.073034, -0.056240, -0.094336 -0.002349, -0.038707, -0.065222, -0.062646, -0.145586 x_count = 5 y_count = 5 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.5 min_x = 28.0 max_x = 278.0 min_y = 20.0 max_y = 280.0 [bed_mesh 17 before tape on 2 right corners] version = 1 points = -0.119067, -0.062573, -0.055142, -0.065366, -0.087231, -0.117106, -0.125575 -0.036099, -0.051948, -0.037173, -0.020210, -0.079106, -0.080075, -0.089950 -0.045630, -0.078042, -0.056548, -0.061304, -0.041606, -0.024606, -0.053543 -0.052661, -0.041480, -0.028735, -0.015679, 0.004488, -0.010700, -0.032918 -0.037974, -0.044761, -0.022329, -0.030054, -0.000512, -0.026325, -0.061512 -0.022349, -0.048980, -0.027798, -0.036148, -0.025200, -0.074293, -0.121668 -0.038286, -0.065698, -0.026860, -0.055523, -0.045825, -0.112106, -0.180262 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 17 another tweak] version = 1 points = -0.185474, -0.125386, -0.123423, -0.128960, -0.149106, -0.163825, -0.078543 -0.087817, -0.100855, -0.088735, -0.068179, -0.132387, -0.125075, -0.126668 -0.101880, -0.120542, -0.108267, -0.094429, -0.088012, -0.077887, -0.082137 -0.098286, -0.083355, -0.067173, -0.044429, -0.035044, -0.046325, -0.063543 -0.080474, -0.085855, -0.065610, -0.063648, -0.045669, -0.059293, -0.085575 -0.042817, -0.081636, -0.068423, -0.073023, -0.071137, -0.086950, -0.101825 -0.037505, -0.085542, -0.057329, -0.087866, -0.078169, -0.069293, -0.066200 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 17 tape and screws] version = 1 points = 0.104526, 0.039770, -0.006392, -0.036773, -0.055981, -0.005856, -0.089012 0.059214, 0.008677, -0.011860, -0.018804, -0.088950, -0.069450, -0.069950 -0.001880, -0.058198, -0.067954, -0.080835, -0.060981, -0.032418, -0.039637 -0.022661, -0.048042, -0.042485, -0.030210, -0.022700, -0.016637, -0.025418 -0.022817, -0.051167, -0.042329, -0.041148, -0.030356, -0.031950, -0.054481 0.004995, -0.053667, -0.041392, -0.052710, -0.050356, -0.061637, -0.073231 -0.005786, -0.067417, -0.041704, -0.067554, -0.065200, -0.053825, -0.059481 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 18 before gantry align] version = 1 points = -0.082661, -0.092886, -0.089985, -0.089741, -0.094731, -0.024293, -0.101981 -0.080317, -0.080698, -0.073423, -0.050679, -0.105981, -0.080231, -0.080575 -0.095317, -0.115386, -0.096548, -0.097398, -0.087231, -0.041325, -0.046668 -0.087974, -0.080542, -0.061079, -0.045835, -0.032856, -0.024293, -0.032918 -0.080317, -0.081636, -0.058579, -0.052866, -0.040044, -0.036168, -0.057606 -0.063599, -0.091948, -0.071860, -0.066304, -0.054419, -0.069450, -0.079168 -0.084224, -0.111636, -0.067954, -0.083648, -0.074262, -0.064762, -0.085887 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 18 after gantry levelling block align] version = 1 points = -0.027817, -0.045542, -0.040923, -0.046304, -0.045981, 0.009613, -0.050106 -0.023130, -0.043198, -0.030142, -0.011616, -0.074419, -0.048043, -0.035106 -0.043130, -0.081792, -0.054517, -0.064741, -0.040669, -0.002575, -0.005887 -0.030161, -0.040073, -0.009985, -0.024741, 0.007613, 0.016175, 0.002863 -0.027817, -0.035542, -0.020923, -0.018648, 0.003706, 0.003832, -0.017606 -0.002661, -0.037261, -0.019360, -0.027866, -0.013794, -0.017887, -0.034012 -0.020630, -0.059292, -0.015923, -0.037085, -0.030512, -0.012106, -0.024325 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh 5pm ] version = 1 points = -0.004849, -0.034605, -0.057017, -0.068804, -0.072387, -0.016012, 0.000363 -0.019849, -0.047730, -0.040454, -0.038804, -0.096450, -0.063512, -0.057762 -0.054849, -0.098511, -0.083735, -0.083335, -0.073169, -0.035856, -0.030418 -0.047192, -0.067105, -0.041392, -0.040054, -0.023481, -0.000075, -0.020418 -0.049849, -0.063667, -0.048579, -0.045679, -0.024731, -0.024293, -0.045418 -0.023286, -0.060855, -0.046704, -0.050210, -0.043481, -0.054762, -0.068387 -0.042036, -0.079448, -0.053579, -0.068491, -0.057700, -0.055387, -0.064325 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 14_1 1] version = 1 points = -0.028911, -0.044292, -0.046079, -0.055366, -0.041762, 0.014457, 0.045832 -0.011099, -0.025542, -0.018892, -0.004116, -0.055669, -0.024137, -0.006356 -0.035786, -0.064292, -0.050767, -0.053648, -0.033950, 0.002894, 0.011300 -0.015161, -0.026948, -0.011860, -0.003179, -0.000512, 0.021488, 0.006925 0.002495, -0.014136, -0.004360, -0.014116, -0.000356, -0.009762, -0.036825 0.040464, -0.006167, -0.007798, -0.018648, -0.024419, -0.050231, -0.070262 0.035620, -0.020073, 0.002515, -0.027398, -0.031450, -0.039606, -0.066825 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 16_1 1] version = 1 points = 0.083120, 0.055708, 0.047671, 0.038696, 0.028394, 0.074925, 0.023332 0.077183, 0.058989, 0.056108, 0.072915, 0.015738, 0.046957, 0.050988 0.047339, 0.100708, 0.086733, 0.117290, 0.037144, 0.086175, 0.090363 0.059214, 0.050708, 0.064702, 0.070102, 0.078238, 0.110863, 0.097707 0.052183, 0.045395, 0.065952, 0.059946, 0.077300, 0.082738, 0.075988 0.050620, 0.016333, 0.050327, 0.049946, 0.051363, 0.049457, 0.057863 -0.002505, -0.026480, 0.032827, 0.023852, 0.041519, 0.069144, 0.070675 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 [bed_mesh 16_1 2] version = 1 points = 0.025620, -0.002261, -0.014673, -0.037866, -0.049419, -0.021793, -0.101043 0.028120, 0.002270, -0.012329, -0.004273, -0.063950, -0.056481, -0.078231 0.015620, 0.051333, 0.015015, 0.033852, -0.033481, -0.010700, -0.031043 0.003120, -0.002573, -0.001860, -0.019116, 0.004331, -0.002731, -0.022606 0.021870, 0.001489, 0.003765, -0.022710, -0.012544, -0.023200, -0.047293 0.043433, -0.005073, 0.000796, -0.022241, -0.026606, -0.041950, -0.048075 0.029839, -0.022573, 0.001265, -0.025366, -0.034575, -0.009293, -0.012293 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 20.0 max_y = 279.98 [bed_mesh default] version = 1 points = -0.088755, -0.101323, -0.072017, -0.046460, -0.096762, -0.086325, -0.095262 -0.056880, -0.070698, -0.062017, -0.053960, -0.070512, -0.061950, -0.050887 -0.073130, -0.005073, 0.017358, 0.031665, -0.040512, -0.024450, -0.028387 -0.066880, -0.056323, -0.036392, -0.025210, -0.008012, -0.005075, -0.014012 -0.069380, -0.065698, -0.040767, -0.035835, -0.018637, -0.028825, -0.035262 -0.076880, -0.081948, -0.070142, -0.061460, -0.062387, -0.060075, -0.070262 -0.103755, -0.113823, -0.019517, -0.036460, -0.013637, -0.036950, -0.039637 x_count = 7 y_count = 7 mesh_x_pps = 2 mesh_y_pps = 2 algo = bicubic tension = 0.5 min_x = 28.0 max_x = 277.96000000000004 min_y = 41.6 max_y = 258.38 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1965781752: New connection webhooks client 1965781752: Client info {'program': 'Moonraker', 'version': 'v0.8.0-268-ga23187b'} mcu 'mcu': Timeout on connect mcu 'mcu': Wait for identify_response Traceback (most recent call last): File "/home/pi/klipper/klippy/serialhdl.py", line 68, in _get_identify_data params = self.send_with_response(msg, 'identify_response') File "/home/pi/klipper/klippy/serialhdl.py", line 261, in send_with_response return src.get_response([cmd], self.default_cmd_queue) File "/home/pi/klipper/klippy/serialhdl.py", line 318, in get_response self.serial.raw_send_wait_ack(cmds[-1], minclock, reqclock, File "/home/pi/klipper/klippy/serialhdl.py", line 253, in raw_send_wait_ack self._error("Serial connection closed") File "/home/pi/klipper/klippy/serialhdl.py", line 61, in _error raise error(self.warn_prefix + (msg % params)) serialhdl.error: mcu 'mcu': Serial connection closed