-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlight.cfg
More file actions
51 lines (45 loc) · 1.76 KB
/
light.cfg
File metadata and controls
51 lines (45 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[gcode_macro LIGHT]
description: Toggle or set a boolean/analog output pin (abstracted as STATE 0/1)
# The name of the pin responsible with lights
variable_pin_name: "light"
# Either [] for boolean (0/1), or [off_value, on_value] for analog abstraction
# Example: [0.0, 0.6]
variable_pin_analog_values: []
gcode:
{% set pin = pin_name %}
{% set analog = pin_analog_values %}
{% set current = printer["output_pin " ~ pin].value|float %}
# Determine target values for OFF/ON
{% if analog|length == 2 %}
{% set off_val = analog[0]|float %}
{% set on_val = analog[1]|float %}
{% else %}
{% set off_val = 0.0 %}
{% set on_val = 1.0 %}
{% endif %}
# Map current physical value to an abstract state (0/1) for toggling
{% set mid = (off_val + on_val) / 2.0 %}
{% set current_state = 1 if current >= mid else 0 %}
{% if 'STATE' in params %}
{% set state = params.STATE|int %}
{% if state == 0 or state == 1 %}
{% set target = on_val if state == 1 else off_val %}
SET_PIN PIN={pin} VALUE={target}
{% if state == 1 %}
RESPOND PREFIX=LIGHT MSG="Lights ON"
{% else %}
RESPOND PREFIX=LIGHT MSG="Lights OFF"
{% endif %}
{% else %}
RESPOND PREFIX=LIGHT MSG="Invalid light STATE={ params.STATE } (use 0 or 1). No action taken."
{% endif %}
{% else %}
{% set new_state = 1 - current_state %}
{% set target = on_val if new_state == 1 else off_val %}
SET_PIN PIN={pin} VALUE={target}
{% if new_state == 1 %}
RESPOND PREFIX=LIGHT MSG="Lights ON"
{% else %}
RESPOND PREFIX=LIGHT MSG="Lights OFF"
{% endif %}
{% endif %}