Commit 2bd76084f8bb6fbe9baf31161f6e56ea4609d890
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
Showing
4 changed files
with
34 additions
and
13 deletions
Show diff stats
robots/little_john/telemetry/code/monitor/version1/main.py
| @@ -40,32 +40,46 @@ else: | @@ -40,32 +40,46 @@ else: | ||
| 40 | os='Other' | 40 | os='Other' |
| 41 | logging.info('OS = ' + os) | 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 | plots = [] | 49 | plots = [] |
| 45 | plots.append(Plot(testseries)) | 50 | plots.append(Plot(testseries)) |
| 51 | +plots.append(Plot(testseries2)) | ||
| 52 | + | ||
| 46 | 53 | ||
| 47 | def pollSerial(elapsed): | 54 | def pollSerial(elapsed): |
| 48 | """Check serial port for incoming data""" | 55 | """Check serial port for incoming data""" |
| 49 | # Note: 'elapsed' is time since last call of this function | 56 | # Note: 'elapsed' is time since last call of this function |
| 50 | # This works, but it might be better for performance to have two seperate functions, only one of which is run. | 57 | # This works, but it might be better for performance to have two seperate functions, only one of which is run. |
| 51 | try: | 58 | try: |
| 59 | + incoming = datafeed.readline() | ||
| 60 | + except: | ||
| 61 | + logging.error("Failed to read input data") | ||
| 62 | + | ||
| 63 | + try: | ||
| 52 | if os=='Windows': | 64 | if os=='Windows': |
| 53 | - values = datafeed.readline().strip().split(b", ") | 65 | + values = incoming.strip().split(b", ") |
| 54 | else: | 66 | else: |
| 55 | - values = datafeed.readline().strip() | 67 | + values = incoming.strip() |
| 56 | values = values.split(b', ') | 68 | values = values.split(b', ') |
| 57 | except: | 69 | except: |
| 58 | - logging.error("Failed to recieve or parse input data") | 70 | + logging.error("Failed to parse input data") |
| 59 | return | 71 | return |
| 60 | 72 | ||
| 61 | - for n, value in enumerate(values): | ||
| 62 | - try: | 73 | + try: |
| 74 | + for n, value in enumerate(values): | ||
| 63 | values[n] = float(value) | 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 | #logging.info("Recieved data: " + str(values)) | 79 | #logging.info("Recieved data: " + str(values)) |
| 68 | testseries.addpoint([time.time()-starttime] + values) | 80 | testseries.addpoint([time.time()-starttime] + values) |
| 81 | + testseries2.addpoint(values) | ||
| 82 | + | ||
| 69 | 83 | ||
| 70 | def fakePollSerial(elapsed): | 84 | def fakePollSerial(elapsed): |
| 71 | """This function immitates the behaviour of pollSerial, for testing purposes""" | 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,7 +64,7 @@ class Plot(pyglet.window.Window): | ||
| 64 | 64 | ||
| 65 | pyglet.gl.glLineWidth(2) | 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 | try: | 69 | try: |
| 70 | for m in range(len(series.data[0])-1): | 70 | for m in range(len(series.data[0])-1): |
robots/little_john/telemetry/code/monitor/version1/series.py
| @@ -5,7 +5,9 @@ | @@ -5,7 +5,9 @@ | ||
| 5 | import logging | 5 | import logging |
| 6 | 6 | ||
| 7 | class Series: | 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 | """Set up an object to store a 2D data series""" | 11 | """Set up an object to store a 2D data series""" |
| 10 | # Proposal: | 12 | # Proposal: |
| 11 | # In order to neatly handle multiple lines on the same graph | 13 | # In order to neatly handle multiple lines on the same graph |
| @@ -24,6 +26,8 @@ class Series: | @@ -24,6 +26,8 @@ class Series: | ||
| 24 | self.ylimits = ylimits | 26 | self.ylimits = ylimits |
| 25 | self.data = [] | 27 | self.data = [] |
| 26 | self.points = points | 28 | self.points = points |
| 29 | + self.xauto = xauto | ||
| 30 | + self.yauto = yauto | ||
| 27 | 31 | ||
| 28 | logging.info("Created series: " + title) | 32 | logging.info("Created series: " + title) |
| 29 | 33 | ||
| @@ -33,7 +37,10 @@ class Series: | @@ -33,7 +37,10 @@ class Series: | ||
| 33 | if len(self.data) > self.points: | 37 | if len(self.data) > self.points: |
| 34 | del self.data[0] | 38 | del self.data[0] |
| 35 | try: | 39 | try: |
| 36 | - self.autoscale(0) | 40 | + if self.xauto: |
| 41 | + self.autoscale(0) | ||
| 42 | + if self.yauto: | ||
| 43 | + self.autoscale(1) | ||
| 37 | except: | 44 | except: |
| 38 | logging.error("Series autoscale failed") | 45 | logging.error("Series autoscale failed") |
| 39 | 46 |
robots/little_john/telemetry/code/robot/analogread_demo/analogread_demo.ino