Commit 2bd76084f8bb6fbe9baf31161f6e56ea4609d890

Authored by Christopher Stone
1 parent d9d09665
Exists in master

Minor adjustments, cleaning up, and changes to the error-handling system in the …

…wake of the latest live-plot demo work
robots/little_john/telemetry/code/monitor/version1/main.py
... ... @@ -40,32 +40,46 @@ else:
40 40 os='Other'
41 41 logging.info('OS = ' + os)
42 42  
43   -testseries = Series(points=150, ylimits=(0, 1024), title="Data from serial", xname="Time (s)", yname="ADC output")
  43 +
  44 +testseries = Series(points=150, xauto=True, ylimits=(0, 1024),
  45 + title="Data from serial (time)", xname="Time (s)", yname="ADC output")
  46 +testseries2 = Series(points=150, xlimits=(0, 1024), ylimits=(0, 1024),
  47 + title="Data from serial (xy)", xname="ADC0 output", yname="ADC7 output")
  48 +
44 49 plots = []
45 50 plots.append(Plot(testseries))
  51 +plots.append(Plot(testseries2))
  52 +
46 53  
47 54 def pollSerial(elapsed):
48 55 """Check serial port for incoming data"""
49 56 # Note: 'elapsed' is time since last call of this function
50 57 # This works, but it might be better for performance to have two seperate functions, only one of which is run.
51 58 try:
  59 + incoming = datafeed.readline()
  60 + except:
  61 + logging.error("Failed to read input data")
  62 +
  63 + try:
52 64 if os=='Windows':
53   - values = datafeed.readline().strip().split(b", ")
  65 + values = incoming.strip().split(b", ")
54 66 else:
55   - values = datafeed.readline().strip()
  67 + values = incoming.strip()
56 68 values = values.split(b', ')
57 69 except:
58   - logging.error("Failed to recieve or parse input data")
  70 + logging.error("Failed to parse input data")
59 71 return
60 72  
61   - for n, value in enumerate(values):
62   - try:
  73 + try:
  74 + for n, value in enumerate(values):
63 75 values[n] = float(value)
64   - except:
65   - logging.error("Failed to convert input to float")
66   - return
  76 + except:
  77 + logging.error("Failed to convert input to float")
  78 + return
67 79 #logging.info("Recieved data: " + str(values))
68 80 testseries.addpoint([time.time()-starttime] + values)
  81 + testseries2.addpoint(values)
  82 +
69 83  
70 84 def fakePollSerial(elapsed):
71 85 """This function immitates the behaviour of pollSerial, for testing purposes"""
... ...
robots/little_john/telemetry/code/monitor/version1/plot.py
... ... @@ -64,7 +64,7 @@ class Plot(pyglet.window.Window):
64 64  
65 65 pyglet.gl.glLineWidth(2)
66 66  
67   - linecolours = [(255, 0, 0, 255, 0, 0), (0, 0, 255, 0, 0, 255)]
  67 + linecolours = [(255, 0, 0, 255, 0, 0), (0, 220, 0, 0, 220, 0), (0, 0, 255, 0, 0, 255)]
68 68  
69 69 try:
70 70 for m in range(len(series.data[0])-1):
... ...
robots/little_john/telemetry/code/monitor/version1/series.py
... ... @@ -5,7 +5,9 @@
5 5 import logging
6 6  
7 7 class Series:
8   - def __init__(self, points=100, xlimits=(0, 100), ylimits=(0, 100), title="Series title", xname="x-axis name", yname="y-axis name"):
  8 + def __init__(self, points=100, xlimits=(0, 100), ylimits=(0, 100),
  9 + xauto=False, yauto=False,
  10 + title="Series title", xname="x-axis name", yname="y-axis name"):
9 11 """Set up an object to store a 2D data series"""
10 12 # Proposal:
11 13 # In order to neatly handle multiple lines on the same graph
... ... @@ -24,6 +26,8 @@ class Series:
24 26 self.ylimits = ylimits
25 27 self.data = []
26 28 self.points = points
  29 + self.xauto = xauto
  30 + self.yauto = yauto
27 31  
28 32 logging.info("Created series: " + title)
29 33  
... ... @@ -33,7 +37,10 @@ class Series:
33 37 if len(self.data) > self.points:
34 38 del self.data[0]
35 39 try:
36   - self.autoscale(0)
  40 + if self.xauto:
  41 + self.autoscale(0)
  42 + if self.yauto:
  43 + self.autoscale(1)
37 44 except:
38 45 logging.error("Series autoscale failed")
39 46  
... ...
robots/little_john/telemetry/code/robot/analogread_demo/analogread_demo.ino
... ... @@ -23,5 +23,5 @@ void loop() {
23 23 Bluetooth.print(a0value);
24 24 Bluetooth.print(", ");
25 25 Bluetooth.println(a7value);
26   - delay(100);
  26 + delay(180);
27 27 }
... ...