parent
467506e5ce
commit
d4e63b8d2a
@ -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() |
||||||
|
|
||||||
Loading…
Reference in new issue