# # hello.step.45.py # # receive and display step response # hello.step.45.py serial_port # # Neil Gershenfeld # CBA MIT 10/29/10 # # (c) Massachusetts Institute of Technology 2010 # Permission granted for experimental and personal use; # license for commercial sale available from MIT # from Tkinter import * import serial WINDOW = 900 # window size eps = 0.9 # filter time constant byte1 = 0 byte2 = 0 val1 = 0.5 def read32(): b1 = ord(ser.read()) b2 = ord(ser.read()) b3 = ord(ser.read()) b4 = ord(ser.read()) return 256*256*256*b1 + 256*256*b2 + 256*b3 + b4 def idle(parent,canvas): global eps, byte1, byte2, val1 # # idle routine # ser.flush() # # find framing # while 1: byte2 = byte1 byte1 = ord(ser.read()) if (byte1 == 4): break num = ord(ser.read()) #canvas.itemconfigure("clstxt",text="%d"%num) t1 = read32() #canvas.itemconfigure("11txt",text="%d"%t1) t2 = read32() #canvas.itemconfigure("12txt",text="%d"%t2) t3 = read32() #canvas.itemconfigure("13txt",text="%d"%t3) #canvas.update() if(num > 0): canvas2.itemconfigure("1txt",text="1") if(num > 1): canvas2.itemconfigure("2txt",text="2") # t2 = t2 * t2 * t2 # t3 = t3 * t3 * t3 # s = t2 + t3 if(t1 < 10000 or t2 < 10000): if(t1 > t2): t1 = 1 t2 = 0 if(t2 > t1): t1 = 0 t2 = 1 if(t2 == t1): t1 = 0.5 t2 = 0.5 #val1 = eps * val1 + (1.0 - eps) * t3 / s val1 = eps * val1 + (1.0 - eps) * t2 canvas2.coords("photo",WINDOW*(val1*.8+0.1),WINDOW*0.125) parent.after_idle(idle,parent,canvas) # # check command line arguments # if (len(sys.argv) != 2): print "command line: hello.step.45.py serial_port" sys.exit() port = sys.argv[1] # # open serial port # ser = serial.Serial(port,9600) ser.setDTR() # # set up GUI # root = Tk() root.title('hello.step.45.py (q to exit)') root.bind('q','exit') #canvas = Canvas(root, width=WINDOW, height=.5*WINDOW, background='white') # #canvas.create_text(.1*WINDOW,.1*WINDOW,text="1",font=("Helvetica", 20),tags="clstxt",fill="#0000b0") #canvas.create_text(.1*WINDOW,.2*WINDOW,text="2",font=("Helvetica", 20),tags="11txt",fill="#0000b0") #canvas.create_text(.1*WINDOW,.3*WINDOW,text="2",font=("Helvetica", 20),tags="12txt",fill="#0000b0") #canvas.create_text(.1*WINDOW,.4*WINDOW,text="2",font=("Helvetica", 20),tags="13txt",fill="#0000b0") photo = PhotoImage(file="heart.gif") canvas2 = Canvas(root, width=WINDOW, height=.25*WINDOW, background='white') canvas2.create_image(.5*WINDOW,.125*WINDOW,image=photo,tags="photo"); canvas2.create_text(.1*WINDOW,.125*WINDOW,text="",font=("Helvetica", 30),tags="1txt",fill="#0000b0") canvas2.create_text(.9*WINDOW,.125*WINDOW,text="",font=("Helvetica", 30),tags="2txt",fill="#0000b0") #canvas.pack() canvas2.pack() # # start idle loop # root.after(100,idle,root,canvas2) root.mainloop()