# # hello.light.45.py # # receive and display light level # # Neil Gershenfeld # CBA MIT 10/24/07 # # (c) Massachusetts Institute of Technology 2007 # Permission granted for experimental and personal use; # license for commercial sale available from MIT # from Tkinter import * import serial WINDOW = 600 eps = 0.1 saveflag = 0 filter = 0.0 def idle(parent,canvas): global saveflag, filter, eps # # idle routine # byte2 = 0 byte3 = 0 byte4 = 0 ser.flush() while 1: # # find framing # byte1 = byte2 byte2 = byte3 byte3 = byte4 byte4 = ord(ser.read()) if ((byte1 == 1) & (byte2 == 2) & (byte3 == 3) & (byte4 == 4)): break low = ord(ser.read()) high = ord(ser.read()) value = 150*high + low filter = (1-eps)*filter + eps*value x = int(.01*WINDOW + (.99-.01)*WINDOW*filter/1024.0) o = int(WINDOW-x) u = int(x*.2) z = int(x*.7) b = int(WINDOW-z) canvas.itemconfigure("text",text="%.1f"%filter) #canvas.coords('rect1',.01*WINDOW,.01*WINDOW,x,.99*WINDOW) #canvas.coords('rect2',x,.01*WINDOW,.99*WINDOW,.99*WINDOW) canvas.coords('rect1',.01*WINDOW,x,.99*WINDOW,.99*WINDOW) canvas.coords('rect2',.01*WINDOW,.01*WINDOW,.99*WINDOW,x) #canvas.coords('oval1',x, x, o, o) canvas.coords('oval3',z, z, b, b) canvas.coords('oval2',x+u,x+u,o-u,o-u) #canvas.coords('oval1',.1*WINDOW,.1*WINDOW,.9*WINDOW,.9*WINDOW) canvas.update() parent.after_idle(idle,parent,canvas) # # open serial port # ser = serial.Serial('/dev/ttyUSB0',9600) ser.setDTR() # # set up GUI # root = Tk() root.title('LIGHT SENSOR') root.bind('q','exit') canvas = Canvas(root, width=WINDOW, height=WINDOW, background='black') #canvas.create_text(.1*WINDOW,.125*WINDOW,text=".33",font=("Helvetica", 24),tags="text",fill="#ff0000") canvas.create_rectangle(.2*WINDOW,.05*WINDOW,.3*WINDOW,.2*WINDOW, tags='rect1', fill='#CCFF00') canvas.create_rectangle(.3*WINDOW,.05*WINDOW,.9*WINDOW,.2*WINDOW, tags='rect2', fill='#ff0000') #canvas.create_oval(.5*WINDOW,.5*WINDOW,.5*WINDOW,.5*WINDOW, tags='oval1', fill='#ff9600') canvas.create_oval(.5*WINDOW,.5*WINDOW,.5*WINDOW,.5*WINDOW, tags='oval3', fill='#ff9600') canvas.create_oval(.5*WINDOW,.5*WINDOW,.5*WINDOW,.5*WINDOW, tags='oval2', fill='#9728ff') canvas.pack() # # start idle loop # root.after(100,idle,root,canvas) root.mainloop()