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 | |
8 | 8 | # This code is incomplete, and is missing core features |
9 | 9 | |
10 | -#import math | |
10 | +import math | |
11 | 11 | import time |
12 | 12 | #import serial |
13 | 13 | |
... | ... | @@ -24,6 +24,7 @@ from colours import * |
24 | 24 | |
25 | 25 | logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG) |
26 | 26 | logging.info("Logging system active") |
27 | +starttime = time.time() | |
27 | 28 | |
28 | 29 | datafeed = selectserial() |
29 | 30 | |
... | ... | @@ -38,7 +39,7 @@ else: |
38 | 39 | logging.info('OS = ' + os) |
39 | 40 | |
40 | 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 | 43 | """Set up an object to store a 2D data series""" |
43 | 44 | # Proposal: |
44 | 45 | # In order to neatly handle multiple lines on the same graph |
... | ... | @@ -54,7 +55,7 @@ class Series: |
54 | 55 | self.xname = xname |
55 | 56 | self.yname = yname |
56 | 57 | self.xlimits = (0, 100) |
57 | - self.ylimits = (0, 255) | |
58 | + self.ylimits = (-100, 100) | |
58 | 59 | self.data = [] |
59 | 60 | self.points = points |
60 | 61 | |
... | ... | @@ -63,6 +64,20 @@ class Series: |
63 | 64 | self.data.append(point) |
64 | 65 | if len(self.data) > self.points: |
65 | 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 | 82 | class Plot(pyglet.window.Window): |
68 | 83 | def __init__(self, series): |
... | ... | @@ -115,15 +130,16 @@ class Plot(pyglet.window.Window): |
115 | 130 | xscale = float(self.series.xlimits[1]-self.series.xlimits[0])/(self.bounds[0][1]-self.bounds[0][0]) |
116 | 131 | yscale = float(self.series.ylimits[1]-self.series.ylimits[0])/(self.bounds[1][1]-self.bounds[1][0]) |
117 | 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 | 133 | lmar = int(self.width * self.margins[0]) |
122 | 134 | rmar = int(self.width * self.margins[1]) |
123 | 135 | tmar = int(self.height * self.margins[0]) |
124 | 136 | bmar = int(self.height * self.margins[1]) |
137 | + | |
138 | + pyglet.gl.glLineWidth(2) | |
139 | + | |
125 | 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 | 143 | x1 = int((x1/xscale)+lmar) |
128 | 144 | y1 = int((y1/yscale)+bmar) |
129 | 145 | x2 = int((x2/xscale)+lmar) |
... | ... | @@ -131,6 +147,8 @@ class Plot(pyglet.window.Window): |
131 | 147 | pyglet.graphics.draw(2, pyglet.gl.GL_LINES, |
132 | 148 | ('v2i', (x1, y1, x2, y2)), |
133 | 149 | ('c3B', (255, 0, 0, 255, 0, 0))) |
150 | + pyglet.gl.glLineWidth(1) | |
151 | + | |
134 | 152 | |
135 | 153 | |
136 | 154 | def drawAxis(self, axis): # axis=0 is x, 1 is y |
... | ... | @@ -204,12 +222,12 @@ def pollSerial(elapsed): |
204 | 222 | |
205 | 223 | def fakePollSerial(elapsed): |
206 | 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 | 227 | #logging.info("Generated test data: " + str(values)) |
210 | 228 | testseries.addpoint(values) |
211 | 229 | |
212 | 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 | 233 | pyglet.app.run() | ... | ... |