
        
import serial
import matplotlib.pyplot as plt
from drawnow import *
import atexit

values = []

plt.ioff()
cnt=0

serialArduino = serial.Serial('com6', 115200)
serialArduino.setDTR(False)
def plotValues():
    plt.title('Serial value from Arduino')
    plt.grid(True)
    plt.ylabel('Values')
    plt.ylim(100,255)
    plt.plot(values,linewidth=1.0, marker='.',markersize=1,linestyle="-",color="blue")
    plt.legend(loc='upper right')

def doAtExit():
    serialArduino.close()
    print("Close serial")
    print("serialArduino.isOpen() = " + str(serialArduino.isOpen()))

atexit.register(doAtExit)

print("serialArduino.isOpen() = " + str(serialArduino.isOpen()))

#pre-load dummy data
for i in range(0,126):
    values.append(0)
    
while True:
    while (serialArduino.inWaiting()==0):
        pass
   # print("readline()")
    valueRead = serialArduino.readline(800)

    #check if valid value can be casted
    try:
        valueInInt = int(valueRead)
        print(valueInInt)
        if valueInInt <= 1024:
            if valueInInt >= 0:
                values.append(valueInInt)
                values.pop(0)
                drawnow(plotValues)
            else:
                print("Invalid! negative number")
        else:
            print("Invalid! too large")
    except ValueError:
        print("Invalid! cannot cast")
