diff --git a/ASYD_Safety/ReadData.py b/ASYD_Safety/ReadData.py new file mode 100644 index 0000000..bd69861 --- /dev/null +++ b/ASYD_Safety/ReadData.py @@ -0,0 +1,189 @@ +# # -*- coding: utf-8 -*- +# """ +# Created on Sat Mar 4 12:59:45 2023 + +# @author: simon +# """ + +# import serial +# import pandas as pd +# import sys +# import time + +# import tkinter as tk +# from multiprocessing import Process, Pipe + +# #window = tk.Tk() + +# def readValues(conn): +# for i in range(10): +# print(i) +# if conn.poll(): +# print(conn.recv()) +# time.sleep(1.5) +# # Read = False +# # while True: +# # if conn.poll(): +# # print(conn.recv()) +# # # if conn.recv() == 'start': +# # # # if not Read: +# # # # serialPort = serial.Serial(port='COM7', baudrate=115200, timeout=3) +# # # # print('received start') +# # # # Read = True +# # # else: +# # # Read = False +# # # serialPort.close() +# # if Read: +# # if serialPort.inWaiting(): +# # print(serialPort.readline().decode('Ascii')) +# # else: +# # time.sleep(0.1) +# # else: +# # print('waiting') +# # time.sleep(1) +# def onClosing(): +# global serialPort +# if tk.messagebox.askokcancel("Quit","Wanna quit?"): +# serialPort.close() +# p.kill() +# # window.destroy() + +# def buttonPressed(button, conn): +# if button == 'start': +# print(button) +# conn.send('start') +# else: +# #Read = False +# conn.send('stop') + +# if __name__ == '__main__': +# print('hi') + +# parent_conn, child_conn = Pipe(duplex=True) +# p = Process(target=readValues, args=(child_conn,)) +# p.start() +# parent_conn.send('start') +# time.sleep(10) +# parent_conn.send('stop') +# p.kill() + +# window.title("Visualize") +# top = tk.Frame(window) +# top.pack(side=tk.TOP) +# buttonStart = tk.Button(window,text='Start', +# bg='black',fg='white', +# command=lambda x='start':buttonPressed(x,parent_conn)); +# buttonStart.pack(padx=10,pady=10, in_=top,side=tk.LEFT) +# buttonStop = tk.Button(window,text='Stop', +# bg='black',fg='white', +# command=lambda x='stop':buttonPressed(x,parent_conn)); +# buttonStop.pack(padx=10,pady=10, in_=top,side=tk.LEFT) +# #f1 = tk.Frame(window, height=1000,width=2000) +# #f1.pack() +# window.protocol("WM_DELETE_WINDOW",onClosing) +# window.mainloop() + + +# #serialPort = serial.Serial(port='COM7',baudrate=115200,timeout=3); +# df = pd.DataFrame(); + + +# #while True: +# # if True #serialPort.inWaiting > 0: +# #serialString = serialPort.readline().decode('Ascii'); +# # if(serialString.startswith('X')): +# # print(serialString); + + + + +from multiprocessing import Process, Pipe, Queue +import time +import serial +import tkinter as tk +import matplotlib.pyplot as plt +from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg +import pandas as pd +import numpy as np + +def f(conn,q): + ongoing = True + reading = False + while ongoing: + if conn.poll(): + rec = conn.recv() + if rec == 'start': + reading = True + serialPort = serial.Serial(port='COM7',baudrate=115200,timeout=1) + if rec == 'stop': + reading = False + serialPort.close() + if rec == 'kill': + serialPort.close() + #print(data) + ongoing=False + if reading: + if serialPort.inWaiting() > 0: + msg = serialPort.readline() + try: + msg = msg.decode("Ascii") + except: + print("failed") + if msg.startswith("X"): + q.put(msg) + time.sleep(0.05) + conn.close() + +def buttonPressed(button, conn,q): + conn.send(button) + if button == 'stop': + data =[] + while not q.empty(): + dString = q.get() + dString = dString.rstrip("\r\n") + tmp = dString.split('\t') + d = {} + for elem in tmp: + tmp1 = elem.split(':') + d[tmp1[0]] = int(tmp1[1]) + data.append(d) + df = pd.DataFrame(data) + df['sqr'] = df.apply(lambda x: + np.sqrt(x['X']**2+x['Y']**2+x['Z']**2),axis=1) + for l in window.pack_slaves(): + if isinstance(l, tk.Canvas): + l.destroy() + figure = plt.Figure(figsize=(10,6),dpi=100) + ax2 = figure.add_subplot(111) + line = FigureCanvasTkAgg(figure,window) + line.get_tk_widget().pack(side=tk.LEFT, fill=tk.BOTH) + df.plot(kind='line',legend=True,ax=ax2) + +def onClosing(): + if tk.messagebox.askokcancel("Quit","Wanna quit?"): + window.destroy() + +if __name__ == '__main__': + parent_conn, child_conn = Pipe(duplex=True) + q = Queue() + p = Process(target=f, args=(child_conn,q,)) + p.start() + window = tk.Tk() + window.title("Visualize") + top = tk.Frame(window) + top.pack(side=tk.TOP) + buttonStart = tk.Button(window,text='Start', + bg='black',fg='white', + command=lambda x='start':buttonPressed(x,parent_conn,q)); + buttonStart.pack(padx=10,pady=10, in_=top,side=tk.LEFT) + buttonStop = tk.Button(window,text='Stop', + bg='black',fg='white', + command=lambda x='stop':buttonPressed(x,parent_conn,q)); + buttonStop.pack(padx=10,pady=10, in_=top,side=tk.LEFT) + + window.protocol("WM_DELETE_WINDOW",onClosing) + window.mainloop() + + parent_conn.send('kill') + p.join() +