Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
216 changes: 160 additions & 56 deletions positron_macros.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ gcode:
{% set x_center = (printer.toolhead.axis_maximum.x|float + printer.toolhead.axis_minimum.x|float) / 2.0 %}
{% set y_center = (printer.toolhead.axis_maximum.y|float + printer.toolhead.axis_minimum.y|float) / 2.0 %}
G90
G1 X{x_center} Y{y_center} F7800
G0 X{x_center} Y{x_center} F7800
Comment thread
smiksky marked this conversation as resolved.


[gcode_macro FRONT]
Expand All @@ -191,87 +191,184 @@ gcode:
{% set x_center = (printer.toolhead.axis_maximum.x|float + printer.toolhead.axis_minimum.x|float) / 2.0 %}
{% set y_front = printer.toolhead.axis_maximum.y|float - 10 %}
G90
G1 X{x_center} Y{y_front} F7800
G0 X{x_center} Y{y_front} F7800


[gcode_macro LOAD_POSITION]
description: Move the toolhead to the front left corner and raise the nozzle
gcode:
G28 X Y Z O
{% set x_left = printer.toolhead.axis_minimum.x|float + 10 %}
{% set y_front = printer.toolhead.axis_maximum.y|float - 10 %}
{% set z_up = [[printer.toolhead.position.z|default(0)|float + 100,printer.toolhead.axis_maximum.z|float - 10]|min, printer.toolhead.position.z|default(0)|float]|max %}
G90
G0 X{x_left} Y{y_front} Z{z_up} F7800


#####################################################################
# Filament Macros
#####################################################################

[gcode_macro M600]
description: Temporary self-service M600: PAUSE and UNLOAD_FILAMENT
gcode:
PAUSE
RESPOND MSG="Unloading filament, reload before resuming"
UNLOAD_FILAMENT
[gcode_macro _FILAMENT_CHANGE_VARIABLES]
description: Variables for filament changing macros
variable_preload_speed: 400
variable_preload_distance: 30
variable_load_speed: 2000
variable_load_distance: 300
variable_prime_speed: 200
variable_prime_distance: 30
variable_default_temperature: 210
gcode:


[gcode_macro UNLOAD_FILAMENT]
description: Unloads filament from toolhead. EXTRUDER_TEMP defaults to 210 if hotend is cold
gcode:
{% set EXTRUDER_TEMP = params.TEMP|default(210)|int %}
{% set MIN_TEMP = params.TEMP|default(210)|float * 0.98 %}
;define temperature local names
{% set CURRENT_TARGET = printer.extruder.target|float %}
{% set MIN_TARGET = printer.extruder.min_extrude_temp|float %}
{% set EXPLICIT_TARGET = params.TEMP|default(0)|int %}
{% set DEFAULT_TARGET = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].default_temperature|float %}

;define distance local names
{% set PRELOAD_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].preload_distance|float %}
{% set LOAD_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].load_distance|float %}
{% set PRIME_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].prime_distance|float %}

;define speed local names
{% set PRELOAD_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].preload_speed|float %}
{% set LOAD_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].load_speed|float %}
{% set PRIME_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].prime_speed|float %}

;save state
SAVE_GCODE_STATE NAME=UNLOAD_FILAMENT
G28 O
G91 ; relative positioning
G1 Z20 ; move nozzle upwards
FRONT ; move the toolhead to the front

{% if EXTRUDER_TEMP != 0 %}
LED_PENDING
{% if CURRENT_TARGET < EXTRUDER_TEMP %}
M104 S{EXTRUDER_TEMP} ; only heat up if the current extruder is not already hot
{% endif %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={MIN_TEMP} ; wait for min extrude temp to reach

;home if needed (per axis) and move to load position
LED_WORKING
G28 X Y Z O
LOAD_POSITION

;set/wait for extruder temperature
LED_PENDING
; heat to parameter if valid
{% if EXPLICIT_TARGET >= MIN_TARGET %}
M109 S{EXPLICIT_TARGET}
; else heat to standing target if valid
{% elif CURRENT_TARGET > MIN_TARGET %}
M109 S{CURRENT_TARGET}
; else heat to default target
{% else %}
M109 S{DEFAULT_TARGET}
{% endif %}

;deprime and unload
LED_WORKING
M83 ; set extruder to relative mode
G1 E10 F300 ; extrude a little to soften tip
G1 E-30 F3600 ; quickly retract a small amount to elimate stringing
G4 P200 ; pause for a short amount of time
G1 E-400 F1200 ; retract slowly the rest of the way
M400 ; wait for moves to finish
RESTORE_GCODE_STATE NAME=UNLOAD_FILAMENT
M300 P400 ; long beep to indicate unload complete
M117 Unload Complete!
M83
G1 E-{PRIME_DISTANCE} F{PRIME_SPEED}
G4 P200
G1 E-{LOAD_DISTANCE} F{LOAD_SPEED}
G4 P200
G1 E-{PRELOAD_DISTANCE * 3} F{PRELOAD_SPEED}
G4 P200
M400

;signal end of unload
M300 P400
LED_READY
M117 Unload complete
RESTORE_GCODE_STATE NAME=UNLOAD_FILAMENT


[gcode_macro LOAD_FILAMENT]
description: Loads new filament into toolhead. EXTRUDER_TEMP defaults to 210 if hotend is cold
gcode:
{% set EXTRUDER_TEMP = params.TEMP|default(210)|int %}
{% set MIN_TEMP = params.TEMP|default(210)|float * 0.98 %}
;define temperature local names
{% set CURRENT_TARGET = printer.extruder.target|float %}
{% set Z_TARGET = [[printer.toolhead.position.z|default(0)|float + 100,printer.toolhead.axis_maximum.z|float - 10]|min, printer.toolhead.position.z|default(0)|float]|max %}
SAVE_GCODE_STATE NAME=LOAD_FILAMENT
G28 O
G90 ; absolute positioning
G1 Z{Z_TARGET} ; move nozzle upwards
FRONT ; move the toolhead to the front

{% if EXTRUDER_TEMP != 0 %}
LED_PENDING
{% if CURRENT_TARGET < EXTRUDER_TEMP %}
M104 S{EXTRUDER_TEMP} ; only heat up if the current extruder is not already hot
{% endif %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={MIN_TEMP} ; wait for min extrude temp to reach
{% set MIN_TARGET = printer.extruder.min_extrude_temp|float %}
{% set EXPLICIT_TARGET = params.TEMP|default(0)|int %}
{% set DEFAULT_TARGET = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].default_temperature|float %}

;define distance local names
{% set PRELOAD_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].preload_distance|float %}
{% set LOAD_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].load_distance|float %}
{% set PRIME_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].prime_distance|float %}

;define speed local names
{% set PRELOAD_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].preload_speed|float %}
{% set LOAD_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].load_speed|float %}
{% set PRIME_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].prime_speed|float %}

;save state
SAVE_GCODE_STATE NAME=UNLOAD_FILAMENT

;home if needed (per axis) and move to load position
LED_WORKING
G28 X Y Z O
LOAD_POSITION

;set/wait for extruder temperature
LED_PENDING
; heat to parameter if valid
{% if EXPLICIT_TARGET >= MIN_TARGET %}
M109 S{EXPLICIT_TARGET}
; else heat to standing target if valid
{% elif CURRENT_TARGET > MIN_TARGET %}
M109 S{CURRENT_TARGET}
; else heat to default target
{% else %}
M109 S{DEFAULT_TARGET}
{% endif %}

;deprime and unload
LED_WORKING
M83 ; set extruder to relative mode
M106 S255 ; Set part cooling fan to max
G1 E400 F1200 ; extrude slowly
G1 E20 F600
M107 ; turn off part cooling fan
M400 ; wait for moves to finish
M300 P200 ; two short beeps to indicate load complete
G4 P100
M300 P200
RESTORE_GCODE_STATE NAME=LOAD_FILAMENT
M117 Load Complete!
M83
G1 E{PRELOAD_DISTANCE} F{PRELOAD_SPEED}
G4 P200
G1 E{LOAD_DISTANCE} F{LOAD_SPEED}
G4 P200
G1 E{PRIME_DISTANCE} F{PRIME_SPEED}
G4 P200
M400

;prompt for extra purge
_PROMPT_PURGE

;mark complete load
M300 P400
LED_READY
M117 Unload complete
RESTORE_GCODE_STATE NAME=UNLOAD_FILAMENT


[gcode_macro _PROMPT_PURGE]
gcode:
RESPOND TYPE=command MSG="action:prompt_begin Load Filament"
RESPOND TYPE=command MSG="action:prompt_text Continue purging?"
RESPOND TYPE=command MSG="action:prompt_footer_button Purge|_PURGE_MORE|secondary"
RESPOND TYPE=command MSG="action:prompt_footer_button Continue||primary"
RESPOND TYPE=command MSG="action:prompt_show"


[gcode_macro _PURGE_MORE]
gcode:
{% set PRIME_DISTANCE = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].prime_distance|float %}
{% set PRIME_SPEED = printer["gcode_macro _FILAMENT_CHANGE_VARIABLES"].prime_speed|float %}
M83
G1 E{PRIME_DISTANCE} F{PRIME_SPEED}
G4 P200
M400
_PROMPT_PURGE


[gcode_macro M600]
description: Implements M600 gcode (pause & filament change)
gcode:
SAVE_GCODE_STATE NAME=M600
PAUSE
UNLOAD_FILAMENT
LOAD_FILAMENT
RESUME
RESTORE_GCODE_STATE NAME=M600


#####################################################################
Expand Down Expand Up @@ -407,6 +504,13 @@ gcode:
SET_LED LED=_indicator RED=0 GREEN=0.4 BLUE=0.2 INDEX=3


[gcode_macro LED_ALERT]
description: sets the _indicators to yellow
gcode:
SET_LED LED=_indicator RED=0.6 GREEN=0.6 BLUE=0 INDEX=1 TRANSMIT=0
SET_LED LED=_indicator RED=0.6 GREEN=0.6 BLUE=0 INDEX=3


[gcode_macro LED_WORKING]
description: sets the _indicators to purple
gcode:
Expand Down