changeset 1245:8480fb25239d

host side api for the arduino board Ignore-this: 99dc5437446e4e610215a28237687b37
author Drew Perttula <drewp@bigasterisk.com>
date Sat, 13 Jun 2015 04:13:38 +0000
parents 5ef8d7c3820c
children 41f0fc1d51c7
files light9/effecteval/effectloop.py
diffstat 1 files changed, 36 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/light9/effecteval/effectloop.py	Sat Jun 13 01:29:23 2015 +0000
+++ b/light9/effecteval/effectloop.py	Sat Jun 13 04:13:38 2015 +0000
@@ -174,13 +174,45 @@
 
 Z = numpy.zeros((50, 3), dtype=numpy.uint8)
 
+class ControlBoard(object):
+    def __init__(self, dev='/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A7027NYX-if00-port0'):
+        self.board = serial.Serial(dev, baudrate=115200)
+
+    def _8bitMessage(self, floatArray):
+        px255 = (numpy.clip(floatArray, 0, 1) * 255).astype(numpy.uint8)
+        return px255.reshape((-1,)).tostring()
+        
+    def setStrip(self, which, pixels):
+        """
+        which: 0 or 1 to pick the strip
+        pixels: (50, 3) array of 0..1 floats
+        """
+        command = {0: '\x00', 1: '\x01'}[which]
+        if pixels.shape != (50, 3):
+            raise ValueError("pixels was %s" % pixels.shape)
+        self.board.write('\x60' + command + self._8bitMessage(pixels))
+
+    def setUv(self, which, level):
+        """
+        which: 0 or 1
+        level: 0 to 1
+        """
+        command = {0: '\x02', 1: '\x03'}[which]
+        self.board.write('\x60' + command + chr(max(0, min(1, level)) * 255))
+
+    def setRgb(self, color):
+        """
+        color: (1, 3) array of 0..1 floats
+        """
+        if color.shape != (1, 3):
+            raise ValueError("color was %s" % color.shape)
+        self.board.write('\x60\x04%s' + self._8bitMessage(color))
+
+        
 class LedLoop(EffectLoop):
     def initOutput(self):
         kw = dict(baudrate=115200)
-        self.boards = {
-            'L': serial.Serial('/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A7027JI6-if00-port0', **kw),
-            'R': serial.Serial('/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A7027NYX-if00-port0', **kw),
-        }
+        self.boards = serial.Serial('/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A7027NYX-if00-port0', **kw)
         self.lastSentBacklight = None
         
     def combineOutputs(self, outputs):