#
# hello.light.45.py
#
# receive and display light level
# hello.light.45.py serial_port
#
# GREGOIRE DURRENS
# 04/22/2016
#
#based on 
#
# Neil Gershenfeld
# CBA MIT 10/24/09
#
# (c) Massachusetts Institute of Technology 2009
# Permission granted for experimental and personal use;
# license for commercial sale available from MIT
#

from Tkinter import *
import serial

WINDOW = 600 # window size
eps = 0.2 # filter time constant
filter_x = 0.0 # filtered value
filter_y = 0.0 # filtered value

def idle(parent,canvas):
   global filter_x, filter_y, 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
   coord_x_low = ord(ser.read())
   coord_x_high = ord(ser.read())
   coord_y_low = ord(ser.read())
   coord_y_high = ord(ser.read())
   coord_x = 256*coord_x_high + coord_x_low
   coord_y = 256*coord_y_high + coord_y_low
   filter_x = (1-eps)*filter_x + eps*coord_x   
   filter_y = (1-eps)*filter_y + eps*coord_y   
   x = int(WINDOW*filter_x/1024.0)
   y = int(WINDOW*filter_y/1024.0)
#   canvas.itemconfigure("text",text="%.1f"%filter_x)
   canvas.coords('oval',x-WINDOW/40,y+WINDOW/40,x+WINDOW/40,y-WINDOW/40)
   canvas.update()
   parent.after_idle(idle,parent,canvas)

#
#  check command line arguments
#
if (len(sys.argv) != 2):
   print "command line: SolarTracker.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('Solartracker.py (q to exit)')
root.bind('q','exit')
canvas = Canvas(root, width=WINDOW, height=WINDOW, background='white')
#canvas.create_text(.5*WINDOW,.5*WINDOW,text=".33",font=("Helvetica", 24),tags="text",fill="#0000b0")
canvas.create_oval( 0.5*WINDOW-WINDOW/40 , 0.5*WINDOW+WINDOW/40 , 0.5*WINDOW+WINDOW/40 , 0.5*WINDOW-WINDOW/40, tags='oval', fill='#b00000')
canvas.pack()
#
# start idle loop
#
root.after(100,idle,root,canvas)
root.mainloop()
