Commit 36b53bde authored by Aljaž Srebrnič's avatar Aljaž Srebrnič

Moved lightning stuff to separate thread, added some objects

parent 307cc753
...@@ -3,48 +3,62 @@ ...@@ -3,48 +3,62 @@
from time import sleep from time import sleep
from random import randint from random import randint
import configparser import configparser
from threading import Thread
import zmq import zmq
import spidev import spidev
import ws2812 import ws2812
activeFlag = True
c = 0 class Color:
rand = 1 green: int
r = 255 red: int
blue: int
def get_color():
if activeFlag == True : def as_tuple(self):
global c return self.green, self.red, self.blue
global r
global rand
if c+rand > 80: class ColorManager(Thread):
rand = randint(1, 8)*(-1) current_rand = 1
return(80, 255, 0) current_color = Color(0, 0, 0)
elif c+rand < 0: activeFlag = True
spi = spidev.SpiDev()
def __init__(self):
super().__init__()
self.spi.open(1, 0)
def get_color(self):
if self.current_color.green + self.current_rand > 80:
self.current_rand = -randint(1, 8)
self.current_color = Color(80, 255, 0)
elif self.current_colorgreen + self.current_rand < 0:
rand = randint(1, 8) rand = randint(1, 8)
return(0, 255, 0) self.current_color = Color(0, 255, 0)
else: else:
c = c + rand self.current_color.green += rand
return (c, 255, 0) self.current_color.red = 255
else: self.current_color.blue = 0
fade()
def fade(self):
if self.current_color.red > 0:
self.current_color.red -= 1
if self.current_color.green > 0:
self.current_color.green -= 1
def light_flame(): def start_fade(self):
spi = spidev.SpiDev() self.activeFlag = False
spi.open(1, 0)
while True: def run(self):
ws2812.write2812(spi, [get_color() * 4]) while self.is_alive():
sleep(0.001) if self.activeFlag:
self.get_color()
else:
self.fade()
def fade(): ws2812.write2812(self.spi, [self.current_color.as_tuple() * 4])
if r > 0: sleep(0.001)
r--
if c > 0:
c--
return (c, r, 0)
def main(): def main():
...@@ -64,18 +78,20 @@ def main(): ...@@ -64,18 +78,20 @@ def main():
topicfilter = "events" topicfilter = "events"
socket.setsockopt_string(zmq.SUBSCRIBE, topicfilter) socket.setsockopt_string(zmq.SUBSCRIBE, topicfilter)
cm = ColorManager()
while True: while True:
string = socket.recv() string = socket.recv()
topic, messagedata = string.split() topic, messagedata = string.split()
print(topic, messagedata) print(topic, messagedata)
if messagedata == b"liftoff": if messagedata == b"liftoff":
light_flame() cm = ColorManager()
cm.start()
elif messagedata == b"stage_1_separation": elif messagedata == b"stage_1_separation":
light_flame() pass
elif messagedata == b"stage_2_separation": elif messagedata == b"stage_2_separation":
light_flame() cm.start_fade()
activeFlag = False
else: else:
print("Unhandled message") print("Unhandled message")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment