#! /usr/bin/env python from serial import serialposix as ser import time import math serport = ser.Serial ( port='/dev/ttyACM0', baudrate=115200 ) time.sleep ( 1 ) # wait for the Arduino bootloader to quit pix_buffer = [0. for i in range ( 64 )] def linear ( val ): return max ( 0, min ( 127, int ( 127 * val**2 ) ) ) def picfunc ( pix, t ): pix_buffer[pix] += ( 0.6 * ( 1 & ( int ( time.time ( ) ) >> (63 - pix) ) ) - pix_buffer[pix] ) / 20 return linear ( pix_buffer[pix] ) t = 0.0 try: while True: time.sleep ( 0.01 ) t += 0.01 serport.write ( chr ( 255 ) + ''.join ( map ( chr, [picfunc ( x, t ) for x in range ( 64 )] ) ) ) except KeyboardInterrupt: serport.write ( chr ( 255 ) + ''.join ( map ( chr, [0 for x in range ( 64 )] ) ) ) serport.close ( )