add python script to read and plot 3-axis acceleration

devel_freefall
Simon Frei 3 years ago
parent 467506e5ce
commit d4e63b8d2a
  1. 189
      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()
Loading…
Cancel
Save