graph_plotter.py
2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python
import pyglet
import math
import random
import time
import serial
datafeed = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
window = pyglet.window.Window()
window.set_caption("Test graph")
starttime = time.time()
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):
pyglet.gl.glColor4f(0.5, 0.5, 0.5, 1.0)
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):
pyglet.gl.glColor4f(1, 0, 0, 1.0)
points = []
for n in range(max(len(xdata), len(ydata))):
try:
xpos = ((xdata[n]-min(xdata))*window.width)/(max(xdata)-min(xdata))
except:
xpos = 0
xpos = int(xpos)
try:
ypos = ((ydata[n]-min(ydata))*window.height)/(max(ydata)-min(ydata))
except:
ypos = 0
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])))
xdata = [0]
ydata = [0]
@window.event
def on_draw():
window.clear()
#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
drawgrid(10, 12, [min(xdata), max(xdata)], [min(ydata), max(ydata)])
plotline(xdata, ydata)
pyglet.app.run()