Commit e9ac5444ee9f596a8a520c43a99de345fac2e12d
1 parent
87acb46a
Exists in
master
Sucessful demonstration, plotting a sine wave against time. Code may need some tidying up...
Showing
1 changed file
with
28 additions
and
10 deletions
Show diff stats
robots/little_john/telemetry/code/monitor/version1/main.py
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | 7 | ||
8 | # This code is incomplete, and is missing core features | 8 | # This code is incomplete, and is missing core features |
9 | 9 | ||
10 | -#import math | 10 | +import math |
11 | import time | 11 | import time |
12 | #import serial | 12 | #import serial |
13 | 13 | ||
@@ -24,6 +24,7 @@ from colours import * | @@ -24,6 +24,7 @@ from colours import * | ||
24 | 24 | ||
25 | logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG) | 25 | logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG) |
26 | logging.info("Logging system active") | 26 | logging.info("Logging system active") |
27 | +starttime = time.time() | ||
27 | 28 | ||
28 | datafeed = selectserial() | 29 | datafeed = selectserial() |
29 | 30 | ||
@@ -38,7 +39,7 @@ else: | @@ -38,7 +39,7 @@ else: | ||
38 | logging.info('OS = ' + os) | 39 | logging.info('OS = ' + os) |
39 | 40 | ||
40 | class Series: | 41 | class Series: |
41 | - def __init__(self, points=100, title="Series title", xname="x-axis name", yname="y-axis name"): | 42 | + def __init__(self, points=300, title="Series title", xname="x-axis name", yname="y-axis name"): |
42 | """Set up an object to store a 2D data series""" | 43 | """Set up an object to store a 2D data series""" |
43 | # Proposal: | 44 | # Proposal: |
44 | # In order to neatly handle multiple lines on the same graph | 45 | # In order to neatly handle multiple lines on the same graph |
@@ -54,7 +55,7 @@ class Series: | @@ -54,7 +55,7 @@ class Series: | ||
54 | self.xname = xname | 55 | self.xname = xname |
55 | self.yname = yname | 56 | self.yname = yname |
56 | self.xlimits = (0, 100) | 57 | self.xlimits = (0, 100) |
57 | - self.ylimits = (0, 255) | 58 | + self.ylimits = (-100, 100) |
58 | self.data = [] | 59 | self.data = [] |
59 | self.points = points | 60 | self.points = points |
60 | 61 | ||
@@ -63,6 +64,20 @@ class Series: | @@ -63,6 +64,20 @@ class Series: | ||
63 | self.data.append(point) | 64 | self.data.append(point) |
64 | if len(self.data) > self.points: | 65 | if len(self.data) > self.points: |
65 | del self.data[0] | 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) | ||
66 | 81 | ||
67 | class Plot(pyglet.window.Window): | 82 | class Plot(pyglet.window.Window): |
68 | def __init__(self, series): | 83 | def __init__(self, series): |
@@ -115,15 +130,16 @@ class Plot(pyglet.window.Window): | @@ -115,15 +130,16 @@ class Plot(pyglet.window.Window): | ||
115 | xscale = float(self.series.xlimits[1]-self.series.xlimits[0])/(self.bounds[0][1]-self.bounds[0][0]) | 130 | xscale = float(self.series.xlimits[1]-self.series.xlimits[0])/(self.bounds[0][1]-self.bounds[0][0]) |
116 | yscale = float(self.series.ylimits[1]-self.series.ylimits[0])/(self.bounds[1][1]-self.bounds[1][0]) | 131 | yscale = float(self.series.ylimits[1]-self.series.ylimits[0])/(self.bounds[1][1]-self.bounds[1][0]) |
117 | logging.debug("xscale = " + str(xscale) + ", yscale = " + str(yscale)) | 132 | logging.debug("xscale = " + str(xscale) + ", yscale = " + str(yscale)) |
118 | - #xscale = 5 | ||
119 | - #xscale = self.series.xlimits[1] self.series.xlimits[0] | ||
120 | - #yscale = 1 | ||
121 | lmar = int(self.width * self.margins[0]) | 133 | lmar = int(self.width * self.margins[0]) |
122 | rmar = int(self.width * self.margins[1]) | 134 | rmar = int(self.width * self.margins[1]) |
123 | tmar = int(self.height * self.margins[0]) | 135 | tmar = int(self.height * self.margins[0]) |
124 | bmar = int(self.height * self.margins[1]) | 136 | bmar = int(self.height * self.margins[1]) |
137 | + | ||
138 | + pyglet.gl.glLineWidth(2) | ||
139 | + | ||
125 | for n in range(len(series.data) - 1): | 140 | for n in range(len(series.data) - 1): |
126 | - x1, y1, x2, y2 = series.data[n][0], series.data[n][1], series.data[n+1][0], series.data[n+1][1] | 141 | + x1, y1 = series.data[n][0]-series.xlimits[0], series.data[n][1]-series.ylimits[0] |
142 | + x2, y2 = series.data[n+1][0]-series.xlimits[0], series.data[n+1][1]-series.ylimits[0] | ||
127 | x1 = int((x1/xscale)+lmar) | 143 | x1 = int((x1/xscale)+lmar) |
128 | y1 = int((y1/yscale)+bmar) | 144 | y1 = int((y1/yscale)+bmar) |
129 | x2 = int((x2/xscale)+lmar) | 145 | x2 = int((x2/xscale)+lmar) |
@@ -131,6 +147,8 @@ class Plot(pyglet.window.Window): | @@ -131,6 +147,8 @@ class Plot(pyglet.window.Window): | ||
131 | pyglet.graphics.draw(2, pyglet.gl.GL_LINES, | 147 | pyglet.graphics.draw(2, pyglet.gl.GL_LINES, |
132 | ('v2i', (x1, y1, x2, y2)), | 148 | ('v2i', (x1, y1, x2, y2)), |
133 | ('c3B', (255, 0, 0, 255, 0, 0))) | 149 | ('c3B', (255, 0, 0, 255, 0, 0))) |
150 | + pyglet.gl.glLineWidth(1) | ||
151 | + | ||
134 | 152 | ||
135 | 153 | ||
136 | def drawAxis(self, axis): # axis=0 is x, 1 is y | 154 | def drawAxis(self, axis): # axis=0 is x, 1 is y |
@@ -204,12 +222,12 @@ def pollSerial(elapsed): | @@ -204,12 +222,12 @@ def pollSerial(elapsed): | ||
204 | 222 | ||
205 | def fakePollSerial(elapsed): | 223 | def fakePollSerial(elapsed): |
206 | """This function immitates the behaviour of pollSerial, for testing purposes""" | 224 | """This function immitates the behaviour of pollSerial, for testing purposes""" |
207 | - faketime = time.time() * 10 | ||
208 | - values = [(faketime%100), faketime%255] | 225 | + timefromstart = (time.time()-starttime) |
226 | + values = [timefromstart, 100*math.sin(25*math.radians(timefromstart))] | ||
209 | #logging.info("Generated test data: " + str(values)) | 227 | #logging.info("Generated test data: " + str(values)) |
210 | testseries.addpoint(values) | 228 | testseries.addpoint(values) |
211 | 229 | ||
212 | # Pyglet looks after the main event loop, but this ensures that data keeps being read in | 230 | # Pyglet looks after the main event loop, but this ensures that data keeps being read in |
213 | -pyglet.clock.schedule_interval(fakePollSerial, 0.1) | 231 | +pyglet.clock.schedule_interval(fakePollSerial, 0.04) |
214 | 232 | ||
215 | pyglet.app.run() | 233 | pyglet.app.run() |