You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.6 KiB
189 lines
5.6 KiB
# # -*- 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()
|
|
|
|
|