Skip to main content

Подсветка принтера со своей логикой в виде макросов.

https://telegra.ph/Podsvetka-printera-so-svoej-logikoj-v-vide-makrosov-04-08?ysclid=meiz583b3l819011281

Klipper даёт несколько возможностей для организации подсветки принтера. Первый вариант самый простой и он же самый ущербный, он казалось бы прост, но ограничивает наш узкими рамками своей логики. Поэтому я рекомендую использовать макросы, в них всегда можно встроить свою логику.

И так в moontaker.cfg мы прописываем


[power led]

type: klipper_device

object_name: gcode_macro led


Где power led это указания устройства, то есть мы объявляем устройство power с именем led. Далее Мы указываем тип устройства, в моём случае это klipper_device. object_name: gcode_macro led имя вызываемого макроса в данном примере это led

Далее нам нужно создать макрос для взаимодействия с moonraker

Например мой макрос выглядит так (не копируйте бездумно)


[output_pin led_button] 

pin:opi:gpiochip1/gpio111

value: 0


[gcode_macro led]

variable_value: 0

gcode:

  {% if printer.save_variables.variables.night_time == 0 %}

   {% if (params.VALUE is undefined) and (printer["gcode_macro led"].value == 1) %}

    {% set VALUE = 0 %}

   {% elif (params.VALUE is undefined) and (printer["gcode_macro led"].value == 0) %}

    {% set VALUE = 1 %}

   {% else %}

    {% set VALUE = params.VALUE|default(1)|int %}

   {% endif %}

   {% if VALUE == 1 %}

    SET_PIN PIN=led_button VALUE=1

    voice S=28

   {% else %}

    SET_PIN PIN=led_button VALUE=0

    voice S=29

   {% endif %}

   SET_GCODE_VARIABLE MACRO=led VARIABLE=value VALUE={VALUE}

  {% endif %}


output_pin led_button указывает на пин которым мы будем управлять, где led_button имя этого пина для управления из макроса по команде SET_PIN PIN

pin Имя пина, в данном примере это gpio opi3lts.

value: 0 значение этого пина по умолчанию 0 выключен, 1 включен.

Макрос led может вызываться без переменных а именно просто led тогда он инвертирует текущее состояние.

Или же с перемененной VALUE , которая указывает включить или выключить свет.

led VALUE=1 включает свет

led VALUE=0 выключает свет

В самом начале макроса объявляется что макрос будет временно сохранять свои значения, указываются умолчания то есть ноль variable_VALUE: 0

Далее идёт логика {% if printer.save_variables.variables.night_time == 0 %}

это проверка из мануала https://telegra.ph/Planirovka-vklyucheniya-ili-vyklyucheniya-na-osnove-tekushchego-vremeni-dlya-zadanij-ili-zapreta-vypolneniya-makrosov-ili-logiki-04-08

Если вам не надо то опустите это. и исключите в конце {% endif %}

А далее идёт сама логика макроса, её можно менять под себя и свои нужды.

{% if (params.VALUE is undefined) and (printer["gcode_macro led"].value == 1) %}

    {% set VALUE = 0 %}

Тем самым мы проверяем вызывался ли макрос без внешней переменной VALUE и же сохранённый параметр макроса led был один (об сохранении параметра макроса ниже) тогда присваиваем переменной VALUE значение ноль. Если же это не верно то проверяем

{% elif (params.VALUE is undefined) and (printer["gcode_macro led"].value == 0) %}

    {% set VALUE = 1 %}

Проверяем вызывался ли макрос с без внешней переменной VALUE и сохранённый параметр макроса led был ноль (о сохранении параметра макроса ниже) тогда присваиваем переменной VALUE значение один. Иначе

{% set VALUE = params.VALUE|default(1)|int %}

Присваиваем значение переменной VALUE по умолчанию единицу, так как макрос вызывался без параметров.

{% if VALUE == 1 %}

    SET_PIN PIN=led_button VALUE=1

    voice S=28

   {% else %}

    SET_PIN PIN=led_button VALUE=0

    voice S=29

   {% endif %}

   SET_GCODE_VARIABLE MACRO=led VARIABLE=value VALUE={VALUE}

  {% endif %}

Логика такова {% if VALUE == 1 %} если переменная VALUE равна единице, то переключаем пина led_button в еденицу, SET_PIN PIN=led_button VALUE=1

voice S=28 для примера, это макрос вызывает звуковое уведомление "Свет включен!"

иначе ( {% else %} ) переключаем пина led_button в ноль, SET_PIN PIN=led_button VALUE=0

voice S=29 для примера, это макрос вызывает звуковое уведомление "Свет выключен!"

SET_GCODE_VARIABLE MACRO=led VARIABLE=value VALUE={VALUE}

Это самая важная часть, это сохранение переменной пина в память. Значение VALUE сохраняем в память, чтоб мунрейкер понял статус пина.