Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Commit

Permalink
Start working on data parser in python
Browse files Browse the repository at this point in the history
  • Loading branch information
ijager committed Nov 1, 2019
1 parent 54d6184 commit 03142df
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 13 deletions.
39 changes: 39 additions & 0 deletions app/parse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from PySide2 import Qt, QtCore

START = 'Start Encoder'
END = 'End'

class SerialParser(QtCore.QObject):


newDataSet = QtCore.Signal(list, list)

def __init__(self):
super(SerialParser, self).__init__()
self.started = False
self.timestamps = []
self.positions = []

@QtCore.Slot(str)
def parse_line(self, line: str):

if line.startswith(END):
self.started = False
self.newDataSet.emit(self.timestamps, self.positions)

if line.startswith(START):
encoder = int(line[len(START):])
self.started = True
self.timestamps = []
self.positions = []
return

if self.started:
res = line.split(":")
self.timestamps.append(int(res[0]))
self.positions.append(-1*int(res[1]))





14 changes: 7 additions & 7 deletions app/serialmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ def __init__(self):
self._reader_alive = None
self.receiver_thread = None

self.rx_decoder = codecs.getincrementaldecoder('UTF-8')('replace')
# self.rx_decoder = codecs.getincrementaldecoder('UTF-8')('replace')
self.rx_decoder = codecs.getdecoder('UTF-8') #('replace')


# portsString = ''.join([p.device + '\n' for p in self.availablePorts])
Expand Down Expand Up @@ -90,14 +91,13 @@ def reader(self):
try:
while self._reader_alive:
# read all that is there or wait for one byte
data = self.serial.read(self.serial.in_waiting or 1)
# data = self.serial.read(self.serial.in_waiting or 1)
data = self.serial.readline()
if data:
text = self.rx_decoder.decode(data)
# for transformation in self.rx_transformations:
# text = transformation.rx(text)
print(text)
# text = self.rx_decoder.decode(data)
text, length = self.rx_decoder(data[:-1]) # get rid of newline
# text = ''.join([chr(c) for c in data])
self.textStream.emit(text)
# self.console.write(text)

except serial.SerialException:
self.alive = False
Expand Down
16 changes: 11 additions & 5 deletions app/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from matplotlib.figure import Figure

from serialmanager import SerialManager
from parse import SerialParser

class FilePicker(QtWidgets.QWidget):

Expand Down Expand Up @@ -37,7 +38,7 @@ def __init__(self):
self.layout = QtWidgets.QVBoxLayout(self)
self.plot = MatplotlibWidget()
self.layout.addWidget(self.plot)
self.plot.update_plot(range(5))
# self.plot.update_plot(range(5))

self.forceResult = QtWidgets.QLabel('3.5 N')
self.accelResult = QtWidgets.QLabel('20 mm/s^2')
Expand All @@ -62,6 +63,7 @@ def __init__(self, parent=None):


self.output = QtWidgets.QTextEdit()
self.output.setReadOnly(True)
self.input = QtWidgets.QLineEdit()

self.layout = QtWidgets.QVBoxLayout(self)
Expand Down Expand Up @@ -103,11 +105,11 @@ def __init__(self, parent=None):
self.line, *_ = self.ax.plot([])

# @Slot(list)
def update_plot(self, data):
self.line.set_data(range(len(data)), data)
def update_plot(self, t, y):
self.line.set_data(t, y)

self.ax.set_xlim(0, len(data))
self.ax.set_ylim(min(data), max(data))
self.ax.set_xlim(0, len(y))
self.ax.set_ylim(min(y), max(y))
self.canvas.draw()

class MainView(QtWidgets.QWidget):
Expand All @@ -121,6 +123,8 @@ def __init__(self, toolbar):
# portsString = ''.join([p.device + '\n' for p in availablePorts])


self.parser = SerialParser()


self.toolbar = toolbar

Expand All @@ -132,6 +136,7 @@ def __init__(self, toolbar):


self.serialManager = SerialManager()
self.serialManager.textStream.connect(self.parser.parse_line)

# self.serialManager.newCOMPorts.connect(self.updateCOMPorts)
# self.serialManager.refresh()
Expand Down Expand Up @@ -160,6 +165,7 @@ def __init__(self, toolbar):
self.left = ResultView()
self.right = TextOutputView()

self.parser.newDataSet.connect(self.left.plot.update_plot)
self.serialManager.textStream.connect(self.right.addText)

self.layout.addWidget(self.left)
Expand Down
3 changes: 2 additions & 1 deletion firmware/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,12 +340,13 @@ fn main() -> ! {
if let Some(ref mut encoder) = ENCODER1.borrow(cs).borrow_mut().deref_mut() {
if encoder.ready() {
let data = encoder.get();
writeln!(tx, "Encoder 1").unwrap();
writeln!(tx, "Start Encoder 1").unwrap();
for x in data {
unsafe {
writeln!(tx, "{}: {}", x.time, x.pos).unwrap();
}
}
writeln!(tx, "End").unwrap();
encoder.reset();

}
Expand Down

0 comments on commit 03142df

Please sign in to comment.