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