Commit be93fe7801cf4753661ac468d5b052704fb7cefc

Authored by Christopher Stone
1 parent 4d3a8ce0
Exists in master

Wrote smoothing function, not yet used

Showing 1 changed file with 24 additions and 8 deletions   Show diff stats
telemetry/code/monitor/graph_plotter.py
@@ -14,15 +14,19 @@ datafeed = serial.Serial( @@ -14,15 +14,19 @@ datafeed = serial.Serial(
14 bytesize=serial.EIGHTBITS, 14 bytesize=serial.EIGHTBITS,
15 timeout=1 15 timeout=1
16 ) 16 )
  17 +
  18 +red = [1, 0, 0]
  19 +green = [0, 1, 0]
  20 +blue = [0, 0, 1]
17 21
18 window = pyglet.window.Window() 22 window = pyglet.window.Window()
19 -window.set_caption("Test graph") 23 +window.set_caption("Raw data")
20 24
21 starttime = time.time() 25 starttime = time.time()
22 26
23 27
24 def drawgrid(xlines, ylines, xlimits, ylimits): 28 def drawgrid(xlines, ylines, xlimits, ylimits):
25 - pyglet.gl.glColor4f(0.5, 0.5, 0.5, 1.0) 29 + pyglet.gl.glColor3f(0.5, 0.5, 0.5)
26 for xpos in range(0, window.width, window.width/xlines): 30 for xpos in range(0, window.width, window.width/xlines):
27 pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (xpos, 0, xpos, window.height))) 31 pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (xpos, 0, xpos, window.height)))
28 tagtext = str(round((xlimits[1]-xlimits[0])*(float(xpos)/window.width) + xlimits[0], 1)) 32 tagtext = str(round((xlimits[1]-xlimits[0])*(float(xpos)/window.width) + xlimits[0], 1))
@@ -35,8 +39,8 @@ def drawgrid(xlines, ylines, xlimits, ylimits): @@ -35,8 +39,8 @@ def drawgrid(xlines, ylines, xlimits, ylimits):
35 tag.draw() 39 tag.draw()
36 40
37 41
38 -def plotline(xdata, ydata):  
39 - pyglet.gl.glColor4f(1, 0, 0, 1.0) 42 +def plotline(xdata, ydata, colour):
  43 + pyglet.gl.glColor3f(colour[0], colour[1], colour[2])
40 points = [] 44 points = []
41 for n in range(max(len(xdata), len(ydata))): 45 for n in range(max(len(xdata), len(ydata))):
42 try: 46 try:
@@ -56,19 +60,31 @@ def plotline(xdata, ydata): @@ -56,19 +60,31 @@ def plotline(xdata, ydata):
56 60
57 xdata = [0] 61 xdata = [0]
58 ydata = [0] 62 ydata = [0]
  63 +ydatasmooth = [0]
59 64
60 65
61 def poll_serial(foo): 66 def poll_serial(foo):
  67 + max_points = 250
62 value = datafeed.readline() 68 value = datafeed.readline()
63 try: 69 try:
64 value = float(value) 70 value = float(value)
65 ydata.append(value) 71 ydata.append(value)
66 -  
67 - if len(ydata) > 300: 72 + if len(ydata) > max_points:
68 del ydata[0] 73 del ydata[0]
  74 +
69 xdata.append(round(time.time() - starttime, 3)) 75 xdata.append(round(time.time() - starttime, 3))
70 - if len(xdata) > 300: 76 + if len(xdata) > max_points:
71 del xdata[0] 77 del xdata[0]
  78 +
  79 + avg = 0;
  80 + for n in range(0, len(ydata)):
  81 + weight = (1-float(n/len(ydata)))/max_points
  82 + avg += weight * ydata[n]
  83 +
  84 + ydatasmooth.append(avg)
  85 + if len(ydatasmooth) > max_points:
  86 + del ydatasmooth[0]
  87 +
72 except: 88 except:
73 pass 89 pass
74 90
@@ -80,7 +96,7 @@ def on_draw(): @@ -80,7 +96,7 @@ def on_draw():
80 window.clear() 96 window.clear()
81 97
82 drawgrid(10, 10, [min(xdata), max(xdata)], [min(ydata), max(ydata)]) 98 drawgrid(10, 10, [min(xdata), max(xdata)], [min(ydata), max(ydata)])
83 - plotline(xdata, ydata) 99 + plotline(xdata, ydata, red)
84 100
85 101
86 102