added class for fading between colors
This commit is contained in:
parent
5d4d797e9a
commit
8e169a82bd
|
@ -0,0 +1,91 @@
|
|||
from beleuchtung import Beleuchtung
|
||||
import random
|
||||
import time
|
||||
|
||||
class NoSegmentExists(Exception):
|
||||
pass
|
||||
|
||||
class ColorsMustBeMultipleOfThreeAndMustExist(Exception):
|
||||
pass
|
||||
|
||||
class Fade():
|
||||
def __init__(self, start, end, step_num):
|
||||
self.fade_step = (end - start) / step_num
|
||||
self.current = start
|
||||
|
||||
def next(self):
|
||||
self.current += self.fade_step
|
||||
return round(self.current)
|
||||
|
||||
class SolidColorFadingBetweenFenster(Beleuchtung):
|
||||
def __init__(self, segments, colors, steps, addr):
|
||||
if len(segments) == 0:
|
||||
raise NoSegmentExists
|
||||
if len(colors) % 3 != 0 or len(colors) == 0:
|
||||
raise ColorsMustBeMultipleOfThreeAndMustExist
|
||||
Beleuchtung.__init__(self, segments, addr)
|
||||
self.colors = colors
|
||||
self.max_step = steps
|
||||
self.data = self.generate_new_colors()
|
||||
self.fader = []
|
||||
|
||||
def __del__(self):
|
||||
for i in self.fader:
|
||||
del i
|
||||
|
||||
def to_hex(self, obj, offset):
|
||||
return "%02x%02x%02x" % (obj[offset+1], obj[offset], obj[offset+2])
|
||||
|
||||
def __iter__(self):
|
||||
self.step = 0
|
||||
self.fade_to = self.generate_new_colors()
|
||||
self.fader = [Fade(self.data[i], self.fade_to[i], self.max_step) for i in range(len(self.data))]
|
||||
j = 0
|
||||
for i in range(self.get_num_of_segments()):
|
||||
print("%d\t#%s\t#%s" % (i, self.to_hex(self.data, j), self.to_hex(self.fade_to, j)))
|
||||
j += self.segments[i] * 3
|
||||
return self
|
||||
|
||||
def __next__(self):
|
||||
self.step += 1
|
||||
if self.step > self.max_step:
|
||||
for i in self.fader:
|
||||
del i
|
||||
raise StopIteration
|
||||
self.data = []
|
||||
for i in self.fader:
|
||||
self.data.append(i.next())
|
||||
return self.send
|
||||
|
||||
def get_num_of_colors(self):
|
||||
return len(self.colors) / 3
|
||||
|
||||
def get_rand_color(self):
|
||||
i = random.randint(0, self.get_num_of_colors() - 1) * 3
|
||||
return self.colors[i:i+3]
|
||||
|
||||
def generate_new_colors(self):
|
||||
colors = []
|
||||
for i in range(self.get_num_of_segments()):
|
||||
colors += self.get_rand_color() * self.segments[i]
|
||||
return colors
|
||||
|
||||
if __name__ == "__main__":
|
||||
ambiant_colors = [
|
||||
0,0xff,0xfb,
|
||||
0xff,0,0xff,
|
||||
0,0xcd,0xeb,
|
||||
0xfe,0xa0,0xd0,
|
||||
0xce,0xfa,0x2d,
|
||||
0x90,0x3c,0xee
|
||||
]
|
||||
|
||||
x = SolidColorFadingBetweenFenster([57, 59], ambiant_colors, 1500, [("127.0.0.1", 49152),("172.23.92.15", 49152)])
|
||||
|
||||
try:
|
||||
while True:
|
||||
for i in x:
|
||||
i()
|
||||
time.sleep(1.0/50)
|
||||
except KeyboardInterrupt:
|
||||
del x
|
Loading…
Reference in New Issue