Allow None animation, stopping the update thread
This commit is contained in:
parent
d4166db9ab
commit
f4f5458209
22
dmx.py
22
dmx.py
|
@ -27,6 +27,7 @@ class RGB:
|
|||
self.dmx.set(self.slot + self.offset + 1, ledlog(g))
|
||||
self.dmx.set(self.slot + self.offset + 2, ledlog(b))
|
||||
|
||||
|
||||
class Bar252(RGB):
|
||||
def __init__(self, dmx, slot=1):
|
||||
super(Bar252, self).__init__(dmx, slot, 2)
|
||||
|
@ -130,18 +131,17 @@ class DMX:
|
|||
self.animation = FadeTo(255, 255, 255)
|
||||
self.rgbs = []
|
||||
self.thread = None
|
||||
self.updating = False
|
||||
|
||||
def start(self):
|
||||
if self.thread and self.thread.is_alive():
|
||||
return
|
||||
self.thread = Thread(daemon=True, target=self.background)
|
||||
self.updating = True
|
||||
self.thread.start()
|
||||
|
||||
def background(self):
|
||||
while True:
|
||||
animation = self.animation
|
||||
for i in range(0, len(self.rgbs)):
|
||||
self.rgbs[i].rgb(animation.update(i, len(self.rgbs)))
|
||||
while self.updating:
|
||||
self.update()
|
||||
# print("updating")
|
||||
# print(self.data)
|
||||
|
@ -149,6 +149,12 @@ class DMX:
|
|||
sleep(1.0 / 30)
|
||||
|
||||
def update(self):
|
||||
if not self.animation:
|
||||
return
|
||||
|
||||
for i in range(0, len(self.rgbs)):
|
||||
self.rgbs[i].rgb(self.animation.update(i, len(self.rgbs)))
|
||||
|
||||
packet = self.header[:]
|
||||
packet.append(self.sequence) # Sequence,
|
||||
packet.append(0x00) # Physical
|
||||
|
@ -168,5 +174,13 @@ class DMX:
|
|||
self.data[slot - 1] = value
|
||||
|
||||
def setAnimation(self, animation):
|
||||
if not animation:
|
||||
self.updating = False
|
||||
self.thread.join()
|
||||
# one frame black
|
||||
self.animation = Steady(0, 0, 0)
|
||||
self.update()
|
||||
else:
|
||||
self.animation = animation
|
||||
self.start()
|
||||
print(f"Animation: {animation}", file=sys.stderr)
|
Loading…
Reference in a new issue