# __ __ # | \/ | # | \ / | __ _ ___ _ __ ___ ___ # | |\/| |/ _` |/ __| '__/ _ \/ __| # | | | | (_| | (__| | | (_) \__ \ # |_| |_|\__,_|\___|_| \___/|___/ # # 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(-140) %} {% 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 %}