Loading lighting.py +51 −35 Original line number Diff line number Diff line Loading @@ -3,49 +3,63 @@ from time import sleep from random import randint import configparser from threading import Thread import zmq import spidev import ws2812 class Color: green: int red: int blue: int def as_tuple(self): return self.green, self.red, self.blue class ColorManager(Thread): current_rand = 1 current_color = Color(0, 0, 0) activeFlag = True c = 0 rand = 1 r = 255 def get_color(): if activeFlag == True : global c global r global rand if c+rand > 80: rand = randint(1, 8)*(-1) return(80, 255, 0) elif c+rand < 0: 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) return(0, 255, 0) self.current_color = Color(0, 255, 0) else: c = c + rand return (c, 255, 0) self.current_color.green += rand self.current_color.red = 255 self.current_color.blue = 0 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 start_fade(self): self.activeFlag = False def run(self): while self.is_alive(): if self.activeFlag: self.get_color() else: fade() self.fade() def light_flame(): spi = spidev.SpiDev() spi.open(1, 0) while True: ws2812.write2812(spi, [get_color() * 4]) ws2812.write2812(self.spi, [self.current_color.as_tuple() * 4]) sleep(0.001) def fade(): if r > 0: r-- if c > 0: c-- return (c, r, 0) def main(): config = configparser.ConfigParser({'host': '10.10.10.1', 'port': '5556'}) Loading @@ -64,18 +78,20 @@ def main(): topicfilter = "events" socket.setsockopt_string(zmq.SUBSCRIBE, topicfilter) cm = ColorManager() while True: string = socket.recv() topic, messagedata = string.split() print(topic, messagedata) if messagedata == b"liftoff": light_flame() cm = ColorManager() cm.start() elif messagedata == b"stage_1_separation": light_flame() pass elif messagedata == b"stage_2_separation": light_flame() activeFlag = False cm.start_fade() else: print("Unhandled message") Loading Loading
lighting.py +51 −35 Original line number Diff line number Diff line Loading @@ -3,49 +3,63 @@ from time import sleep from random import randint import configparser from threading import Thread import zmq import spidev import ws2812 class Color: green: int red: int blue: int def as_tuple(self): return self.green, self.red, self.blue class ColorManager(Thread): current_rand = 1 current_color = Color(0, 0, 0) activeFlag = True c = 0 rand = 1 r = 255 def get_color(): if activeFlag == True : global c global r global rand if c+rand > 80: rand = randint(1, 8)*(-1) return(80, 255, 0) elif c+rand < 0: 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) return(0, 255, 0) self.current_color = Color(0, 255, 0) else: c = c + rand return (c, 255, 0) self.current_color.green += rand self.current_color.red = 255 self.current_color.blue = 0 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 start_fade(self): self.activeFlag = False def run(self): while self.is_alive(): if self.activeFlag: self.get_color() else: fade() self.fade() def light_flame(): spi = spidev.SpiDev() spi.open(1, 0) while True: ws2812.write2812(spi, [get_color() * 4]) ws2812.write2812(self.spi, [self.current_color.as_tuple() * 4]) sleep(0.001) def fade(): if r > 0: r-- if c > 0: c-- return (c, r, 0) def main(): config = configparser.ConfigParser({'host': '10.10.10.1', 'port': '5556'}) Loading @@ -64,18 +78,20 @@ def main(): topicfilter = "events" socket.setsockopt_string(zmq.SUBSCRIBE, topicfilter) cm = ColorManager() while True: string = socket.recv() topic, messagedata = string.split() print(topic, messagedata) if messagedata == b"liftoff": light_flame() cm = ColorManager() cm.start() elif messagedata == b"stage_1_separation": light_flame() pass elif messagedata == b"stage_2_separation": light_flame() activeFlag = False cm.start_fade() else: print("Unhandled message") Loading