#!/usr/bin/env python import sys, os import array import usb import colorsys import time import math busses = usb.busses() VENDOR = 0x03eb PRODUCT = 0x2300 IFACE = 0 EP_IN = 0x81 EP_OUT = 0x02 deltah = 0.0003 T = 0.00 PWMperADC = 100 BAR = 80 tstart = time.time() def get_device(): for bus in busses: devices = bus.devices for dev in devices: if dev.idVendor == VENDOR and dev.idProduct == PRODUCT: return dev return None vmax = 1 vmin = 2**16 vavg=0.0 vms=0.0 m=.02 # mixing factor for filter vavg=0.0 initialized=False vol=0 def adc(v): global vmax, vmin, m, vavg, vms, initialized, vol vol=v if vol > vmax: vmax = vol if vol < vmin: vmin = vol if vmax <= vmin: vmin -= 1 t = time.time() - tstart hz = usbiocnt / t # vol=int(255*(vol - vmin) / (vmax - vmin) ) o = '% 4d Hz ' % hz o+= '% 4d ' % vol o += '#' * int( BAR * (vol - vmin) / (vmax - vmin) ) print o usbiocnt = 0L def usbio(dh): global usbiocnt, vol usbiocnt += 1 dout = array.array('B', [0]*4) dout[0] = 0xFF & 0x00 dout[1] = 0xFF & (vol) # red dout[2] = 0xFF & (vol) # green dout[3] = 0xFF & (vol) # blue dh.bulkWrite(EP_OUT, dout.tostring()) #if usbiocnt % PWMperADC == 0: if 1: din = dh.bulkRead(EP_IN, 4) # read a packet l = len(din) if l != 4: print "unexpected bulk read length: %d" % l else: if usbiocnt % PWMperADC == 0: value=(din[0]<<24)+ (din[1]<<16)+ (din[2] << 8) + din[3] adc(value) def intcol(v): v = int(v*256) if v > 255: v = 255 if v < 0: v = 0 return v def micservo(dh): global vol while 1: usbio(dh) time.sleep(T) def main(): dev = get_device() dh = dev.open() dh.claimInterface(IFACE) micservo(dh) dh.releaseInterface() del dh return 0 if __name__ == '__main__': sys.exit( main() )