Blame view

telemetry/code/monitor/graph_plotter.py 2.74 KB
b0f61ccf   Christopher Stone   Working demo for ...
1
2
#!/usr/bin/env python

6afdc6b9   Christopher Stone   Attempt at drawin...
3
4
import pyglet
import math
caf04a11   Christopher Stone   Demo code now dra...
5
6
import random
import time
b0f61ccf   Christopher Stone   Working demo for ...
7
8
9
10
11
12
13
14
15
16
import serial

datafeed = serial.Serial(
 port='/dev/ttyUSB0',
 baudrate = 9600,
 parity=serial.PARITY_NONE,
 stopbits=serial.STOPBITS_ONE,
 bytesize=serial.EIGHTBITS,
 timeout=1
)
6afdc6b9   Christopher Stone   Attempt at drawin...
17
18
19
 
window = pyglet.window.Window()
window.set_caption("Test graph")
caf04a11   Christopher Stone   Demo code now dra...
20
21

starttime = time.time()
6afdc6b9   Christopher Stone   Attempt at drawin...
22
23
24
25
26
27
28
29
30
31
32
33
 
title = pyglet.text.Label('Test Graph',
                          font_name='Arkhip',
                          font_size=12,
                          x=window.width//2, y=window.height//2,
                          anchor_x='center', anchor_y='top')

                 
def round_sig(x, sig=2):
    return round(x, sig-int(math.floor(math.log10(abs(x))))-1)
                 
def drawgrid(xlines, ylines, xlimits, ylimits):
caf04a11   Christopher Stone   Demo code now dra...
34
    pyglet.gl.glColor4f(0.5, 0.5, 0.5, 1.0) 
6afdc6b9   Christopher Stone   Attempt at drawin...
35
36
37
38
39
40
41
42
43
44
45
46
47
    for xpos in range(0, window.width, window.width/xlines):
        pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (xpos, 0, xpos, window.height)))
        tagtext = str(round((xlimits[1]-xlimits[0])*(float(xpos)/window.width), 1))
        tag = pyglet.text.Label(tagtext, font_name='Arkhip', font_size=10, x=xpos-2, y=0, anchor_x='right', anchor_y='bottom')
        tag.draw()
    for ypos in range(0, window.width, window.width/ylines):
        pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (0, ypos, window.width, ypos)))
        tagtext = str(round((ylimits[1]-ylimits[0])*(float(ypos)/window.height), 1))
        tag = pyglet.text.Label(tagtext, font_name='Arkhip', font_size=10, x=0, y=ypos-2, anchor_x='left', anchor_y='top')
        tag.draw()


def plotline(xdata, ydata):
caf04a11   Christopher Stone   Demo code now dra...
48
49
50
    pyglet.gl.glColor4f(1, 0, 0, 1.0)
    points = []
    for n in range(max(len(xdata), len(ydata))):
b0f61ccf   Christopher Stone   Working demo for ...
51
52
53
54
        try:
            xpos = ((xdata[n]-min(xdata))*window.width)/(max(xdata)-min(xdata))
        except:
            xpos = 0
caf04a11   Christopher Stone   Demo code now dra...
55
        xpos = int(xpos)
b0f61ccf   Christopher Stone   Working demo for ...
56
57
58
59
        try:
            ypos = ((ydata[n]-min(ydata))*window.height)/(max(ydata)-min(ydata))
        except:
            ypos = 0
caf04a11   Christopher Stone   Demo code now dra...
60
61
62
63
64
        ypos = int(ypos)
        points.append([xpos, ypos])
    for n in range(len(points)-1):            
        pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (points[n][0], points[n][1], points[n+1][0], points[n+1][1])))

6afdc6b9   Christopher Stone   Attempt at drawin...
65

caf04a11   Christopher Stone   Demo code now dra...
66
67
xdata = [0]
ydata = [0]
6afdc6b9   Christopher Stone   Attempt at drawin...
68

6afdc6b9   Christopher Stone   Attempt at drawin...
69
70
71
72

@window.event
def on_draw():
    window.clear()
b0f61ccf   Christopher Stone   Working demo for ...
73
74
75
76
77
78
79
80
81
82
83
84
85
86
    #ydata.append(random.uniform(0, 10))
    value = datafeed.readline()
    try:
        value = float(value)
        ydata.append(value)
        print("Value: " + str(ydata[-1]))

        if len(ydata) > 250:
            del ydata[0]
        xdata.append(round(time.time() - starttime, 3))
        if len(xdata) > 250:
            del xdata[0]
    except:
        pass
6afdc6b9   Christopher Stone   Attempt at drawin...
87
    drawgrid(10, 12, [min(xdata), max(xdata)], [min(ydata), max(ydata)])
caf04a11   Christopher Stone   Demo code now dra...
88
89
    plotline(xdata, ydata)

b0f61ccf   Christopher Stone   Working demo for ...
90

6afdc6b9   Christopher Stone   Attempt at drawin...
91
92
    
pyglet.app.run()