trigger f for fold via dmx too

This commit is contained in:
j 2024-06-17 16:49:55 +01:00
parent fa4387a187
commit be9c333967
2 changed files with 38 additions and 15 deletions

View file

@ -14,6 +14,8 @@ font_size = 28
letter_offset = False letter_offset = False
lights_brightness = 255 lights_brightness = 255
led_lights = 24
letter_base_light = 25
conf = os.path.expanduser('~/.config/cdosea.json') conf = os.path.expanduser('~/.config/cdosea.json')
if os.path.exists(conf): if os.path.exists(conf):

View file

@ -55,7 +55,7 @@ CURRENT_STATE = [0] * 16
# avoid overload and turn light on with a fade # avoid overload and turn light on with a fade
def fade_to(sender, start, end, duration, channels=16, universe=1): def fade_to(sender, start, end, duration, channels=16, universe=1, lights=[]):
distance = end - start distance = end - start
steps = int(duration * 10) steps = int(duration * 10)
if not steps: if not steps:
@ -79,33 +79,45 @@ def fade_to(sender, start, end, duration, channels=16, universe=1):
else: else:
a = old a = old
b = target b = target
sender[universe].dmx_data = [a[x] if x % 2 else b[x] for x in range(channels)] channel_data = [a[x] if x % 2 else b[x] for x in range(channels)]
sender[universe].dmx_data = channel_data + lights[channels:]
time.sleep(step) time.sleep(step)
steps -= 1 steps -= 1
channel_data = [end] * channels
sender[universe].dmx_data = channel_data + lights[channels:]
def dmx_base(letter):
lights = [0] * 512
letter_offset = 101 - 1
for offset in range(letter_offset, letter_offset+27):
lights[offset] = config.letter_base_light
if letter:
lights[letter_offset + string.ascii_lowercase.index(letter.lower())] = 255
lights[letter_offset + 26] = 255
return lights
def flash(flashes): def flash(sender, universe, flashes, letter):
step = 0.2 step = 0.2
flash_duration = 0.02 flash_duration = 0.02
base = 0 base = 0
brightness = config.lights_brightness brightness = config.lights_brightness
universe = 1 channels = config.led_lights
channels = 16
sender = sacn.sACNsender()
sender.start()
sender.activate_output(universe)
sender[universe].multicast = True
sender[universe].dmx_data = [0] * channels sender[universe].dmx_data = [0] * channels
while flashes: while flashes:
fade_to(sender, base, brightness, flash_duration, channels, universe) lights = dmx_base(letter)
fade_to(sender, base, brightness, flash_duration, channels, universe, lights)
time.sleep(step) time.sleep(step)
sender[1].dmx_data = [0] * channels lights = dmx_base(None)
channel_data = [0] * channels
sender[universe].dmx_data = channel_data + lights[channels:]
time.sleep(step) time.sleep(step)
flashes -= 1 flashes -= 1
sender[universe].dmx_data = [0] * channels lights = dmx_base(None)
channel_data = [0] * channels
sender[universe].dmx_data = channel_data + lights[channels:]
time.sleep(step) time.sleep(step)
sender.stop()
def switch(state, seq): def switch(state, seq):
@ -128,7 +140,14 @@ if __name__ == '__main__':
letter_offset = 0 letter_offset = 0
letter = path.split('/')[-1][0].lower() letter = path.split('/')[-1][0].lower()
if config.letter_offset: if config.letter_offset:
if config.lanbox:
letter_offset = 11 + string.ascii_lowercase.index(letter) * 10 letter_offset = 11 + string.ascii_lowercase.index(letter) * 10
if not config.lanbox:
universe = 1
sender = sacn.sACNsender()
sender.start()
sender.activate_output(universe)
sender[universe].multicast = True
while pos < duration - 15: while pos < duration - 15:
sleep = seq() + 15 sleep = seq() + 15
light = seq() light = seq()
@ -140,5 +159,7 @@ if __name__ == '__main__':
if config.lanbox: if config.lanbox:
switch(light + letter_offset, seq) switch(light + letter_offset, seq)
else: else:
flash(light + 1) flash(sender, universe, light + 1, letter)
pos += sleep pos += sleep
if not config.lanbox:
sender.stop()