# AON3D M2+ Macros # For BTT Octopus Pro with IDEX configuration # ================================================================================ # Cancel Print # ================================================================================ [gcode_macro CANCEL_PRINT] description: Cancel the actual running print rename_existing: CANCEL_PRINT_BASE gcode: PARK_{printer.toolhead.extruder} CANCEL_PRINT_BASE # ================================================================================ # Pause / Resume # ================================================================================ [gcode_macro PAUSE] rename_existing: BASE_PAUSE gcode: {% set Z = params.Z|default(10)|float %} {% set E = params.E|default(1)|float %} SAVE_GCODE_STATE NAME=PAUSE_state BASE_PAUSE G91 G1 E-{E} F2100 G1 Z{Z} PARK_{printer.toolhead.extruder} [gcode_macro RESUME] rename_existing: BASE_RESUME gcode: {% set E = params.E|default(1)|float %} G91 G1 E{E} F2100 G90 RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 BASE_RESUME # ================================================================================ # End Print # ================================================================================ [gcode_macro END_PRINT] gcode: {% set Z = params.Z|default(10)|float %} {% set E = params.E|default(5)|float %} # Turn off heaters and fan M106 S0 SET_HEATER_TEMPERATURE HEATER=extruder TARGET=0 SET_HEATER_TEMPERATURE HEATER=extruder1 TARGET=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0 SET_HEATER_TEMPERATURE HEATER=chamber TARGET=0 G91 G1 E-{E} F2100 G1 Z{Z} PARK_{printer.toolhead.extruder} # Disable steppers M84 # ================================================================================ # Homing Override # ================================================================================ [homing_override] set_position_z: 10 gcode: SAVE_GCODE_STATE NAME=home_z_state G91 G1 Z10 F480 G28 X0 Y0 G28 Z0 G90 G1 Z3 F600 RESTORE_GCODE_STATE NAME=home_z_state axes: z # ================================================================================ # Idle Timeout # ================================================================================ [idle_timeout] timeout: 86400 # 24 hours # ================================================================================ # IDEX Toolhead Macros # ================================================================================ # Primary toolhead (T0) park position [gcode_macro PARK_extruder] gcode: SAVE_GCODE_STATE NAME=park0 G90 G1 X-85 F12000 RESTORE_GCODE_STATE NAME=park0 # Activate primary extruder [gcode_macro T0] gcode: PARK_{printer.toolhead.extruder} ACTIVATE_EXTRUDER EXTRUDER=extruder SET_DUAL_CARRIAGE CARRIAGE=0 SET_GCODE_OFFSET Z=0 # Input shaper for carriage 0 (calibrate these values for your machine) SET_INPUT_SHAPER SHAPER_FREQ_X=60 SHAPER_TYPE_X=ei SHAPER_FREQ_Y=40 SHAPER_TYPE_Y=ei # Secondary toolhead (T1) park position [gcode_macro PARK_extruder1] gcode: SAVE_GCODE_STATE NAME=park1 G90 G1 X518 F12000 RESTORE_GCODE_STATE NAME=park1 # Activate secondary extruder [gcode_macro T1] gcode: PARK_{printer.toolhead.extruder} ACTIVATE_EXTRUDER EXTRUDER=extruder1 SET_DUAL_CARRIAGE CARRIAGE=1 SET_GCODE_OFFSET Z=-0.45 # Input shaper for carriage 1 (calibrate these values separately) SET_INPUT_SHAPER SHAPER_FREQ_X=60 SHAPER_TYPE_X=ei SHAPER_FREQ_Y=40 SHAPER_TYPE_Y=ei # ================================================================================ # Calibration Macro # ================================================================================ [gcode_macro CALIBRATE_M2] description: Calibrate the current tool with a mesh centered at Z=0 gcode: G28 G1 Z15 F600 G1 X200 Y200 F6000 Z_ENDSTOP_CALIBRATE PROBE TESTZ Z=-.001 G4 P500 M400 ACCEPT SET_KINEMATIC_POSITION Z=0 BED_MESH_CALIBRATE [gcode_macro Calibrate_Tool_Offset] gcode: z_endstop_calibrate # ================================================================================ # Temperature Command Overrides (for chamber heater compatibility) # ================================================================================ [gcode_macro M140] rename_existing: M140.1 gcode: {% if params.S is defined %} SAVE_VARIABLE VARIABLE=bedtemp VALUE={params.S} {% endif %} M140.1 { rawparams } [gcode_macro M190] rename_existing: M190.1 gcode: {% if params.S is defined %} SAVE_VARIABLE VARIABLE=bedtemp VALUE={params.S} {% endif %} M190.1 { rawparams } [gcode_macro M104] rename_existing: M104.1 gcode: {% if params.T is defined and params.T == "3"%} SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.S if params.S is defined else "0"} {% else %} {% if params.S is defined %} {% set varname = "t1temp" if params.T is defined and params.T == "1" else "t0temp" %} SAVE_VARIABLE VARIABLE={varname} VALUE={params.S} {% endif %} M104.1 { rawparams } {% endif %} [gcode_macro M109] rename_existing: M109.1 gcode: {% if params.T is defined and params.T == "3"%} SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.S if params.S is defined else "0"} TEMPERATURE_WAIT SENSOR=chamber MINIMUM={params.S} MAXIMUM={params.S} {% else %} {% if params.S is defined %} {% set varname = "t1temp" if params.T is defined and params.T == "1" else "t0temp" %} SAVE_VARIABLE VARIABLE={varname} VALUE={params.S} {% endif %} M109.1 { rawparams } {% endif %} # ================================================================================ # G-code Offset Management # ================================================================================ [gcode_macro SET_GCODE_OFFSET] rename_existing: _SET_GCODE_OFFSET gcode: {% if printer.save_variables.variables.gcode_offsets %} {% set offsets = printer.save_variables.variables.gcode_offsets %} {% else %} {% set offsets = {'x': None,'y': None,'z': None} %} {% endif %} {% set ns = namespace(offsets={'x': offsets.x,'y': offsets.y,'z': offsets.z}) %} _SET_GCODE_OFFSET {% for p in params %}{'%s=%s '% (p, params[p])}{% endfor %} {%if 'X' in params %}{% set null = ns.offsets.update({'x': params.X}) %}{% endif %} {%if 'Y' in params %}{% set null = ns.offsets.update({'y': params.Y}) %}{% endif %} {%if 'Z' in params %}{% set null = ns.offsets.update({'z': params.Z}) %}{% endif %} SAVE_VARIABLE VARIABLE=gcode_offsets VALUE="{ns.offsets}" [delayed_gcode LOAD_GCODE_OFFSETS] initial_duration: 2 gcode: {% if printer.save_variables.variables.gcode_offsets %} {% set offsets = printer.save_variables.variables.gcode_offsets %} _SET_GCODE_OFFSET {% for axis, offset in offsets.items() if offsets[axis] %}{ "%s=%s " % (axis, offset) }{% endfor %} { action_respond_info("Loaded gcode offsets from saved variables [%s]" % (offsets)) } {% endif %} # Initialize input shaper on startup (for dual_carriage compatibility) [delayed_gcode INIT_INPUT_SHAPER] initial_duration: 3 gcode: # Set default input shaper for carriage 0 (T0) SET_INPUT_SHAPER SHAPER_FREQ_X=60 SHAPER_TYPE_X=ei SHAPER_FREQ_Y=40 SHAPER_TYPE_Y=ei { action_respond_info("Input shaper initialized for dual carriage") } # ================================================================================ # Utility Macros # ================================================================================ [gcode_macro LOAD_FILAMENT] description: Load filament into current extruder gcode: {% set TEMP = params.TEMP|default(220)|float %} {% set LENGTH = params.LENGTH|default(100)|float %} M109 S{TEMP} G91 G1 E{LENGTH} F300 G90 [gcode_macro UNLOAD_FILAMENT] description: Unload filament from current extruder gcode: {% set TEMP = params.TEMP|default(220)|float %} {% set LENGTH = params.LENGTH|default(100)|float %} M109 S{TEMP} G91 G1 E10 F300 G1 E-{LENGTH} F1000 G90 [gcode_macro PID_EXTRUDER] description: PID tune the current extruder gcode: {% set TEMP = params.TEMP|default(240)|float %} PID_CALIBRATE HEATER=extruder TARGET={TEMP} [gcode_macro PID_EXTRUDER1] description: PID tune extruder 1 gcode: {% set TEMP = params.TEMP|default(240)|float %} PID_CALIBRATE HEATER=extruder1 TARGET={TEMP} [gcode_macro PID_BED] description: PID tune the heated bed gcode: {% set TEMP = params.TEMP|default(100)|float %} PID_CALIBRATE HEATER=heater_bed TARGET={TEMP} [gcode_macro PID_CHAMBER] description: PID tune the heated chamber gcode: {% set TEMP = params.TEMP|default(70)|float %} PID_CALIBRATE HEATER=chamber TARGET={TEMP}