From e2df6a69ef9d23aa25610600499ff3387b5c9903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Sun, 10 May 2015 03:39:20 +0200 Subject: [PATCH] Initial tries to support different screen configurations. --- .../processing/FadingStrip/FadingStrip.pyde | 39 ++++---- .../processing/FadingStrip/data_generator.py | 97 +++++++++++++++---- v2/backend/processing/FadingStrip/network.py | 4 +- 3 files changed, 102 insertions(+), 38 deletions(-) diff --git a/v2/backend/processing/FadingStrip/FadingStrip.pyde b/v2/backend/processing/FadingStrip/FadingStrip.pyde index 09be3de..bbdd430 100644 --- a/v2/backend/processing/FadingStrip/FadingStrip.pyde +++ b/v2/backend/processing/FadingStrip/FadingStrip.pyde @@ -4,10 +4,10 @@ from prepare import prepare import random # Config, will be checked upstream -height = 25 -width = 15 -framerate = 10 -brightness = 0.5 +height = 15 +width = 25 +framerate = 30 +brightness = 1 ##################################### #receiver_IP = "10.2.113.151" #receiver_IP = "10.24.147.20" @@ -15,7 +15,9 @@ receiver_IP = "dummy" receiver_port = 9999 # Do we have one single long line? -long_line = True +long_line = False +# Type of installation (see details in data_generator) +type = 2 # TODO: test with real serial # https://www.pjrc.com/teensy/td_uart.html @@ -38,25 +40,24 @@ def setup(): cur_color = color(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) ledTCP, data = prepare(Client, receiver_IP, receiver_port, height, width, framerate, brightness) - send_TCP(ledTCP, data, long_line) + send_TCP(ledTCP, data, long_line, type) def draw(): global cur_len global current_px global cur_color global len_change - if cur_len == 0: - pixels[current_px] = cur_color - else: - px = current_px - for i in range(cur_len): - if px == 0: - prec_col = pixels[len(pixels) - 1] - else: - prec_col = pixels[px - 1] - col = color(red(prec_col) / 1.1, green(prec_col) / 1.1, blue(prec_col) / 1.1) - pixels[px] = col - px -=1 + pixels[current_px] = cur_color + px = current_px - 1 + for i in range(cur_len + 1): + if px == 0: + col = pixels[len(pixels) -1] + else: + col = pixels[px] + if i == cur_len: + col = color(red(col) * 0.9, green(col) * 0.9, blue(col) * 0.9) + pixels[px] = col + px -=1 updatePixels() if cur_len == len_change: @@ -69,4 +70,4 @@ def draw(): current_px = 0 else: current_px += 1 - send_TCP(ledTCP, data, long_line) + send_TCP(ledTCP, data, long_line, type) diff --git a/v2/backend/processing/FadingStrip/data_generator.py b/v2/backend/processing/FadingStrip/data_generator.py index 91b82fe..e785354 100644 --- a/v2/backend/processing/FadingStrip/data_generator.py +++ b/v2/backend/processing/FadingStrip/data_generator.py @@ -47,25 +47,88 @@ def prepare_data(dimension, b): data = jarray.zeros(dimension * 24 + 1, "b") return data -def image2data(data, long_line): +''' +Possibilities: + Start: Top left / Top Right / Bottom Left / Bottom Right + Direction: Up / Down / Right / Left +''' + + +def make_line(type, nb, long_line): + ''' + If moving up or down: 0 <= nb <= height + If moving right or left: 0 <= nb <= width + ''' + indexes = [] + if type == 0: + # top left -> down / OK + pxstart = nb + for h in range(height): + indexes.append(pxstart + width * h) + elif type == 1: + # top left -> right / OK + pxstart = nb * width + for w in range((width)): + indexes.append(pxstart + w) + elif type == 2: + # bottom left -> up / OK + pxstart = width * (height - 1) + nb + for h in range(height): + indexes.append(pxstart - width * h) + elif type == 3: + # bottom left -> right / OK + pxstart = width * (height - 1) - nb * width + for w in range((width)): + indexes.append(pxstart + w) + elif type == 4: + # top right -> down / OK + pxstart = width - 1 - nb + for h in range(height): + indexes.append(pxstart + width * h) + elif type == 5: + # top right -> left / OK + pxstart = width - 1 + nb * width + for w in range((width)): + indexes.append(pxstart - w) + elif type == 6: + # bottom right -> up / OK + pxstart = width * height - 1 - nb * height + for h in range(height): + indexes.append(pxstart - width * h) + elif type == 7: + # bottom right -> left / OK + pxstart = width * height - 1 - nb * width + for w in range((width)): + indexes.append(pxstart - w) + else: + raise Exception("Invalid Type") + if long_line and nb % 2 == 1: + return reversed([pixels[px] for px in indexes]) + return [pixels[px] for px in indexes] + + +def image2data(data, type, long_line): offset = 0 - pixel_nb = 0 loadPixels() - for x in range(0, height): - pixel_line = pixels[pixel_nb:pixel_nb+width] - if long_line and pixel_nb/width%2 == 1: - pixel_line = reversed(pixel_line) - for px in pixel_line: - py_bytes = _encode_pixel(px) - for b in py_bytes: - if b > 127: - # Convert to signed bytes (expected by jarray) - b -= 256 - data[offset] = b - else: - data[offset] = b - offset += 1 - pixel_nb +=1 + inline_image = [] + if type in [0, 2, 4, 6]: + # Organized up or down + for x in range(0, width): + inline_image += make_line(type, x, long_line) + elif type in [1, 3, 5, 7]: + # Organized left or right + for x in range(0, height): + inline_image += make_line(type, x, long_line) + for img_px in inline_image: + py_bytes = _encode_pixel(img_px) + for b in py_bytes: + if b > 127: + # Convert to signed bytes (expected by jarray) + b -= 256 + data[offset] = b + else: + data[offset] = b + offset += 1 # New line data[-1] = 10 return data diff --git a/v2/backend/processing/FadingStrip/network.py b/v2/backend/processing/FadingStrip/network.py index c9a9acf..c271e3a 100644 --- a/v2/backend/processing/FadingStrip/network.py +++ b/v2/backend/processing/FadingStrip/network.py @@ -28,9 +28,9 @@ def send_config(socket, height, width, framerate): socket.write(struct.pack('