# __ __ # | \/ | # | \ / | __ _ ___ _ __ ___ ___ # | |\/| |/ _` |/ __| '__/ _ \/ __| # | | | | (_| | (__| | | (_) \__ \ # |_| |_|\__,_|\___|_| \___/|___/ # # Macros Configurations - Flsun V400 # Version 3.0 # # Guislain Cyril ################################################## # Start and End G-Codes ################################################## [gcode_macro START_PRINT] description: Start G-Code gcode: {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(210)|float %} LED_HOTEND_ON G21 G90 M82 {% if printer.extruder.target != 0 %} M104 S{EXTRUDER_TEMP} {% else %} M104 S150 {% endif %} M140 S{BED_TEMP} {% if printer.toolhead.homed_axes != "xyz" %} G28 {% endif %} G1 Z370 F3000 G1 X-150 F3000 M190 S{BED_TEMP} M109 S{EXTRUDER_TEMP} G1 Z1 F3000 G1 X-150 Y0 Z0.4 G92 E0 G3 X0 Y-130 I150 J1 Z0.3 E30 F2000 G92 E0 G1 E-1 F2100 [gcode_macro END_PRINT] description: End G-Code gcode: M106 S0 M104 S0 M140 S0 G92 E0 G91 G1 E-1 F2100 G1 Z+5 F6000 G28 G90 LED_HOTEND_OFF M84 ################################################## # Pause / Resume / Cancel Print ################################################## [gcode_macro PAUSE] description: Pause the current print rename_existing: PAUSE_BASE gcode: ##### set defaults ##### {% set x = params.X|default(0) %} {% set y = params.Y|default(-90) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} ##### calculate save lift position ##### {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} ##### end of definitions ##### RESPOND MSG="Pausing printing..." PAUSE_BASE G91 G1 E-{e} F2100 G1 Z{z_safe} G90 G1 X{x} Y{y} F2500 [gcode_macro RESUME] description: Resume the current print rename_existing: RESUME_BASE gcode: ##### set defaults ##### {% set e = params.E|default(1) %} #### get VELOCITY parameter if specified #### {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {% else %} {% set get_params = "" %} {% endif %} ##### end of definitions ##### G91 {% if printer["gcode_macro M600"].m600_enabled == 1 %} RESPOND MSG="Nozzle heating..." M109 S{printer["gcode_macro M600"].hotend_temp} M106 S{printer["gcode_macro M600"].fan_speed} RESPOND MSG="Loading filament..." G0 E50 F800 G0 E30 F300 M400 SET_GCODE_VARIABLE MACRO=M600 VARIABLE=m600_enabled VALUE=0 {% else %} G1 E{e} F2100 {% endif %} RESPOND MSG="Resuming printing..." SET_IDLE_TIMEOUT TIMEOUT=1800 RESUME_BASE {get_params} [gcode_macro CANCEL_PRINT] description: Cancel the current print rename_existing: CANCEL_PRINT_BASE gcode: RESPOND MSG="Printing canceled!" G28 M106 S0 M104 S0 M140 S0 CANCEL_PRINT_BASE ################################################## # Filament / Color Change ################################################## [gcode_macro M600] description: Filament change variable_hotend_temp: 0 variable_m600_enabled: 0 variable_fan_speed: 0 gcode: ##### set defaults ##### {% set x = params.X|default(0) %} {% set y = params.Y|default(-90) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} ##### calculate save lift position ##### {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} ##### end of definitions ##### SAVE_GCODE_STATE NAME=M600_state SET_IDLE_TIMEOUT TIMEOUT=86400 SET_GCODE_VARIABLE MACRO=M600 VARIABLE=m600_enabled VALUE=1 SET_GCODE_VARIABLE MACRO=M600 VARIABLE=hotend_temp VALUE={printer.extruder.target} SET_GCODE_VARIABLE MACRO=M600 VARIABLE=fan_speed VALUE={printer.fan.speed} RESPOND MSG="Pausing printing..." PAUSE G91 G1 E-{e} F2100 G1 Z{z_safe} G90 G1 X{x} Y{y} F2500 RESPOND MSG="Unloading filament..." G91 G0 E-10 F300 G0 E-30 F800 M400 RESPOND MSG="Nozzle heating stopped!" M104 S0 M106 S0 RESTORE_GCODE_STATE NAME=M600_state ################################################## # Load / Unload Filament ################################################## [gcode_macro UNLOAD_FILAMENT] description: Filament unloading gcode: {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} SAVE_GCODE_STATE NAME=unload_state {% if printer.extruder.temperature < 200 %} RESPOND MSG="Nozzle heating..." M109 S200 {% endif %} RESPOND MSG="Unloading filament..." G91 G0 E-10 F300 G0 E-30 F800 RESTORE_GCODE_STATE NAME=unload_state {% endif %} [gcode_macro LOAD_FILAMENT] description: Filament loading gcode: {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} SAVE_GCODE_STATE NAME=load_state {% if printer.extruder.temperature < 200 %} RESPOND MSG="Nozzle heating..." M109 S200 {% endif %} RESPOND MSG="Loading filament..." G91 G0 E50 F800 G0 E30 F300 M400 RESTORE_GCODE_STATE NAME=load_state {% endif %} ################################################## # Calibrations ################################################## [gcode_macro Z_OFFSET_CALIBRATION] description: Measure Z-Offset gcode: SET_GCODE_OFFSET Z=0 G28 G1 X0 Y0 Z50 F2500 M400 #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True # Enable if Knomi is used PROBE_CALIBRATE #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False # Enable if Knomi is used [gcode_macro ENDSTOPS_CALIBRATION] description: Endstops Phase Calibration gcode: {% if printer.idle_timeout.state == "Printing" %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} {% if printer.toolhead.homed_axes != "xyz" %} G28 {% endif %} G91 G0 Z-80 F1500 G28 G91 G0 Z-80 F1500 G28 G91 G0 Z-80 F1500 G28 G91 G0 Z-80 F1500 G28 G91 G0 Z-80 F1500 ENDSTOP_PHASE_CALIBRATE stepper=stepper_a ENDSTOP_PHASE_CALIBRATE stepper=stepper_b ENDSTOP_PHASE_CALIBRATE stepper=stepper_c M400 G28 {% endif %} [gcode_macro DELTA_CALIBRATION] description: Delta Calibration gcode: {% if printer.idle_timeout.state == "Printing" %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} SET_GCODE_OFFSET Z=0 BED_MESH_CLEAR {% if printer.toolhead.homed_axes != "xyz" %} G28 {% endif %} #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True # Enable if Knomi is used DELTA_CALIBRATE #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False # Enable if Knomi is used M400 G1 X0 Y0 Z50 F2500 G28 {% endif %} [gcode_macro BED_LEVELING] description: Bed Leveling gcode: {% if printer.idle_timeout.state == "Printing" %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} SET_GCODE_OFFSET Z=0 {% if printer.toolhead.homed_axes != "xyz" %} G28 {% endif %} G1 X0 Y0 Z50 F2500 #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True # Enable if Knomi is used BED_MESH_CALIBRATE #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False # Enable if Knomi is used M400 G1 X0 Y0 Z50 F2500 G28 {% endif %} [gcode_macro PRESSURE_ADVANCE] description: Pressure Advance gcode: {% if printer.idle_timeout.state == "Printing" %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} SET_PRESSURE_ADVANCE ADVANCE=0 SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500 TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005 {% endif %} ################################################## # Nozzle / Bed PID Calibration ################################################## [gcode_macro PID_BED] description: Bed PID gcode: {% if printer.idle_timeout.state == "Printing" %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} RESPOND MSG="Bed PID calibration in progress..." G28 G90 G1 Z50 F1500 M400 M106 PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(70)} M107 RESPOND MSG="PID calibration complete! Remember to save the configuration!" G28 {% endif %} [gcode_macro PID_HOTEND] description: Hotend PID gcode: {% if printer.idle_timeout.state == "Printing" %} RESPOND TYPE=error MSG="This macro cannot be used while printing!" {% else %} RESPOND MSG="Hotend PID calibration in progress..." G28 G90 G1 Z50 F1500 M400 M106 PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(250)} M107 RESPOND MSG="PID calibration complete! Remember to save the configuration!" G28 {% endif %} [gcode_macro _PID_KS_START] description: PID for KlipperScreen gcode: RESPOND MSG="PID calibration in progress..." G28 G90 G1 Z50 F1500 M400 M106 [gcode_macro _PID_KS_END] description: PID for KlipperScreen gcode: M107 RESPOND MSG="PID calibration complete! Remember to save the configuration!" G28 ################################################## # Verifications and Measurements with ADXL ################################################## [gcode_macro ADXL_TEST] description: ADXL Test gcode: ACCELEROMETER_QUERY [gcode_macro ADXL_NOISE] description: Measure Accelerometer Noise gcode: MEASURE_AXES_NOISE [gcode_macro ADXL_AXE_X] description: Measure X axis resonances gcode: SHAPER_CALIBRATE AXIS=X [gcode_macro ADXL_AXE_Y] description: Measure Y axis resonances gcode: SHAPER_CALIBRATE AXIS=Y ################################################## # Save Configuration ################################################## [gcode_macro SAVE] description: Save Configuration gcode: SAVE_CONFIG ################################################## # Power On/Off LED ################################################## [gcode_macro LED_HOTEND_ON] description: Turn on Hotend LEDs gcode: SET_PIN PIN=LED_Hotend VALUE=1 [gcode_macro LED_HOTEND_OFF] description: Turn off Hotend LEDs gcode: SET_PIN PIN=LED_Hotend VALUE=0 [gcode_macro LED_LOGO_ON] description: Turn on Logo LEDs gcode: SET_PIN PIN=LED_Logo VALUE=1 [gcode_macro LED_LOGO_OFF] description: Turn off Logo LEDs gcode: SET_PIN PIN=LED_Logo VALUE=0 ################################################## # Managing Slicer Controls ################################################## [gcode_macro M204] description: Sets maximum accelleration rename_existing: M204.1 gcode: {% if 'S' in params %} {% set s = params.S|float %} SET_VELOCITY_LIMIT ACCEL={s} {% else %} {% if 'P' in params %} {% set p = params.P|float %} {% if 'T' in params %} {% set t = params.T|float %} {% if p < t %} SET_VELOCITY_LIMIT ACCEL={p} {% else %} SET_VELOCITY_LIMIT ACCEL={t} {% endif %} {% else %} SET_VELOCITY_LIMIT ACCEL={p} {% endif %} {% elif 'T' in params %} {% set t = params.T|float %} SET_VELOCITY_LIMIT ACCEL={t} {% endif %} {% endif %} [gcode_macro M205] description: Sets square corner velocity gcode: {% if 'X' in params %} SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={params.X} {% elif 'Y' in params %} SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={params.Y} {% endif %} ################################################## # Managing Temperatures Controls ################################################## [gcode_macro M109] description: Managing extruder temperature 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] description: Managing bed temperature 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 %} ################################################## # Loading default bed mesh at startup ################################################## [delayed_gcode bed_mesh_init] initial_duration: .01 gcode: BED_MESH_PROFILE LOAD=default ################################################## # KNOMI ################################################## # Enable this section if Knomi is used #[homing_override] #gcode: #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=True #G28 #SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=False #[gcode_macro _KNOMI_STATUS] #variable_homing: False #variable_probing: False #gcode: ################################################## # Z-Offset Management ################################################## [gcode_macro SECURITY_OFFSET] description: Apply a 2mm Safety Offset gcode: SET_GCODE_OFFSET Z=+2 RESPOND MSG="Safety Offset applied!" [gcode_macro SET_GCODE_OFFSET] description: Saving Z-Offset rename_existing: _SET_GCODE_OFFSET gcode: {% if printer.save_variables.variables.zoffset %} {% set zoffset = printer.save_variables.variables.zoffset %} {% else %} {% set zoffset = {'z': None} %} {% endif %} {% set ns = namespace(zoffset={'z': zoffset.z}) %} _SET_GCODE_OFFSET {% for p in params %}{'%s=%s '% (p, params[p])}{% endfor %} {%if 'Z' in params %}{% set null = ns.zoffset.update({'z': params.Z}) %}{% endif %} {%if 'Z_ADJUST' in params %} {%if ns.zoffset.z == None %}{% set null = ns.zoffset.update({'z': 0}) %}{% endif %} {% set null = ns.zoffset.update({'z': (ns.zoffset.z | float) + (params.Z_ADJUST | float)}) %} {% endif %} SAVE_VARIABLE VARIABLE=zoffset VALUE="{ns.zoffset}" [delayed_gcode LOAD_GCODE_OFFSETS] initial_duration: 2 gcode: {% if printer.save_variables.variables.zoffset %} {% set zoffset = printer.save_variables.variables.zoffset %} _SET_GCODE_OFFSET {% for axis, offset in zoffset.items() if zoffset[axis] %}{ "%s=%s " % (axis, offset) }{% endfor %} RESPOND TYPE=command MSG="Loaded Z-Offset from variables.cfg: {zoffset.z}mm" {% endif %} ################################################## # Maintenance Macros ################################################## [gcode_macro APPLY_GREASE] description: Moves the head to apply silicon grease to all joints gcode: G28 G90 G0 X0 Y0 Z20 F3500 G0 X0 Y0 Z400 F3500 G0 X0 Y0 Z20 F3500 G0 X0 Y0 Z400 F3500 G0 X0 Y0 Z20 F3500 G0 X0 Y0 Z400 F3500 G0 X0 Y0 Z20 F3500 G0 X0 Y0 Z400 F3500 G0 X0 Y0 Z20 F3500 G0 X0 Y0 Z400 F3500 G0 X0 Y0 Z20 F3500 G28 G90 G0 X150 Y0 Z20 F3500 G2 I-150 F3500 G3 I-150 F3500 G2 I-150 F3500 G3 I-150 F3500 G2 I-150 F3500 G3 I-150 F3500 G28