[bed_mesh] mesh_min = 15, 25 mesh_max = 330, 330 speed = 300 horizontal_move_z = 2 probe_count = 30,30 algorithm = bicubic split_delta_z = 0.0125 scan_overshoot: 5 zero_reference_position: 176.00,179.50 fade_start: 1.0 fade_end: 10.0 fade_target: 0.0 ##[(7x7)-1] / 2 = 24 ##[(5x5)-1] / 2 = 12 ##[(9x9)-1] / 2 = 40 #relative_reference_index: 40 #relative_reference_index: 15 [gcode_macro QUAD_GANTRY_LEVEL] rename_existing: _QUAD_GANTRY_LEVEL gcode: STATUS_LEVELING SAVE_GCODE_STATE NAME=STATE_QGL BED_MESH_CLEAR # If QGL has not been done yet, correct for any major skew first # at 8mm height {% if not printer.quad_gantry_level.applied %} _QUAD_GANTRY_LEVEL horizontal_move_z=8 retry_tolerance=1 {% endif %} # Compelte with a full QGL at the configured height _QUAD_GANTRY_LEVEL RESTORE_GCODE_STATE NAME=STATE_QGL [gcode_macro BED_MESH_CALIBRATE] rename_existing: _BED_MESH_CALIBRATE gcode: {% set TARGET_TEMP = printer.heater_bed.target %} M140 S0 _BED_MESH_CALIBRATE {rawparams} M140 S{TARGET_TEMP} [gcode_macro CARTOGRAPHER_TOUCH] rename_existing: _CARTOGRAPHER_TOUCH gcode: {% set TARGET_TEMP = printer.heater_bed.target %} M140 S0 _CARTOGRAPHER_TOUCH {rawparams} M140 S{TARGET_TEMP} ##################################################################### # Macros ##################################################################### ## customize BED MESH CALIBRATE gcode ## use BED_MESH_STORE -> generate MESH and save immediately and park in the middle ## use BED_MESH_STORE PARK=false -> generate MESH and save immediately ## use BED_MESH_STORE SAVE=false -> generate MESH and save it later ## use BED_MESH_STORE SAVE=false PARK=false -> would be most likely be used in your macros [gcode_macro BED_MESH_STORE] description: Generate a mesh, name it and run save_config if requested variable_save_at_end: 'false' gcode: ##### set default parameter value ##### {% set save = params.SAVE|default('true') %} {% set park = params.PARK|default('true') %} ############# Get user defines ############# {% set center = printer["gcode_macro _USER_VARIABLE"].center %} {% set z_hop = printer["gcode_macro _USER_VARIABLE"].z_hop %} {% set bed_temp = printer.heater_bed.target|int %} ##### define plate name: Voron (default) or flexplate name ##### {% set plate_name = 'Voron' %} {% if 'save_variables' in printer.configfile.config %} {% if printer.save_variables.variables.plate_array is defined %} {% set plate_index = printer.save_variables.variables.plate_index|int %} {% set plate_name = printer.save_variables.variables.plate_array[plate_index][0] %} {% endif %} {% endif %} ##### join everything to a single mesh name ##### {% set mesh_name = "Voron-Bed_Temp-" + bed_temp|string + "C" %} ##### end of definitions ##### BED_MESH_CALIBRATE BED_MESH_PROFILE SAVE={mesh_name} BED_MESH_PROFILE REMOVE=default {% if park|lower == 'true' %} G90 ; set absolute G0 Z{z_hop} F1800 ; move nozzle to z high first G0 X{center[0]} Y{center[1]} F18000 ; home to get toolhead in the middle {% endif %} {% if save|lower == 'true' %} _PRINT_AR T="BED_MESH: Save Config!" SAVE_CONFIG {% else %} _PRINT_AR T="BED_MESH: Save Config after print done" SET_GCODE_VARIABLE MACRO=BED_MESH_STORE VARIABLE=save_at_end VALUE='"true"' {% endif %} ## use BED_MESH_LOAD -> load an existing MESH ## use BED_MESH_LOAD AUTO=true -> load an existing MESH or generate a new one and prepare it to be saved after print end [gcode_macro BED_MESH_LOAD] description: Load an existing mesh or generate a new one gcode: ##### set default parameter value ##### {% set auto = params.AUTO|default('false') %} {% set bed_temp = printer.heater_bed.target|int %} ##### join everything to a single mesh name ##### {% set mesh_name = "Voron-Bed_Temp-" + bed_temp|string + "C" %} ##### end of definitions ##### {% if printer.configfile.config["bed_mesh " + mesh_name] is defined %} BED_MESH_CLEAR BED_MESH_PROFILE LOAD={mesh_name} _PRINT_AR T="{"BED_MESH: " + mesh_name + " loaded"}" {% else %} {% if auto|lower == 'true' %} _PRINT_AR T="{"BED_MESH: " + mesh_name + " needs to be generated"}" BED_MESH_STORE SAVE=false PARK=false {% else %} _PRINT_AR T="{"BED_MESH ERROR: " + mesh_name + " not defined"}" {% endif %} {% endif %} ## add this to your PRINT_END to save a mesh if needed 10 seconds after print ended ## UPDATE_DELAYED_GCODE ID=_BED_MESH_SAVE DURATION=10 [delayed_gcode _BED_MESH_SAVE] gcode: {% if printer["gcode_macro BED_MESH_STORE"].save_at_end == 'true' %} _PRINT_AR T="BED_MESH: Save Config!" SAVE_CONFIG {% endif %}