Commit 8ffbc4ad423462be75c94c4cb854d4db68b03f5d
1 parent
e9ac5444
Exists in
master
Split class series into separate module, as part of attempt to declutter main
Showing
2 changed files
with
46 additions
and
41 deletions
Show diff stats
robots/little_john/telemetry/code/monitor/version1/main.py
| @@ -21,6 +21,7 @@ import logging | @@ -21,6 +21,7 @@ import logging | ||
| 21 | 21 | ||
| 22 | from serialselect import selectserial | 22 | from serialselect import selectserial |
| 23 | from colours import * | 23 | from colours import * |
| 24 | +from series import Series | ||
| 24 | 25 | ||
| 25 | logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG) | 26 | logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG) |
| 26 | logging.info("Logging system active") | 27 | logging.info("Logging system active") |
| @@ -38,47 +39,6 @@ else: | @@ -38,47 +39,6 @@ else: | ||
| 38 | os='Other' | 39 | os='Other' |
| 39 | logging.info('OS = ' + os) | 40 | logging.info('OS = ' + os) |
| 40 | 41 | ||
| 41 | -class Series: | ||
| 42 | - def __init__(self, points=300, title="Series title", xname="x-axis name", yname="y-axis name"): | ||
| 43 | - """Set up an object to store a 2D data series""" | ||
| 44 | - # Proposal: | ||
| 45 | - # In order to neatly handle multiple lines on the same graph | ||
| 46 | - # a series is not so much a set of 2D data points, but a number | ||
| 47 | - # of series sharing an x axis. For example | ||
| 48 | - # (time, temperature) | ||
| 49 | - # (time, xaccel, yaccel, zaccel) | ||
| 50 | - # The latter seta of points much be of like nature and share an axis | ||
| 51 | - # (time, temperature, xaccel) | ||
| 52 | - # would be a meaningless thing to plot on a single graph anyway | ||
| 53 | - | ||
| 54 | - self.title = title | ||
| 55 | - self.xname = xname | ||
| 56 | - self.yname = yname | ||
| 57 | - self.xlimits = (0, 100) | ||
| 58 | - self.ylimits = (-100, 100) | ||
| 59 | - self.data = [] | ||
| 60 | - self.points = points | ||
| 61 | - | ||
| 62 | - def addpoint(self, point): | ||
| 63 | - """Add a point to the dataset, and remove the oldest, if necessary""" | ||
| 64 | - self.data.append(point) | ||
| 65 | - if len(self.data) > self.points: | ||
| 66 | - del self.data[0] | ||
| 67 | - self.autoscale(0) | ||
| 68 | - | ||
| 69 | - def autoscale(self, axis): # axis=0 is x, 1 is y | ||
| 70 | - minval = self.data[0][axis] | ||
| 71 | - maxval = self.data[0][axis] | ||
| 72 | - for value in self.data: | ||
| 73 | - if value[axis] < minval: | ||
| 74 | - minval = value[axis] | ||
| 75 | - if value[axis] > maxval: | ||
| 76 | - maxval = value[axis] | ||
| 77 | - if axis == 0: | ||
| 78 | - self.xlimits = (minval, maxval) | ||
| 79 | - else: | ||
| 80 | - self.ylimits = (minval, maxval) | ||
| 81 | - | ||
| 82 | class Plot(pyglet.window.Window): | 42 | class Plot(pyglet.window.Window): |
| 83 | def __init__(self, series): | 43 | def __init__(self, series): |
| 84 | """Setup a the details of a plot, and create a corresponding window""" | 44 | """Setup a the details of a plot, and create a corresponding window""" |
robots/little_john/telemetry/code/monitor/version1/series.py
0 → 100644
| @@ -0,0 +1,45 @@ | @@ -0,0 +1,45 @@ | ||
| 1 | +# Class to store data for a live graph | ||
| 2 | +# Written as a telemetry tool by: | ||
| 3 | +# The UoN Robot Wars Project, 2018 | ||
| 4 | + | ||
| 5 | + | ||
| 6 | +class Series: | ||
| 7 | + def __init__(self, points=300, title="Series title", xname="x-axis name", yname="y-axis name"): | ||
| 8 | + """Set up an object to store a 2D data series""" | ||
| 9 | + # Proposal: | ||
| 10 | + # In order to neatly handle multiple lines on the same graph | ||
| 11 | + # a series is not so much a set of 2D data points, but a number | ||
| 12 | + # of series sharing an x axis. For example | ||
| 13 | + # (time, temperature) | ||
| 14 | + # (time, xaccel, yaccel, zaccel) | ||
| 15 | + # The latter seta of points much be of like nature and share an axis | ||
| 16 | + # (time, temperature, xaccel) | ||
| 17 | + # would be a meaningless thing to plot on a single graph anyway | ||
| 18 | + | ||
| 19 | + self.title = title | ||
| 20 | + self.xname = xname | ||
| 21 | + self.yname = yname | ||
| 22 | + self.xlimits = (0, 100) | ||
| 23 | + self.ylimits = (-100, 100) | ||
| 24 | + self.data = [] | ||
| 25 | + self.points = points | ||
| 26 | + | ||
| 27 | + def addpoint(self, point): | ||
| 28 | + """Add a point to the dataset, and remove the oldest, if necessary""" | ||
| 29 | + self.data.append(point) | ||
| 30 | + if len(self.data) > self.points: | ||
| 31 | + del self.data[0] | ||
| 32 | + self.autoscale(0) | ||
| 33 | + | ||
| 34 | + def autoscale(self, axis): # axis=0 is x, 1 is y | ||
| 35 | + minval = self.data[0][axis] | ||
| 36 | + maxval = self.data[0][axis] | ||
| 37 | + for value in self.data: | ||
| 38 | + if value[axis] < minval: | ||
| 39 | + minval = value[axis] | ||
| 40 | + if value[axis] > maxval: | ||
| 41 | + maxval = value[axis] | ||
| 42 | + if axis == 0: | ||
| 43 | + self.xlimits = (minval, maxval) | ||
| 44 | + else: | ||
| 45 | + self.ylimits = (minval, maxval) |