Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [gcode_macro BED_MESH_CALIBRATE]
- # print surface bed mesh calibrate
- # Works with Klicky Probe on Voron
- # November 24, 2021
- # Steve Turgeon
- rename_existing: _BED_MESH_CALIBRATE
- variable_buffer: 20
- ; Do not change any of the existing values below.
- variable_last_area_start_x: -1 ; Do not change
- variable_last_area_start_y: -1 ; Do not change
- variable_last_area_end_x: -1 ; Do not change
- variable_last_area_end_y: -1 ; Do not change
- gcode:
- {% if params.FORCE_NEW_MESH != null %}
- { action_respond_info("Force New Mesh: %s" % (params.FORCE_NEW_MESH)) }
- {% endif %}
- {% if printer["bed_mesh"].profile_name == '' %}
- { action_respond_info("No existing bed mesh found.") }
- {% set last_area_end_x=-1 %}
- {% endif %}
- {% if printer.toolhead.homed_axes != "xyz" %}
- G28
- {% endif %}
- {% set klicky_available = printer['gcode_macro _Probe_Variables'] != null %}
- {% set euclid_available = printer['gcode_macro EuclidProbe'] != null %}; Requires v5 macros https://github.com/nionio6915/Euclid_Probe/blob/main/Firmware_Examples/Klipper/00-euclid_exampleV5.cfg
- {% if params.PRINT_MIN %}
- { action_respond_info("print_min: %s" % params.PRINT_MIN) }
- { action_respond_info("print_max: %s" % params.PRINT_MAX) }
- {% set blTouchConfig = printer['configfile'].config["bltouch"] %}
- {% if blTouchConfig %}
- {% set OffsetX = blTouchConfig.x_offset|default(0)|float %}
- {% set OffsetY = blTouchConfig.y_offset|default(0)|float %}
- {% endif %}
- {% set probeConfig = printer['configfile'].config["probe"] %}
- {% if probeConfig %}
- {% set OffsetX = probeConfig.x_offset|default(0)|float %}
- {% set OffsetY = probeConfig.y_offset|default(0)|float %}
- {% endif %}
- {% set print_min_x = params.PRINT_MIN.split(",")[0]|float %}
- {% set print_min_y = params.PRINT_MIN.split(",")[1]|float %}
- {% set print_max_x = params.PRINT_MAX.split(",")[0]|float %}
- {% set print_max_y = params.PRINT_MAX.split(",")[1]|float %}
- {% if last_area_start_x > 0 %}
- { action_respond_info("last_bed_mesh: %s,%s %s,%s" % (last_area_start_x, last_area_start_y, last_area_end_x, last_area_end_y)) }
- {% endif %}
- {% if (params.FORCE_NEW_MESH != null) or (print_min_x < last_area_start_x) or (print_max_x > last_area_end_x) or (print_min_y < last_area_start_y) or (print_max_y > last_area_end_y) %}
- {% if klicky_available %}
- _CheckProbe action=query
- Attach_Probe
- {% elif euclid_available %}
- DEPLOY_PROBE
- {% endif %}
- {% if (print_min_x < print_max_x) and (print_min_y < print_max_y) %}
- # Get bed_mesh config (probe count, mesh_min and mesh_max for x and y
- {% set bedMeshConfig = printer['configfile'].config["bed_mesh"] %}
- {% set minimum_probe_count = 3 %}
- {% if bedMeshConfig.algorithm == "bicubic" %}
- {% set minimum_probe_count = 5 %}
- {% endif %}
- {% set probe_count = bedMeshConfig.probe_count.split(",") %}
- {% set probe_count_x = probe_count[0]|int %}
- {% if probe_count.__len__() > 1 %}
- {% set probe_count_y = probe_count[1]|int %}
- {% else %}
- {% set probe_count_y = probe_count_x|int %}
- {% endif %}
- {% set relative_reference_index = bedMeshConfig.relative_reference_index %}
- {% set mesh_min_x = bedMeshConfig.mesh_min.split(",")[0]|float %}
- {% set mesh_min_y = bedMeshConfig.mesh_min.split(",")[1]|float %}
- {% set mesh_max_x = bedMeshConfig.mesh_max.split(",")[0]|float %}
- {% set mesh_max_y = bedMeshConfig.mesh_max.split(",")[1]|float %}
- # If print area X is smaller than 50% of the bed size, change to to 3 probe counts for X instead of the default
- {% if print_max_x - print_min_x < (mesh_max_x - mesh_min_x) * 0.50 %}
- {% set probe_count_x = minimum_probe_count %}
- {% endif %}
- # If print area Y is smaller than 50% of the bed size, change to to 3 probe counts for Y instead of the default
- {% if print_max_y - print_min_y < (mesh_max_y - mesh_min_y) * 0.50 %}
- {% set probe_count_y = minimum_probe_count %}
- {% endif %}
- {% if print_min_x - buffer >= mesh_min_x %}
- {% set mesh_min_x = print_min_x - buffer %}
- {% endif %}
- {% if print_min_y - buffer >= mesh_min_y %}
- {% set mesh_min_y = print_min_y - buffer %}
- {% endif %}
- {% if print_max_x + buffer <= mesh_max_x %}
- {% set mesh_max_x = print_max_x + buffer %}
- {% endif %}
- {% if print_max_y + buffer <= mesh_max_y %}
- {% set mesh_max_y = print_max_y + buffer %}
- {% endif %}
- { action_respond_info("mesh_min: %s,%s" % (mesh_min_x, mesh_min_y)) }
- { action_respond_info("mesh_max: %s,%s" % (mesh_max_x, mesh_max_y)) }
- { action_respond_info("probe_count: %s,%s" % (probe_count_x,probe_count_y)) }
- ; Set variables so they're available outside of macro
- SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_start_x VALUE={print_min_x}
- SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_start_y VALUE={print_min_y}
- SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_end_x VALUE={print_max_x}
- SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_end_y VALUE={print_max_y}
- {% if printer["gcode_macro status_meshing"] != null %}
- status_meshing
- {% endif %}
- {% if relative_reference_index == 0 or relative_reference_index == null %}
- _BED_MESH_CALIBRATE mesh_min={mesh_min_x},{mesh_min_y} mesh_max={mesh_max_x},{mesh_max_y} probe_count={probe_count_x},{probe_count_y}
- {% else %}
- {% set relative_reference_index = ((probe_count_x * probe_count_y - 1) / 2)|int %}
- { action_respond_info("relative_reference_index: %s" % relative_reference_index) }
- _BED_MESH_CALIBRATE mesh_min={mesh_min_x},{mesh_min_y} mesh_max={mesh_max_x},{mesh_max_y} probe_count={probe_count_x},{probe_count_y} relative_reference_index={relative_reference_index}
- {% endif %}
- {% else %}
- {% if printer["gcode_macro status_meshing"] != null %}
- status_meshing
- {% endif %}
- _BED_MESH_CALIBRATE
- {% endif %}
- {% if klicky_available %}
- Dock_Probe
- {% elif euclid_available %}
- STOW_PROBE
- {% endif %}
- {% else %}
- { action_respond_info("No need to recreate Bed Mesh since it's same as current mesh or smaller") }
- {% endif %}
- {% else %}
- {% if klicky_available %}
- _CheckProbe action=query
- Attach_Probe
- {% elif euclid_available %}
- STOW_PROBE
- {% endif %}
- {% if printer["gcode_macro status_meshing"] != null %}
- status_meshing
- {% endif %}
- _BED_MESH_CALIBRATE
- {% if klicky_available %}
- Dock_Probe
- {% endif %}
- {% if euclid_available %}
- STOW_PROBE
- {% endif %}
- {% endif %}
- {% if printer["gcode_macro status_ready"] != null %}
- status_ready
- {% endif %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement