#
# hello.VEML6040.py
#
# VEML6040 color sensor hello-world
#    hello.VEML6040.py serial_port
#
# Neil Gershenfeld 11/22/20
#
# This work may be reproduced, modified, distributed,
# performed, and displayed for any purpose, but must
# acknowledge this project. Copyright is retained and
# must be preserved. The work is provided as is; no
# warranty is provided, and users accept all liability.
#

from tkinter import *
import serial

WINDOW = 600 # window size

def idle(parent,canvas):
   red = green = blue = white = 0
   #
   # read
   #
   ser.flush()
   while (1):
      reading = ser.readline()
      if (reading[0:6] == b'  Red:'): break
   red = int(reading[7:-2])
   reading = ser.readline()
   green = int(reading[7:-2])
   reading = ser.readline()
   blue = int(reading[7:-2])
   reading = ser.readline()
   white = int(reading[7:-2])
   #
   # plot
   #
   sum = red+green+blue
   canvas.itemconfigure("red",text="red: %d"%red)
   x = int(.3*WINDOW + (.9-.3)*WINDOW*(red/sum))
   canvas.coords('red1',.3*WINDOW,.05*WINDOW,x,.2*WINDOW)
   canvas.coords('red2',x,.05*WINDOW,.9*WINDOW,.2*WINDOW)
   canvas.itemconfigure("green",text="green: %d"%green)
   x = int(.3*WINDOW + (.9-.3)*WINDOW*(green/sum))
   canvas.coords('green1',.3*WINDOW,.25*WINDOW,x,.4*WINDOW)
   canvas.coords('green2',x,.25*WINDOW,.9*WINDOW,.4*WINDOW)
   canvas.itemconfigure("blue",text="blue: %d"%blue)
   x = int(.3*WINDOW + (.9-.3)*WINDOW*(blue/sum))
   canvas.coords('blue1',.3*WINDOW,.45*WINDOW,x,.6*WINDOW)
   canvas.coords('blue2',x,.45*WINDOW,.9*WINDOW,.6*WINDOW)
   canvas.itemconfigure("white",text="white: %d"%white)
   x = int(.3*WINDOW + (.9-.3)*WINDOW*(white/5000))
   canvas.coords('white1',.3*WINDOW,.65*WINDOW,x,.8*WINDOW)
   canvas.coords('white2',x,.65*WINDOW,.9*WINDOW,.8*WINDOW)
   #
   # update
   #
   canvas.update()
   parent.after_idle(idle,parent,canvas)

#
#  check command line arguments
#
if (len(sys.argv) != 2):
   print("command line: hello.LSM6DS33.py serial_port")
   sys.exit()
port = sys.argv[1]
#
# open serial port
#
ser = serial.Serial(port,115200)
ser.setDTR()
#
# set up GUI
#
root = Tk()
root.title('hello.VEML6040.py (q to exit)')
root.bind('q','exit')
canvas = Canvas(root, width=WINDOW, height=.85*WINDOW, background='white')
#
canvas.create_text(.025*WINDOW,.15*WINDOW,text="1",font=("Helvetica", 22),tags="red",fill="#000000",anchor=SW)
canvas.create_rectangle(.3*WINDOW,.05*WINDOW,.4*WINDOW,.2*WINDOW, tags='red1', fill='#b00000')
canvas.create_rectangle(.4*WINDOW,.05*WINDOW,.9*WINDOW,.2*WINDOW, tags='red2', fill='#000000')
#
canvas.create_text(.025*WINDOW,.35*WINDOW,text="1",font=("Helvetica", 22),tags="green",fill="#000000",anchor=SW)
canvas.create_rectangle(.3*WINDOW,.25*WINDOW,.4*WINDOW,.4*WINDOW, tags='green1', fill='#00b000')
canvas.create_rectangle(.4*WINDOW,.25*WINDOW,.9*WINDOW,.4*WINDOW, tags='green2', fill='#000000')
#
canvas.create_text(.025*WINDOW,.55*WINDOW,text="1",font=("Helvetica", 22),tags="blue",fill="#000000",anchor=SW)
canvas.create_rectangle(.3*WINDOW,.45*WINDOW,.4*WINDOW,.6*WINDOW, tags='blue1', fill='#0000b0')
canvas.create_rectangle(.4*WINDOW,.45*WINDOW,.9*WINDOW,.6*WINDOW, tags='blue2', fill='#000000')
#
canvas.create_text(.025*WINDOW,.75*WINDOW,text="1",font=("Helvetica", 22),tags="white",fill="#000000",anchor=SW)
canvas.create_rectangle(.3*WINDOW,.65*WINDOW,.4*WINDOW,.8*WINDOW, tags='white1', fill='#ffffff')
canvas.create_rectangle(.4*WINDOW,.65*WINDOW,.9*WINDOW,.8*WINDOW, tags='white2', fill='#000000')
#
canvas.pack()
#
# start idle loop
#
root.after(100,idle,root,canvas)
root.mainloop()
