From d30db8879f48a2e7d9dee40c131755a035cfabfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Sun, 10 May 2015 17:33:58 +0200 Subject: [PATCH] Update pixelcontrol with most recent datagen --- .../PixelControl_TCP/PixelControl_TCP.pyde | 16 +-- .../PixelControl_TCP/data_generator.py | 98 +++++++++++++++---- .../processing/PixelControl_TCP/network.py | 7 +- .../processing/PixelControl_TCP/prepare.py | 6 +- 4 files changed, 101 insertions(+), 26 deletions(-) diff --git a/v2/backend/processing/PixelControl_TCP/PixelControl_TCP.pyde b/v2/backend/processing/PixelControl_TCP/PixelControl_TCP.pyde index 8f6198c..110cd4d 100644 --- a/v2/backend/processing/PixelControl_TCP/PixelControl_TCP.pyde +++ b/v2/backend/processing/PixelControl_TCP/PixelControl_TCP.pyde @@ -4,15 +4,19 @@ from prepare import prepare # Config, will be checked upstream height = 25 -width = 20 -framerate = 40 -brightness = 0.1 +width = 15 +framerate = 10 +brightness = 0.4 ##################################### -receiver_IP = "127.0.0.1" +#receiver_IP = "10.2.113.151" +receiver_IP = "10.24.146.53" +#receiver_IP = "127.0.0.1" receiver_port = 9999 # Do we have one single long line? long_line = True +# Type of installation (see details in data_generator) +type = 2 # TODO: test with real serial # https://www.pjrc.com/teensy/td_uart.html @@ -26,7 +30,7 @@ def setup(): global data ledTCP, data = prepare(Client, receiver_IP, receiver_port, height, width, framerate, brightness) background(0) - send_TCP(ledTCP, data, long_line) + send_TCP(ledTCP, data, long_line, type) def draw(): global current_px @@ -40,4 +44,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/PixelControl_TCP/data_generator.py b/v2/backend/processing/PixelControl_TCP/data_generator.py index 91b82fe..6ffb03f 100644 --- a/v2/backend/processing/PixelControl_TCP/data_generator.py +++ b/v2/backend/processing/PixelControl_TCP/data_generator.py @@ -47,25 +47,89 @@ 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/PixelControl_TCP/network.py b/v2/backend/processing/PixelControl_TCP/network.py index 0199949..c271e3a 100644 --- a/v2/backend/processing/PixelControl_TCP/network.py +++ b/v2/backend/processing/PixelControl_TCP/network.py @@ -28,6 +28,9 @@ def send_config(socket, height, width, framerate): socket.write(struct.pack('