Made rgbw_sinus.py the first example script for ZAMusiclight

This commit is contained in:
Thomas Kolb 2022-03-18 19:52:46 +01:00
parent e97ee59355
commit d39c046def

View file

@ -1,35 +1,66 @@
#!/usr/bin/env python #!/usr/bin/env python
# encoding: utf-8
# Copyright (c) 2019-2022 Thomas Kolb
# This file is licensed under the terms of the MIT license. See COPYING for
# details.
# Importieren von sk6812_multistrip.py, welches das Netzwerkprotokoll für die
# LED-Leiste abstrahiert.
import sk6812_multistrip as sk6812 import sk6812_multistrip as sk6812
import time
import math
import sys
import time # für sleep()
import sys # zum Lesen der IP-Adresse aus den Kommandozeilenargumenten
import math
# Konstanten
NLED = 150 # Anzahl der LEDs pro logischen Strip
NSTRIP = 2 # Anzahl der logischen Strips
# Objekt initialisieren
s = sk6812.SK6812(sys.argv[1], 2703) s = sk6812.SK6812(sys.argv[1], 2703)
phase = 0 # Wartezeit zwischen den Animationsschritten. Achtung, die LED-Leiste arbeitet
nled = 16 # immer mit 60 FPS! Dies ist insbesondere bei Verwendung von fade_color()
nstrip = 8 # relevant.
interval = 1.0/60 interval = 1.0/60
scale = 0.1 # Globale Skalierung für die Helligkeit.
scale = 0.5
strip = 0 # Startzeitpunkt der Animation
t0 = time.time()
# Hauptschleife
while True: while True:
for i in range(nled): # hole die aktuelle Zeit seit dem Start
x = 2*math.pi * i / nled t = time.time() - t0
r = scale * (127 + 127 * math.sin(x + 8*phase + 0 * math.pi/2))
g = scale * (127 + 127 * math.sin(x + 4*phase + 1 * math.pi/2))
b = scale * (127 + 127 * math.sin(x + 2*phase + 2 * math.pi/2))
w = scale * (127 + 127 * math.sin(x + 1*phase + 3 * math.pi/2))
for strip in range(nstrip): # umskalieren in einen langsam fortschreitenden Phasenwert
phase = t * 2*math.pi / 739.0
# Laufe über alle LEDs in allen Strips ...
for strip in range(NSTRIP):
for i in range(NLED):
# ... berechne für jede LED eine individuelle Farbe ...
# Der Wertebereich ist 0 bis 255 für jeden Kanal. Es gibt vier
# Kanäle: rot, grün, blau und weiß. Da weiß um einiges intensiver
# als die anderen Kanäle ist, wird dieser hier pauschal auf 60%
# gedimmt.
x = 2*math.pi * i / NLED
r = scale * (127 + 127 * math.sin(x + 283*phase + 0 * math.pi/2))
g = scale * (127 + 127 * math.sin(x + 293*phase + 1 * math.pi/2))
b = scale * (127 + 127 * math.sin(x + 307*phase + 2 * math.pi/2))
w = scale * 0.6 * (127 + 127 * math.sin(x + 311*phase + 3 * math.pi/2))
# ... und setze diese direkt
s.set_color(strip, i, r, g, b, w) s.set_color(strip, i, r, g, b, w)
s.commit() s.commit() # sendet alle bisherigen Befehle an die LED-Leiste. Muss
# spätestens nach 210 Befehlen aufgerufen werden!
phase += 2*math.pi * interval / 10 # Warte bis zum nächsten Frame
time.sleep(interval) time.sleep(interval)