diff --git a/PixLeZ_Server/Blink.py b/PixLeZ_Server/Blink.py index 35534f1..53c8395 100644 --- a/PixLeZ_Server/Blink.py +++ b/PixLeZ_Server/Blink.py @@ -1,8 +1,7 @@ #!/usr/bin/env python import time - -import Adafruit_WS2801 +import typing from multiprocessing import Process from multiprocessing import Queue @@ -23,10 +22,10 @@ class Blink(object): def __init__(self): self.value = 0 - self.color = Adafruit_WS2801.RGB_to_color(255, 255, 255) + self.color = (255, 255, 255) self.colorList = [] for i in range(Constants.PIXEL_COUNT): - self.colorList.append('000000') + self.colorList.append((0, 0, 0)) self.time = 0.1 self.timer = 20.0 self.number = 1 @@ -50,13 +49,13 @@ def start(self): def stop(self): if self.process.is_alive(): self.process.terminate() - pixels.clear() + pixels.fill((0, 0, 0)) pixels.show() self.process = self.process = Process(target=self.run, args=( self.queueColor, self.queueColorList, self.queueTime, self.queueNumber,)) def get_status(self): - col1 = self.color_to_RGB(self.color) + col1 = self.color col2 = self.RGB_to_hex(col1[0], col1[1], col1[2]) retStr = "color=" + str(col2) + ";\ntime=" + str(self.time) + ";\ntimer=" + str(self.timer) \ + ";\nnumber=" + str(self.number) + ";\nmode=" + str(self.mode) + ";\neffect=" + str(self.effect) \ @@ -67,18 +66,18 @@ def get_status(self): # * Converts the RGB in different color schemes # * ----------- - def RGB_to_color(self, r, g, b): + def RGB_to_color(self, r: int, g: int, b: int): return ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF) - def color_to_RGB(self, color): + def color_to_RGB(self, color: int) -> typing.Tuple[int, int, int]: return (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF - def hex_to_RGB(self, hex): + def hex_to_RGB(self, hex: str) -> typing.Tuple[int, int, int]: hex = hex.lstrip('#') # print('RGB =', tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4))) return tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4)) - def RGB_to_hex(self, r, g, b): + def RGB_to_hex(self, r: int, g: int, b: int) -> str: st = '{:02x}{:02x}{:02x}'.format(r, g, b) st = st.upper() return st @@ -88,27 +87,27 @@ def RGB_to_hex(self, r, g, b): # * ----------- # value = Hex-String - # color = 28-Bit Int Value + # color = 28-Bit Int Value // No more, it is now a rgb tuple def set_color(self, value): if self.process.is_alive(): - self.color = int(value, 16) + self.color = self.hex_to_RGB(value) self.queueColor.put(self.color) for i in range(Constants.PIXEL_COUNT): - self.colorList[i] = value + self.colorList[i] = self.hex_to_RGB(value) self.queueColorList.put(self.colorList) else: - self.color = int(value, 16) + self.color = self.hex_to_RGB(value) for i in range(Constants.PIXEL_COUNT): - self.colorList[i] = value + self.colorList[i] = self.hex_to_RGB(value) # colors = Hex-String list def set_pixels(self, colors): if self.process.is_alive(): - self.colorList = colors + self.colorList = self.hex_to_RGB(colors) self.queueColorList.put(self.colorList) else: - self.colorList = colors + self.colorList = self.hex_to_RGB(colors) # Set time for changing in some Effects def set_time(self, value): @@ -160,18 +159,18 @@ def select_effect(self, value): def wheel(self, pos): if pos < 85: - return Adafruit_WS2801.RGB_to_color(pos * 3, 255 - pos * 3, 0) + return (pos * 3, 255 - pos * 3, 0) elif pos < 170: pos -= 85 - return Adafruit_WS2801.RGB_to_color(255 - pos * 3, 0, pos * 3) + return (255 - pos * 3, 0, pos * 3) else: pos -= 170 - return Adafruit_WS2801.RGB_to_color(0, pos * 3, 255 - pos * 3) + return (0, pos * 3, 255 - pos * 3) - # col := (r, g, b) - Tupel + # col := (r, g, b) - Tuple def road_map(self, *col): length = len(col) - part = int(pixels.count() / (len(col) - 1)) + part = int(len(pixels) / (len(col) - 1)) for i in range(0, len(col) - 1): difR = col[i + 1][0] - col[i][0] difG = col[i + 1][1] - col[i][1] @@ -181,8 +180,7 @@ def road_map(self, *col): difB = int(difB / part) # r, g, b = pixels.get_pixel_rgb(i) for j in range(part * i, part * (i + 1)): - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color( - col[i][0] + (j * difR), col[i][1] + (j * difG), col[i][2] + (j * difB))) + pixels[j] = (col[i][0] + (j * difR), col[i][1] + (j * difG), col[i][2] + (j * difB)) pixels.show() # * ----------- @@ -204,13 +202,10 @@ def checkQueue(self): # new process -> communication with queue def run(self, queueColor, queueColorList, queueTime, queueNumber): - tmp = 0 - # check Queue -> oefters abfragen! - t = Thread(target=self.checkQueue) - t.setDaemon(True) + # check Queue -> check more often! + t = Thread(target=self.checkQueue, daemon=True) t.start() while True: - time.sleep(0.001) # * ----------- @@ -309,7 +304,7 @@ def run(self, queueColor, queueColorList, queueTime, queueNumber): # 0) Mode - On Pixels if self.mode == 0: for i in range(len(self.colorList)): - pixels.set_pixel(i, int(self.colorList[i], 16)) + pixels[i] = self.colorList[i] pixels.show() # 1) Mode - Chill Pixels if self.mode == 1: @@ -317,7 +312,7 @@ def run(self, queueColor, queueColorList, queueTime, queueNumber): # 2) Mode - Custom Color Theme if self.mode == 2: for i in range(len(self.colorList)): - pixels.set_pixel(i, int(self.colorList[i], 16)) + pixels[i] = self.colorList[i] pixels.show() time.sleep(self.time) # break diff --git a/PixLeZ_Server/Blink_Test_Dummy.py b/PixLeZ_Server/Blink_Test_Dummy.py deleted file mode 100644 index 7dcd282..0000000 --- a/PixLeZ_Server/Blink_Test_Dummy.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env python - -import sys -import random -import math - -import time - -from multiprocessing import Process -from multiprocessing import Queue -from threading import Thread - -''' - PixLeZ - Server Dummy - Used without connecting to the Hardware - -''' - -# ! Select your pixel count -# 5 * 32 = 160 LEDs -PIXEL_COUNT = 160 - - -class Blink(object): - - def __init__(self): - self.value = 0 - self.color = 0 - self.colorList = [] - for i in range(PIXEL_COUNT): - self.colorList.append('000000') - self.time = 0.1 - self.timer = 20.0 - self.number = 1 - self.mode = -1 - self.effect = -1 - self.queueColor = Queue() - self.queueColorList = Queue() - self.queueTime = Queue() - self.queueNumber = Queue() - self.process = Process(target=self.run, args=(self.queueColor, self.queueColorList, self.queueTime, self.queueNumber,)) - - # * ----------- - # * Basic control and status methods - # * ----------- - - def start(self): - if not self.process.is_alive(): - self.process.start() - - def stop(self): - if self.process.is_alive(): - self.process.terminate() - self.process = self.process = Process(target=self.run, args=(self.queueColor, self.queueColorList, self.queueTime, self.queueNumber, )) - - def get_status(self): - col1 = self.color_to_RGB(self.color) - col2 = self.RGB_to_hex(col1[0], col1[1], col1[2]) - retStr = "color=" + str(col2) + ";\ntime=" + str(self.time) + ";\ntimer=" + str(self.timer) \ - + ";\nnumber=" + str(self.number) + ";\nmode=" + str(self.mode) + ";\neffect=" + str(self.effect) \ - + ";\nprocess=" + str(self.process.is_alive()) - return retStr - - - # * ----------- - # * Converts the RGB in different color schemes - # * ----------- - - def RGB_to_color(self, r, g, b): - return ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF) - - def color_to_RGB(self, color): - return (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF - - def hex_to_RGB(self, hex): - hex = hex.lstrip('#') - # print('RGB =', tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4))) - return tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4)) - - def RGB_to_hex(self, r, g, b): - st = '{:02x}{:02x}{:02x}'.format(r, g, b) - st = st.upper() - return st - - # * ----------- - # * Set methods uses by flask server - # * ----------- - - # value = Hex-String - # color = 28-Bit Int Value - def set_color(self, value): - if self.process.is_alive(): - self.color = int(value, 16) - self.queueColor.put(self.color) - - for i in range(PIXEL_COUNT): - self.colorList[i] = value - self.queueColorList.put(self.colorList) - else: - self.color = int(value, 16) - for i in range(PIXEL_COUNT): - self.colorList[i] = value - - # colors = Hex-String list - def set_pixels(self, colors): - if self.process.is_alive(): - self.colorList = colors - self.queueColorList.put(self.colorList) - else: - self.colorList = colors - - # Set time for changing in some Effects - def set_time(self, value): - if self.process.is_alive(): - self.time = value - self.queueTime.put(self.time) - else: - self.time = value - - # Set timer for an countdown / auto shutdown - def set_timer(self, value): - self.timer = value - - # Set number of LEDs - def set_number(self, value): - if self.process.is_alive(): - self.number = value - self.queueNumber.put(self.number) - else: - self.number = value - - # Select the mode -> alive := restart Process - def select_mode(self, value): - if value != -1: - self.effect = -1 - if self.process.is_alive(): - self.mode = value - self.stop() - time.sleep(0.2) - self.start() - else: - self.mode = value - - # Select the effect -> alive := restart Process - def select_effect(self, value): - if value != -1: - self.mode = -1 - if self.process.is_alive(): - self.effect = value - self.stop() - time.sleep(0.2) - self.start() - else: - self.effect = value - - # * ----------- - # * Area of used Methods for the effects / modes - # * ----------- - - - # * ----------- - # * Process loop - # * ----------- - - def checkQueue(self): - # Reading Queues - while True: - if not self.queueColor.empty(): - self.color = self.queueColor.get() - if not self.queueColorList.empty(): - self.colorList = self.queueColorList.get() - if not self.queueTime.empty(): - self.time = self.queueTime.get() - if not self.queueNumber.empty(): - self.number = self.queueNumber.get() - time.sleep(1) - - # new process -> communication with queue - def run(self, queueColor, queueColorList, queueTime, queueNumber): - tmp = 0 - while True: - - # check Queue -> oefters abfragen! - t = Thread(target=self.checkQueue) - t.setDaemon(True) - t.start() - - time.sleep(0.001) - - print('colorList' + ': ' + str(self.colorList)) - print('value' + ': ' + str(self.value)) - print('color' + ': ' + str(self.color)) - print('time' + ': ' + str(self.time)) - print('timer' + ': ' + str(self.timer)) - print('number' + ': ' + str(self.number)) - print('mode' + ': ' + str(self.mode)) - print('effect' + ': ' + str(self.effect)) - - time.sleep(5) - - # self.value = self.value + 1 - # print(self.value) - # time.sleep(self.time) - diff --git a/PixLeZ_Server/Blink_old.py b/PixLeZ_Server/Blink_old.py deleted file mode 100644 index 7c8066c..0000000 --- a/PixLeZ_Server/Blink_old.py +++ /dev/null @@ -1,575 +0,0 @@ -#!/usr/bin/env python - -import sys -import random -import math - -import time -import RPi.GPIO as GPIO - -import Adafruit_WS2801 -import Adafruit_GPIO.SPI as SPI - -from multiprocessing import Process -from multiprocessing import Queue - -''' - PixLeZ - Server - Old Configuration Backup - -''' - -# ! Select your pixel count -# 5 * 32 = 160 LEDs -PIXEL_COUNT = 160 - -# Hardware SPI -SPI_PORT = 0 -SPI_DEVICE = 0 -pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO) - - -class Blink(object): - - def __init__(self): - self.value = 0 - self.color = Adafruit_WS2801.RGB_to_color(255, 255, 255) - self.colorList = [] - self.time = 0.1 - self.timer = 20.0 - self.number = 1 - self.mode = -1 - self.effect = -1 - self.queueColor = Queue() - self.queueColorList = Queue() - self.queueTime = Queue() - self.queueNumber = Queue() - self.process = Process(target=self.run, args=(self.queueColor, self.queueColorList, self.queueTime, self.queueNumber,)) - - # * ----------- - # * Basic control and status methods - # * ----------- - - def start(self): - if not self.process.is_alive(): - self.process.start() - - def stop(self): - if self.process.is_alive(): - self.process.terminate() - pixels.clear() - pixels.show() - self.process = self.process = Process(target=self.run, args=(self.queueColor, self.queueColorList, self.queueTime, self.queueNumber, )) - - def get_status(self): - col1 = self.color_to_RGB(self.color) - col2 = self.RGB_to_hex(col1[0], col1[1], col1[2]) - retStr = "color=" + str(col2) + ";\ntime=" + str(self.time) + ";\ntimer=" + str(self.timer) \ - + ";\nnumber=" + str(self.number) + ";\nmode=" + str(self.mode) + ";\neffect=" + str(self.effect) \ - + ";\nprocess=" + str(self.process.is_alive()) - return retStr - - - # * ----------- - # * Converts the RGB in different color schemes - # * ----------- - - def RGB_to_color(self, r, g, b): - return ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF) - - def color_to_RGB(self, color): - return (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF - - def hex_to_RGB(self, hex): - hex = hex.lstrip('#') - # print('RGB =', tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4))) - return tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4)) - - def RGB_to_hex(self, r, g, b): - st = '{:02x}{:02x}{:02x}'.format(r, g, b) - st = st.upper() - return st - - # * ----------- - # * Set methods uses by flask server - # * ----------- - - # value = Hex-String - # color = 28-Bit Int Value - def set_color(self, value): - if self.process.is_alive(): - self.color = int(value, 16) - self.queueColor.put(self.color) - else: - self.color = int(value, 16) - - # colors = Hex-String list - def set_pixels(self, colors): - if self.process.is_alive(): - self.colorList = colors - self.queueColorList.put(self.colorList) - else: - self.colorList = colors - - # Set time for changing in some Effects - def set_time(self, value): - if self.process.is_alive(): - self.time = value - self.queueTime.put(self.time) - else: - self.time = value - - # Set timer for an countdown / auto shutdown - def set_timer(self, value): - self.timer = value - - # Set number of LEDs - def set_number(self, value): - if self.process.is_alive(): - self.number = value - self.queueNumber.put(self.number) - else: - self.number = value - - # Select the mode -> alive := restart Process - def select_mode(self, value): - if value != -1: - self.effect = -1 - if self.process.is_alive(): - self.mode = value - self.stop() - time.sleep(0.2) - self.start() - else: - self.mode = value - - # Select the effect -> alive := restart Process - def select_effect(self, value): - if value != -1: - self.mode = -1 - if self.process.is_alive(): - self.effect = value - self.stop() - time.sleep(0.2) - self.start() - else: - self.effect = value - - # * ----------- - # * Area of used Methods for the effects / modes - # * ----------- - - def wheel(self, pos): - if pos < 85: - return Adafruit_WS2801.RGB_to_color(pos * 3, 255 - pos * 3, 0) - elif pos < 170: - pos -= 85 - return Adafruit_WS2801.RGB_to_color(255 - pos * 3, 0, pos * 3) - else: - pos -= 170 - return Adafruit_WS2801.RGB_to_color(0, pos * 3, 255 - pos * 3) - - # col := (r, g, b) - Tupel - def road_map(self, *col): - length = len(col) - part = int(pixels.count() / (len(col) - 1)) - for i in range(0, len(col) - 1): - difR = col[i + 1][0] - col[i][0] - difG = col[i + 1][1] - col[i][1] - difB = col[i + 1][2] - col[i][2] - difR = int(difR / part) - difG = int(difG / part) - difB = int(difB / part) - # r, g, b = pixels.get_pixel_rgb(i) - for j in range(part * i, part * (i + 1)): - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color( - col[i][0] + (j * difR), col[i][1] + (j * difG), col[i][2] + (j * difB))) - pixels.show() - - # * ----------- - # * Process loop - # * ----------- - - def checkQueue(self): - # Reading Queues - if not self.queueColor.empty(): - self.color = self.queueColor.get() - if not self.queueColorList.empty(): - self.colorList = self.queueColorList.get() - if not self.queueTime.empty(): - self.time = self.queueTime.get() - if not self.queueNumber.empty(): - self.number = self.queueNumber.get() - - # new process -> communication with queue - def run(self, queueColor, queueColorList, queueTime, queueNumber): - tmp = 0 - while True: - - # check Queue -> oefters abfragen! - self.checkQueue() - - # * ----------- - # * Effects - # * ----------- - - # 0) led_on - if self.effect == 0: - pixels.set_pixels(self.color) - pixels.show() - - - # 1) Effect - Walking Pixels - if self.effect == 1: - pixels.clear() - pixels.show() - for i in range(pixels.count()): - for j in reversed(range(i, pixels.count())): - pixels.clear() - for k in range(i): - pixels.set_pixel(k, self.color) - time.sleep(self.time) - pixels.set_pixel(j, self.color) - pixels.show() - time.sleep(self.time) - # 2) Effect - Walking Pixels reverse - if self.effect == 2: - pixels.clear() - pixels.show() - for i in range(pixels.count()): - for j in range(i, pixels.count()): - pixels.clear() - for k in range(i): - pixels.set_pixel(k, self.color) - time.sleep(self.time) - pixels.set_pixel(j, self.color) - pixels.show() - time.sleep(self.time) - # 3) Effect - Fill number Pixels - if self.effect == 3: - for i in range(self.number): - pixels.set_pixel(i, self.color) - for i in range(self.number, pixels.count()): - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(0, 0, 0)) - pixels.show() - # 4) Effect - Get empty Pixels - if self.effect == 4: - pixels.set_pixels(self.color) - pixels.show() - tmpTimer = self.timer / pixels.count() - for i in range(pixels.count()): - pixels.set_pixel(i, 0) - pixels.show() - time.sleep(tmpTimer) - # 5) Effect - Countdown Pixels - if self.effect == 5: - pixels.clear() - pixels.show() - tmpTimer = self.timer / pixels.count() - for i in range(pixels.count()): - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(255, 0, 0)) - pixels.show() - time.sleep(tmpTimer) - for i in range(5): - pixels.set_pixels(Adafruit_WS2801.RGB_to_color(0, 0, 0)) - pixels.show() - time.sleep(1) - pixels.set_pixels(Adafruit_WS2801.RGB_to_color(255, 0, 0)) - pixels.show() - time.sleep(1) - break - # 6) Effect - Pulsing Pixels - if self.effect == 6: - stateTmp = 0; - tupelTmp = Adafruit_WS2801.color_to_RGB(self.color) - while True: - if stateTmp == 0: - if tupelTmp[0] < 10 or tupelTmp[1] < 10 or tupelTmp[2] < 10: - stateTmp = 1 - else: - tupelTmp = (tupelTmp[0] - 5, tupelTmp[1] - 5, tupelTmp[2] - 5) - else: - if tupelTmp[0] > 245 or tupelTmp[1] > 245 or tupelTmp[2] > 245: - stateTmp = 0 - else: - tupelTmp = (tupelTmp[0] + 5, tupelTmp[1] + 5, tupelTmp[2] + 5) - pixels.set_pixels(Adafruit_WS2801.RGB_to_color(tupelTmp[0], tupelTmp[1], tupelTmp[2])) - pixels.show() - time.sleep(self.time) - # TODO - # 7) Effect - Dim-off Pixels - if self.effect == 7: - pixels.set_pixels(self.color) - tupelTmp = Adafruit_WS2801.color_to_RGB(self.color) - pixels.show() - tmpTimer = self.timer / pixels.count() - print(tmpTimer) - # step = self.number - step = 10 - for j in range(int(256 // step)): - for i in range(pixels.count()): - (r, g, b) = Adafruit_WS2801.color_to_RGB(pixels.get_pixel(i)) - # rint(str(r) + str(g) + str(b)) - # print(str(pixels.get_pixel_rgb(i))) - r = int(max(0, r - step)) - g = int(max(0, g - step)) - b = int(max(0, b - step)) - # print(str(r) + str(g) + str(b)) - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(r, g, b)) - pixels.show - pixels.show() - time.sleep(tmpTimer) - # 8) Effect - Rainbow Pixels (Static color changing) - if self.effect == 8: - for j in range(256): # one cycle of all 256 colors in the wheel - for i in range(pixels.count()): - pixels.set_pixel(i, self.wheel(((i * 256 // pixels.count()) + j) % 256)) - pixels.show() - if self.time > 0: - time.sleep(self.time) - # 9) Effect - Walking Rainbow Pixels - if self.effect == 9: - pixels.clear() - pixels.show() - for i in range(pixels.count()): - # tricky math! we use each pixel as a fraction of the full 96-color wheel - # (thats the i / strip.numPixels() part) - # Then add in j which makes the colors go around per pixel - # the % 96 is to make the wheel cycle around - pixels.set_pixel(i, self.wheel(((i * 256 // pixels.count())) % 256)) - pixels.show() - if self.time > 0: - time.sleep(self.time) - # 10) Effect - Pulsing Rainbow Pixels - if self.effect == 10: - for j in range(256): # one cycle of all 256 colors in the wheel - for i in range(pixels.count()): - pixels.set_pixel(i, self.wheel(((256 // pixels.count() + j)) % 256)) - pixels.show() - if self.time > 0: - time.sleep(self.time) - # -------------- NO DOKU ----------------- - # 11) Effect - Cyclon Pixels - if self.effect == 11: - for i in range(pixels.count() - self.number - 2): - pixels.set_pixels(0) - pixels.set_pixel(i, self.color) - for j in range(1, self.number + 1): - pixels.set_pixel(i + j, self.color) - pixels.set_pixel(i + self.number + 1, self.color) - pixels.show() - time.sleep(self.time) - time.sleep(self.time) - for i in reversed(range(pixels.count() - self.number - 2)): - pixels.set_pixels(0) - pixels.set_pixel(i, self.color) - for j in range(1, self.number + 1): - pixels.set_pixel(i + j, self.color) - pixels.set_pixel(i + self.number + 1, self.color) - pixels.show() - time.sleep(self.time) - # 12) Effect - Twinkle Pixels - if self.effect == 12: - pixels.set_pixels(0) - for i in range(pixels.count()): - pixels.set_pixel(random.randint(0, pixels.count() - 1), self.color) - pixels.show() - time.sleep(self.time) - # 13) Effect - Twinkle Random Pixels - if self.effect == 13: - pixels.set_pixels(0) - for i in range(pixels.count()): - pixels.set_pixel(random.randint(0, pixels.count() - 1), - Adafruit_WS2801.RGB_to_color(random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255))) - pixels.show() - time.sleep(self.time) - # TODO: Pixel n outside the count of pixels erl? - # 14) Effect - Sparkle Pixels - if self.effect == 14: - pTmp = random.randint(0, pixels.count() - 1) - pixels.set_pixel(pTmp, self.color) - pixels.show() - time.sleep(self.time) - pixels.set_pixel(pTmp, 0) - # TODO: wie in 18 erl? - # 15) Effect - Snow Sparkle Pixels - if self.effect == 15: - pixels.set_pixels(self.color) - pTmp = random.randint(0, pixels.count() - 1) - pixels.set_pixel(pTmp, Adafruit_WS2801.RGB_to_color(0, 0, 0)) - pixels.show() - time.sleep(self.time) - pixels.set_pixel(pTmp, self.color) - time.sleep(self.time) - # 16) Effect - Running Pixels - if self.effect == 16: - posTmp = 0 - tupelTmp = Adafruit_WS2801.color_to_RGB(self.color) - for j in range(pixels.count() * 2): - posTmp = posTmp + 1 - for i in range(pixels.count()): - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color( - (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[0])), - (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[1])), - (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[2])))) - pixels.show() - time.sleep(self.time) - # 17) Effect - Theater chase Pixels - if self.effect == 17: - for j in range(10): - for q in range(3): - for i in range(0, pixels.count() - 3, 3): - pixels.set_pixel(i + q, self.color) - pixels.show() - time.sleep(self.time) - for i in range(0, pixels.count() - 3, 3): - pixels.set_pixel(i + q, 0) - pixels.show() - # TODO: Pixel n outside the count of pixels - # 18) Effect - Center bounce Pixels - if self.effect == 18: - # outside to center - for i in range((pixels.count() - self.number) / 2): - pixels.set_pixels(0) - pixels.set_pixel(i, self.color) - for j in range(1, self.number): - pixels.set_pixel(i + j, self.color) - pixels.set_pixel(i + self.number + 1, self.color) - pixels.set_pixel(pixels.count() - i - 1, self.color) - for j in range(self.number + 1): - pixels.set_pixel(pixels.count() - i - j - 1, self.color) - pixels.set_pixel(pixels.count() - i - self.number - 1, self.color) - - pixels.show() - time.sleep(self.time) - time.sleep(self.time) - # center to outside - for i in reversed(range(0, (pixels.count() - self.number) / 2)): - pixels.set_pixels(0) - pixels.set_pixel(i, self.color) - for j in range(1, self.number + 1): - pixels.set_pixel(i + j, self.color) - pixels.set_pixel(i + self.number + 1, self.color) - pixels.set_pixel(pixels.count() - i - 1, self.color) - for j in range(self.number + 1): - pixels.set_pixel(pixels.count() - i - j - 1, self.color) - pixels.set_pixel(pixels.count() - i - self.number - 1, self.color) - - pixels.show() - time.sleep(self.time) - # 22) Effect - Fire Pixels - if self.effect == 67: - ''' - TODO: - gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::Yellow, CRGB::White); - gPal = CRGBPalette16( CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White); - gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::White); - ''' - for i in range(pixels.count()): - pos = int(pixels.count() / 4) - if i < pos: - for j in range(pos): - pixels.set_pixel(j, 0) - elif i < (pos * 2): - for j in range(pos, pos * 2): - # pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(166, 0, 0)) - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(4, 20, 128)) - elif i < (pos * 3): - for j in range(pos * 2, pos * 3): - # pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(237, 232, 5)) - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(29, 60, 203)) - else: - for j in range(pos * 3, pixels.count()): - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(255, 255, 255)) - pixels.show() - - - cooldownTmp = 0 - # fast flames cool down 55 - cooling = 20 - # chance dass flamme entzuendet 120 - sparking = 120 - # heat = range(0, pixels.count()) - heat = [0] * pixels.count() - - for i in range(pixels.count()): - cooldownTmp = random.randint(0, ((cooling * 10) / pixels.count()) + 2); - if cooldownTmp > heat[i]: - heat[i] = 0 - else: - heat[i] = heat[i] - cooldownTmp - - for k in reversed(range(2, pixels.count() - 1)): - heat[k] = (heat[k-1] + heat[k-2] + heat[k-2]) / 3 - - if random.randint(0, 255) < sparking: - y = random.randint(0, 7) - heat[y] = heat[y] + random.randint(160, 255) - - for j in range(pixels.count()): - t = int(round((heat[j] / 255.0) * 191)) - heatramp = t & 0x3F - heatramp <<= 2 - - if t > 0x80: - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(255, 255, heatramp)) - elif t > 0x40: - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(255, heatramp, 0)) - else: - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(heatramp, 0, 0)) - pixels.show() - time.sleep(self.time) - - # TODO: doesnt work - # 23) Effect - Meteor Pixels - if self.effect == 68: - meteorTrailDecay = 64 - pixels.set_pixels(0) - for i in range(pixels.count() * 2): - for j in range(pixels.count()): - if random.randint(0, 10) > 5: - r, g, b = Adafruit_WS2801.color_to_RGB(pixels.get_pixel(j)) - if r <= 10: - r = 0 - else: - r = r - int((r * meteorTrailDecay / 256)) - if g <= 10: - g = 0 - else: - g = g - int((g * meteorTrailDecay / 256)) - if b <= 10: - b = 0 - else: - b = b - int((b * meteorTrailDecay / 256)) - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(r, g, b)) - for j in range(self.number): - if (i-j < pixels.count()) and (i-j >= 0): - pixels.set_pixel(i - j, self.color) - pixels.show() - time.sleep(self.time) - - # * ----------- - # * Modes - # * ----------- - - # 0) Mode - On Pixels - if self.mode == 0: - pixels.set_pixels(self.color) - pixels.show() - # 1) Mode - Chill Pixels - if self.mode == 1: - self.road_map((178, 15, 174), (23, 197, 210), (37, 41, 88)) - # 2) Mode - Custom Color Theme - if self.mode == 2: - for i in range(len(self.colorList)): - pixels.set_pixel(i, int(self.colorList[i], 16)) - pixels.show() - time.sleep(self.time) - # break - - # self.value = self.value + 1 - # print(self.value) - # time.sleep(self.time) - diff --git a/PixLeZ_Server/Constants.py b/PixLeZ_Server/Constants.py index ba89d4d..8df5bb4 100644 --- a/PixLeZ_Server/Constants.py +++ b/PixLeZ_Server/Constants.py @@ -1,8 +1,7 @@ #!/usr/bin/env python -import RPi.GPIO as GPIO -import Adafruit_WS2801 -import Adafruit_GPIO.SPI as SPI +import adafruit_ws2801 +import board # ! Select your pixel count # 5 * 32 = 160 LEDs @@ -12,4 +11,4 @@ # Hardware SPI SPI_PORT = 0 SPI_DEVICE = 0 -pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO) +pixels = adafruit_ws2801.WS2801(board.SCLK, board.MOSI, PIXEL_COUNT, auto_write=False) diff --git a/PixLeZ_Server/appDebugServer.py b/PixLeZ_Server/appDebugServer.py deleted file mode 100644 index 6e3548c..0000000 --- a/PixLeZ_Server/appDebugServer.py +++ /dev/null @@ -1,86 +0,0 @@ -#!C:/Users/Tobi/AppData/Local/Programs/Python/Python36/python -#!/usr/bin/env python - -from flask import Flask, request -import os -import subprocess -import sys -import time -from multiprocessing import Process - -''' - PixLeZ - Debug Server - -> Without connection to Blink.py - -''' - -app = Flask(__name__) - -# starts the process -@app.route('/start') -def start(): - return 'Process Started' - -# stops the process -@app.route('/stop') -def stop(): - return 'Process Stopped' - -# String color in HEX - Example /set/color/FF00FF -@app.route("/set/color/") -def flask_set_color(color): - return str("Color set to: " + str(color)) - -# time as floating number -@app.route('/set/time/') -def flask_set_time(post_id): - return 'Time set to %f' % post_id - -# timer as floating number -@app.route('/set/timer/') -def flask_set_timer(post_id): - return 'Timer set to %f' % post_id - -# number as integer -@app.route('/set/number/') -def flask_set_number(post_id): - return 'Number set to %d' % post_id - -# mode as integer -@app.route('/select/mode/') -def flask_select_mode(post_id): - return 'Mode %d selected' % post_id - -# effect as integer -@app.route('/select/effect/') -def flask_select_effect(post_id): - return 'Effect %d selected' % post_id - -# returns the status of the attributes -@app.route('/status') -def flask_status(): - status = "color=" + str("0033AA") + ";\ntime=" + str(0.03) + ";\ntimer=" + str(20.2) \ - + ";\nnumber=" + str(10) + ";\nmode=" + str(0) + ";\neffect=" + str(7) \ - + ";\nprocess=" + str(True) - return status - -@app.route('/set/pixels', methods=['POST']) -def flask_set_pixels(): - req_data = request.get_json() - example = req_data['pixels'] - s = '' - for item in example: - if item != '"' and item != '[' and item != ']': - s = s + item - colS = s.split(',') - for item in colS: - print(item) - return '' - -# Starts the application. -# ! Define the port and host -# ! Select your flask server settings -# ! doc: https://flask.palletsprojects.com/en/1.1.x/api/?highlight=run#flask.Flask.run -if __name__ == '__main__': - # app.run(debug=True, port=8080, host="0.0.0.0") - app.run(debug=True, port=5500) diff --git a/PixLeZ_Server/effects/Effects.py b/PixLeZ_Server/effects/Effects.py index 952e4e6..aae4940 100644 --- a/PixLeZ_Server/effects/Effects.py +++ b/PixLeZ_Server/effects/Effects.py @@ -6,76 +6,75 @@ import time from typing import List -import Adafruit_WS2801 - import Blink import Constants pixels = Constants.pixels -def showAll(colorList: List[str]): - for i in range(len(colorList)): - pixels.set_pixel(i, int(colorList[i], 16)) +def showAll(colorTupleList: List[tuple]): + for i in range(len(colorTupleList)): + pixels[i] = colorTupleList[i] pixels.show() -def walkingPixels(colorList: List[str], timespan: float, reverse: bool): - pixels.clear() +def walkingPixels(colorTupleList: List[tuple], timespan: float, reverse: bool): + pixels.fill((0, 0, 0)) pixels.show() - for i in range(pixels.count()): - rangeTmp = range(i, pixels.count()) + for i in range(len(pixels)): + rangeTmp = range(i, len(pixels)) if reverse: rangeTmp = reversed(rangeTmp) for j in rangeTmp: - pixels.clear() + pixels.fill((0, 0, 0)) for k in range(i): - pixels.set_pixel(k, int(colorList[k], 16)) + pixels[k] = colorTupleList[k] time.sleep(timespan) - pixels.set_pixel(j, int(colorList[j], 16)) + pixels[j] = colorTupleList[j] pixels.show() time.sleep(timespan) -def fillNPixels(color: int, number: int): - pixels.clear() - step = pixels.count() / number +def fillNPixels(colorTuple: tuple, number: int): + pixels.fill((0, 0, 0)) + step = len(pixels) / number for i in range(0, number): - pixels.set_pixel(min(int(i * step), pixels.count() - 1), color) + pixels[min(int(i * step), len(pixels) - 1)] = colorTuple pixels.show() -def emptyPixels(colorList: List[str], timer: float): - for i in range(len(colorList)): - pixels.set_pixel(i, int(colorList[i], 16)) +def emptyPixels(colorTupleList: List[tuple], timer: float): + n_pixels = len(pixels) + for i in range(len(colorTupleList)): + pixels[i] = colorTupleList[i] pixels.show() - tmpTimer = timer / pixels.count() - for i in range(pixels.count()): - pixels.set_pixel(i, 0) + tmpTimer = timer / n_pixels + for i in range(n_pixels): + pixels[i] = (0, 0, 0) pixels.show() time.sleep(tmpTimer) def countdown(timer: float): - pixels.clear() + pixels.fill((0, 0, 0)) pixels.show() - tmpTimer = timer / pixels.count() - for i in range(pixels.count()): - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(255, 0, 0)) + tmpTimer = timer / len(pixels) + for i in range(len(pixels)): + pixels[i] = (255, 0, 0) pixels.show() time.sleep(tmpTimer) for i in range(5): - pixels.set_pixels(Adafruit_WS2801.RGB_to_color(0, 0, 0)) + pixels.fill((0, 0, 0)) pixels.show() time.sleep(1) - pixels.set_pixels(Adafruit_WS2801.RGB_to_color(255, 0, 0)) + pixels.fill((255, 0, 0)) pixels.show() time.sleep(1) -def pulsing(color: int, timespan: float): +def pulsing(color: tuple, timespan: float): stateTmp = 0 - tupelTmp = Adafruit_WS2801.color_to_RGB(color) + tupelTmp = color while True: if stateTmp == 0: if tupelTmp[0] < 10 or tupelTmp[1] < 10 or tupelTmp[2] < 10: @@ -87,52 +86,52 @@ def pulsing(color: int, timespan: float): stateTmp = 0 else: tupelTmp = (tupelTmp[0] + 5, tupelTmp[1] + 5, tupelTmp[2] + 5) - pixels.set_pixels(Adafruit_WS2801.RGB_to_color(tupelTmp[0], tupelTmp[1], tupelTmp[2])) + pixels.fill(tupelTmp) pixels.show() time.sleep(timespan) -def dimOff(color: int, timer: float): +def dimOff(color: tuple, timer: float): # TODO - pixels.set_pixels(color) - tupelTmp = Adafruit_WS2801.color_to_RGB(color) + pixels.fill(color) + tupelTmp = color pixels.show() - tmpTimer = timer / pixels.count() + tmpTimer = timer / len(pixels) print(tmpTimer) # step = self.number step = 10 for j in range(int(256 // step)): - for i in range(pixels.count()): - (r, g, b) = Adafruit_WS2801.color_to_RGB(pixels.get_pixel(i)) + for i in range(len(pixels)): + (r, g, b) = (pixels[i]) # rint(str(r) + str(g) + str(b)) # print(str(pixels.get_pixel_rgb(i))) r = int(max(0, r - step)) g = int(max(0, g - step)) b = int(max(0, b - step)) # print(str(r) + str(g) + str(b)) - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(r, g, b)) + pixels[i] = (r, g, b) pixels.show() time.sleep(tmpTimer) def rainbow(blink: Blink, timespan: float): for j in range(256): # one cycle of all 256 colors in the wheel - for i in range(pixels.count()): - pixels.set_pixel(i, blink.wheel(((i * 256 // pixels.count()) + j) % 256)) + for i in range(len(pixels)): + pixels[i] = blink.wheel(((i * 256 // len(pixels)) + j) % 256) pixels.show() if timespan > 0: time.sleep(timespan) def rainbowWalking(blink: Blink, timespan: float): - pixels.clear() + pixels.fill((0, 0, 0)) pixels.show() - for i in range(pixels.count()): + for i in range(len(pixels)): # tricky math! we use each pixel as a fraction of the full 96-color wheel # (thats the i / strip.numPixels() part) # Then add in j which makes the colors go around per pixel # the % 96 is to make the wheel cycle around - pixels.set_pixel(i, blink.wheel((i * 256 // pixels.count()) % 256)) + pixels[i] = blink.wheel((i * 256 // len(pixels)) % 256) pixels.show() if timespan > 0: time.sleep(timespan) @@ -140,130 +139,127 @@ def rainbowWalking(blink: Blink, timespan: float): def rainbowPulsing(blink: Blink, timespan: float): for j in range(256): # one cycle of all 256 colors in the wheel - for i in range(pixels.count()): - pixels.set_pixel(i, blink.wheel((256 // pixels.count() + j) % 256)) + for i in range(len(pixels)): + pixels[i] = blink.wheel((256 // len(pixels) + j) % 256) pixels.show() if timespan > 0: time.sleep(timespan) -def cyclon(colorList: List[str], number: int, timespan: float): - for i in range(pixels.count() - number - 2): - pixels.set_pixels(0) - pixels.set_pixel(i, int(colorList[i], 16)) +def cyclon(colorList: List[tuple], number: int, timespan: float): + for i in range(len(pixels) - number - 2): + pixels.fill((0, 0, 0)) + pixels[i] = colorList[i] for j in range(1, number + 1): - pixels.set_pixel(i + j, int(colorList[i + j], 16)) - pixels.set_pixel(i + number + 1, int(colorList[i + number + 1], 16)) + pixels[i + j] = colorList[i + j] + pixels[i + number + 1] = colorList[i + number + 1] pixels.show() time.sleep(timespan) time.sleep(timespan) - for i in reversed(range(pixels.count() - number - 2)): - pixels.set_pixels(0) - pixels.set_pixel(i, int(colorList[i], 16)) + for i in reversed(range(len(pixels) - number - 2)): + pixels.fill((0, 0, 0)) + pixels[i] = colorList[i] for j in range(1, number + 1): - pixels.set_pixel(i + j, int(colorList[i + j], 16)) - pixels.set_pixel(i + number + 1, int(colorList[i + number + 1], 16)) + pixels[i + j] = colorList[i + j] + pixels[i + number + 1] = colorList[i + number + 1] pixels.show() time.sleep(timespan) -def twinkle(color: int, timespan: float): - pixels.set_pixels(0) - for i in range(pixels.count()): - pixels.set_pixel(random.randint(0, pixels.count() - 1), color) +def twinkle(color: tuple, timespan: float): + pixels.fill((0, 0, 0)) + for i in range(len(pixels)): + pixels[random.randint(0, len(pixels) - 1)] = color pixels.show() time.sleep(timespan) def twinkleRandomColor(timespan: float): - pixels.set_pixels(0) - for i in range(pixels.count()): - pixels.set_pixel(random.randint(0, pixels.count() - 1), - Adafruit_WS2801.RGB_to_color(random.randint(0, 255), + pixels.fill((0, 0, 0)) + for i in range(len(pixels)): + pixels[random.randint(0, len(pixels) - 1)] = (random.randint(0, 255), random.randint(0, 255), - random.randint(0, 255))) + random.randint(0, 255)) pixels.show() time.sleep(timespan) # TODO: Pixel n outside the count of pixels erl? -def sparkle(colorList: List[str], timespan: float): - pTmp = random.randint(0, pixels.count() - 1) - pixels.set_pixel(pTmp, int(colorList[pTmp], 16)) +def sparkle(colorList: List[tuple], timespan: float): + pTmp = random.randint(0, len(pixels) - 1) + pixels[pTmp] = colorList[pTmp] pixels.show() time.sleep(timespan) - pixels.set_pixel(pTmp, 0) + pixels[pTmp] = (0, 0, 0) # TODO: wie in 18 erl? -def sparkleSnow(colorList: List[str], timespan: float): +def sparkleSnow(colorList: List[tuple], timespan: float): for i in range(len(colorList)): - pixels.set_pixel(i, int(colorList[i], 16)) + pixels[i] = colorList[i] pixels.show() - pTmp = random.randint(0, pixels.count() - 1) - pixels.set_pixel(pTmp, Adafruit_WS2801.RGB_to_color(0, 0, 0)) + pTmp = random.randint(0, len(pixels) - 1) + pixels[pTmp] = (0, 0, 0) pixels.show() time.sleep(timespan) - pixels.set_pixel(pTmp, int(colorList[pTmp], 16)) + pixels[pTmp] = colorList[pTmp] time.sleep(timespan) -def running(color: int, timespan: float): +def running(color: tuple, timespan: float): posTmp = 0 - tupelTmp = Adafruit_WS2801.color_to_RGB(color) - for j in range(pixels.count() * 2): + tupelTmp = color + for j in range(len(pixels) * 2): posTmp = posTmp + 1 - for i in range(pixels.count()): - pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color( + for i in range(len(pixels)): + pixels[i] = ( (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[0])), (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[1])), - (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[2])))) + (int(((math.sin(i + posTmp) * 127 + 128) / 255) * tupelTmp[2]))) pixels.show() time.sleep(timespan) -def theaterChase(colorList: List[str], timespan: float): +def theaterChase(colorList: List[tuple], timespan: float): for j in range(10): for q in range(3): - for i in range(0, pixels.count() - 3, 3): - pixels.set_pixel(i + q, int(colorList[i + q], 16)) + for i in range(0, len(pixels) - 3, 3): + pixels[i + q] = colorList[i + q] pixels.show() time.sleep(timespan) - for i in range(0, pixels.count() - 3, 3): - pixels.set_pixel(i + q, 0) + for i in range(0, len(pixels) - 3, 3): + pixels[i + q] = (0, 0, 0) pixels.show() # TODO: Pixel n outside the count of pixels -def centerBounce(colorList: List[str], number: int, timespan: float): +def centerBounce(colorList: List[tuple], number: int, timespan: float): # outside to center - for i in range(int((pixels.count() - number) / 2)): - pixels.set_pixels(0) - pixels.set_pixel(i, int(colorList[i], 16)) + for i in range(int((len(pixels) - number) / 2)): + pixels.fill((0, 0, 0)) + pixels[i] = colorList[i] for j in range(1, number): - pixels.set_pixel(i + j, int(colorList[i + j], 16)) - pixels.set_pixel(i + number + 1, int(colorList[i + number + 1], 16)) - pixels.set_pixel(pixels.count() - i - 1, int(colorList[pixels.count() - i - 1], 16)) + pixels[i + j] = colorList[i + j] + pixels[i + number + 1] = colorList[i + number + 1] + pixels[len(pixels) - i - 1] = colorList[len(pixels) - i - 1] for j in range(number + 1): - pixels.set_pixel(pixels.count() - i - j - 1, int(colorList[pixels.count() - i - j - 1], 16)) - pixels.set_pixel(pixels.count() - i - number - 1, - int(colorList[pixels.count() - i - number - 1], 16)) + pixels[len(pixels) - i - j - 1] = colorList[len(pixels) - i - j - 1] + pixels[len(pixels) - i - number - 1] = colorList[len(pixels) - i - number - 1] pixels.show() time.sleep(timespan) time.sleep(timespan) # center to outside - for i in reversed(range(0, int((pixels.count() - number) / 2))): - pixels.set_pixels(0) - pixels.set_pixel(i, int(colorList[i], 16)) + for i in reversed(range(0, int((len(pixels) - number) / 2))): + pixels.fill((0, 0, 0)) + pixels[i] = colorList[i] for j in range(1, number + 1): - pixels.set_pixel(i + j, int(colorList[i + j], 16)) - pixels.set_pixel(i + number + 1, int(colorList[i + number + 1], 16)) - pixels.set_pixel(pixels.count() - i - 1, int(colorList[pixels.count() - i - 1], 16)) + pixels[i + j] = colorList[i + j] + pixels[i + number + 1] = colorList[i + number + 1] + pixels[len(pixels) - i - 1] = colorList[len(pixels) - i - 1] for j in range(number + 1): - pixels.set_pixel(pixels.count() - i - j - 1, int(colorList[pixels.count() - i - j - 1], 16)) - pixels.set_pixel(pixels.count() - i - number - 1, - int(colorList[pixels.count() - i - number - 1], 16)) + pixels[len(pixels) - i - j - 1] = colorList[len(pixels) - i - j - 1] + pixels[len(pixels) - i - number - 1] = colorList[len(pixels) - i - number - 1] pixels.show() time.sleep(timespan) @@ -276,22 +272,22 @@ def fire(timespan: float): gPal = CRGBPalette16( CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White); gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::White); """ - for i in range(pixels.count()): - pos = int(pixels.count() / 4) + for i in range(len(pixels)): + pos = int(len(pixels) / 4) if i < pos: for j in range(pos): - pixels.set_pixel(j, 0) + pixels[j] = (0, 0, 0) elif i < (pos * 2): for j in range(pos, pos * 2): # pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(166, 0, 0)) - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(4, 20, 128)) + pixels[j] = (4, 20, 128) elif i < (pos * 3): for j in range(pos * 2, pos * 3): # pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(237, 232, 5)) - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(29, 60, 203)) + pixels[j] = (29, 60, 203) else: - for j in range(pos * 3, pixels.count()): - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(255, 255, 255)) + for j in range(pos * 3, len(pixels)): + pixels[j] = (255, 255, 255) pixels.show() cooldownTmp = 0 @@ -299,46 +295,46 @@ def fire(timespan: float): cooling = 20 # chance dass flamme entzuendet 120 sparking = 120 - # heat = range(0, pixels.count()) - heat = [0] * pixels.count() + # heat = range(0, len(pixels)) + heat = [0] * len(pixels) - for i in range(pixels.count()): - cooldownTmp = random.randint(0, ((cooling * 10) / pixels.count()) + 2) + for i in range(len(pixels)): + cooldownTmp = random.randint(0, int(((cooling * 10) / len(pixels)) + 2)) if cooldownTmp > heat[i]: heat[i] = 0 else: heat[i] = heat[i] - cooldownTmp - for k in reversed(range(2, pixels.count() - 1)): + for k in reversed(range(2, len(pixels) - 1)): # TODO: Unexpected type heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3 if random.randint(0, 255) < sparking: y = random.randint(0, 7) heat[y] = heat[y] + random.randint(160, 255) - for j in range(pixels.count()): + for j in range(len(pixels)): t = int(round((heat[j] / 255.0) * 191)) heatramp = t & 0x3F heatramp <<= 2 if t > 0x80: - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(255, 255, heatramp)) + pixels[j] = (255, 255, heatramp) elif t > 0x40: - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(255, heatramp, 0)) + pixels[j] = (255, heatramp, 0) else: - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(heatramp, 0, 0)) + pixels[j] = (heatramp, 0, 0) pixels.show() time.sleep(timespan) # TODO: doesnt work -def meteor(color: int, number: int, timespan: float): +def meteor(color: tuple, number: int, timespan: float): meteorTrailDecay = 64 pixels.set_pixels(0) - for i in range(pixels.count() * 2): - for j in range(pixels.count()): + for i in range(len(pixels) * 2): + for j in range(len(pixels)): if random.randint(0, 10) > 5: - r, g, b = Adafruit_WS2801.color_to_RGB(pixels.get_pixel(j)) + r, g, b = pixels[j] if r <= 10: r = 0 else: @@ -351,9 +347,9 @@ def meteor(color: int, number: int, timespan: float): b = 0 else: b = b - int((b * meteorTrailDecay / 256)) - pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color(r, g, b)) + pixels[j] = (r, g, b) for j in range(number): - if (i - j < pixels.count()) and (i - j >= 0): - pixels.set_pixel(i - j, color) + if (i - j < len(pixels)) and (i - j >= 0): + pixels[i - j] = color pixels.show() time.sleep(timespan) diff --git a/PixLeZ_Server/requirements.txt b/PixLeZ_Server/requirements.txt new file mode 100644 index 0000000..29bab4c --- /dev/null +++ b/PixLeZ_Server/requirements.txt @@ -0,0 +1,2 @@ +Flask~=2.1.0 +adafruit-circuitpython-ws2801~=0.10.9 \ No newline at end of file