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

Moved lightning stuff to separate thread, added some objects

parent 307cc753
Loading
Loading
Loading
Loading
+51 −35
Original line number Diff line number Diff line
@@ -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'})
@@ -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")