Commit be93fe7801cf4753661ac468d5b052704fb7cefc
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 |