ich versuche ein Programm zu schreiben, dass die Messdaten, die von einem Microcontroller an den Rechner geschickt werden, live darzustellen.
Dazu habe ich die Funktion FuncAnmation aus der Matplot-Bibliothek gefunden, mit der das eig. sehr schön funktionieren sollte. Leider ist die Dokumentation dazu nur sehr kurz, sodass ich die Funktion nicht richtig verstehe und die Beispiele im Internet nicht an meine eigene Anwendung anpassen kann.
Mein bisheriger Code sieht dazu so aus:
Das Problem ist hier, dass Datenwerte y1, y2 nicht ergänzt werden, sondern anscheinend ständig neu die leeren y1,y2 verwendet werden.
Code: Alles auswählen
import serial
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
a1 = raw_input("Verbindung konfigurieren(j/n)?:")
if (a1=="n\n"):
port = raw_input("Bitte geben Sie die Verbindungsbezeichnunng (z.B.: '/dev/ttyUSB0') ein.\n")
baudrate = int(input("Bitte geben Sie die Baudrate der Verbindung an.\n"))
else:
port = "COM4"
baudrate=115200
def add(liste, wert, n):
liste = np.roll(liste, -1)
liste[n-1]=wert
return liste
s = serial.Serial(port,baudrate)
n = 10
y1 = np.zeros(n)
y2 = np.zeros(n)
t = np.arange(n)
fig = plt.figure()
ax = plt.axes()
ax.set_ylim(-70, 70)
a0, = ax.plot([], [])
a1, = ax.plot([], [])
def update(frameNum, a0, a1,y1,y2, n):
print "z"
j = s.readline().rstrip()
k = format(j)
l = k.split("\t")
y1 = add(y1, l[1], n)
y2 = add(y2, l[2], n)
a0.set_data(range(len(y1)), y1)
a1.set_data(range(len(y2)), y2)
print y1, a0
return a0,
ani = animation.FuncAnimation(fig, update, fargs=(a0,a1,y1,y2, n), interval=100, frames=200)
plt.show()
Insebsonndere:
- Wann brauche ich eine init-Funktion?
Was genau passiert mit den Parametern in fargs?
Und was muss ich in update zurückgeben, damit alle meine Linien aktualisiert werden?
Modibo