A Zeron összesen csak öt gombot tudtam elhelyezni, így igyekeztem egy-egy gombra több funkciót tenni.
A teljes kód itt található: github.com/Zen3Dlab/Voron0/V0.346/klipper_config/buttons.cfg
néhány példát kiemelek ebből:
V0 HOME/BED_SCREWS_ADJUST gomb.
Az első gomb úgy möködik, hogy első megnyomásra egy Home-ot csinál, a következő megnyomásra a BED_SCREWS_ADJUST makrót indítja el, majd következőkre ACCEPT-et, amíg körbe nem ér, majd végül megáll középen a fej.
A Home szükségességét a printer.toolhead.homed_axes == "xyz" feltétel eredménye adja. A leveling folyamat követésére az accepted_screws változóba mentem, hogy hol is tartunk.
[gcode_button buttonHomeLeveling]
pin: rpi:gpio21
press_gcode:
{% set svv = printer.save_variables.variables %}
{% if printer.toolhead.homed_axes == "xyz" %}
{% if svv.state == "home" %}
BED_SCREWS_ADJUST
SAVE_VARIABLE VARIABLE=accepted_screws VALUE=0
SAVE_VARIABLE VARIABLE=state VALUE='"leveling"'
{% else %}
{% if svv.accepted_screws < 3 %}
ACCEPT
{% if svv.accepted_screws == 2 %}
G0 X60 Y55 Z30 F2400
{% endif %}
SAVE_VARIABLE VARIABLE=accepted_screws VALUE={ svv.accepted_screws + 1 }
{% else %}
BED_SCREWS_ADJUST
SAVE_VARIABLE VARIABLE=accepted_screws VALUE=0
{% endif %}
{% endif %}
{% else %}
M117 Home
SAVE_VARIABLE VARIABLE=state VALUE='"home"'
G28 ; home all axes
G90 ; absolute positioning
{% endif %}
release_gcode:
Pause/Resume
A Pause és Resume funkciókat is könnyű egy gombra tenni, mert a printer.pause_resume.is_paused igaz értéked ad vissza pause közben, így ebben az esetben a Resume makrót kell hívni.
[gcode_button buttonPauseResume]
pin: rpi:gpio26
press_gcode:
{% if printer.pause_resume.is_paused %}
RESUME
{% else %}
PAUSE
{% endif %}
release_gcode:
Load/Extrud/Z adjust
A felfelé és lefelé nyilakra is több funkciót tettem.
- Nyomtatás közben a Z offset-et lehet állítani 0.02mm lépésekkel.
- Ha nem nyomtat éppen,
- akkor a lefelé nyíl a Load makrót indítja, ha nincs bent filament
- vagy 10mm-et extrudál, ha már be van töltve a filament (hasznos, ha ki kell tísztítani az előző színt.).
Midez így néz ki:
[gcode_button load]
pin: rpi:gpio20
press_gcode:
{% if printer.idle_timeout.state == "Printing" %}
SET_GCODE_OFFSET Z_ADJUST=-0.02 MOVE=1
{% else %}
{% set svv = printer.save_variables.variables %}
{% if svv.filament_state == "loaded" %}
M117 prime nozzle
M83 ; set extruder to relative
G1 E10 F300 ; prime nozzle with filament
M82 ; set extruder to absolute
{% else %}
M117 load filament
FILAMENT_LOAD_POSITION
LOAD_FILAMENT
{% endif %}
SAVE_VARIABLE VARIABLE=filament_state VALUE='"loaded"'
{% endif %}
release_gcode:
{% if printer.idle_timeout.state == "Printing" %}
SHOW_OFFSET
{% endif %}
Nincs filament szenzor a gépben, így az a trükk, hogy permanensen eltárolom, hogy utoljára Load vagy UnLoad futott-e le, innen tudom, hogy van-e befűzve filament. Ahhoz, hogy a változók értékét eltárolja a Klipper a disk-re és így megmaradjon az érték újraindítás után is, ezt a beállítást kell elhelyezni printer.cfg-ben:
[save_variables]
filename: ~/variables.cfg
Ezek után a "filament_state" nevű változó értékére mindig lehet számítani.
Az M117-es utasítással a kijezőre küldök ki státusz üzenneteket.
A SHOW_OFFSET is a kijelzőre írja ki az aktuális Z Offsetet:
[gcode_macro SHOW_OFFSET]
gcode:
M117 Offset: { printer.gcode_move.homing_origin.z }
CLEAR_DISPLAY_DELAY
A CLEAR_DISPLAY_DELAY pedig 10 másodperc késletetéssel meghívja a képernyő törlő makrót:
[gcode_macro CLEAR_DISPLAY_DELAY]
gcode:
UPDATE_DELAYED_GCODE ID=clear_display DURATION=10
[delayed_gcode clear_display]
gcode:
M117
A FILAMENT_LOAD_POSITION középre állítja a fejet és előtte meghívja HOME_IF_NEEDED makrót, ami csak akkor Homeol, ha szükséges.
[gcode_macro HOME_IF_NEEDED]
gcode:
{% if printer.toolhead.homed_axes != "xyz" %}
G28
{% endif %}
[gcode_macro FILAMENT_LOAD_POSITION]
gcode:
{% if not printer.pause_resume.is_paused %}
HOME_IF_NEEDED
G0 X60 Y55 Z30 F2400
{% endif %}