Moin,
wenn ich bei einem Arduino mit dem Befehl Serial.println(x)
beispielsweise Daten ausgebe, dann schreibt der Arduino das ganze ja in
einen Buffer, sodass die Vergangenheitswerte stets erhalten bleiben.
Bspw. 1
2
3
4
5
usw.
Gibt es die Möglichkeit das zu verhindern?
Anstatt, dass der Arduino die alten Werte behält, soll er immer wieder
alten Werte überschreiben, sodass ich quasi immer nur auf den
aktuellsten Wert zugreifen kann.
Tut er nicht, das ist dein Programm welches du verwendest um dich per
serieller Schnittstelle zum Arduino zu verbinden. Dieses Programm
(Serial Monitor der Arduino IDE?) reiht die Ausgaben des Arduino
aneinander. Das einzige was da die "Vergangenheitswerte" speichert ist
die Textbox deines Serial Monitors.
Und nein, kann man nicht verhindern. Du müsstest selber ein Programm
schreiben, welches immer nur die letzte vom Arduino empfangene Zeile
anzeigt.
Aber wenn ich auf die Daten der seriellen Schnittstelle zurückgreife und
die Plots vom Arduino Plotter mit meinem Plotter aus Matlab vergleiche,
dann sehe ich eine riesige Latenz zwischen den Veränderungen, wenn ich
das Signal beispielsweise ändere. Im Arduino Plotter, sehe ich
Veränderungen instantan und in Matlab dauert es ewig... Vielleicht liegt
es dann an meiner Kommunikation bzw. dass die Bluetooth Kommunikation
allgemein sehr langsam ist... Es wirkt nämlich so, wenn ich den Plotter
neustarte in Matlab, dass dieser immer auf die ersten Werte vom Arduino
zugreift, sprich immer weiter hinterhängt, je später ich die
Kommunikation starte.
L. N. schrieb:> Und nein, kann man nicht verhindern. Du müsstest selber ein Programm> schreiben, welches immer nur die letzte vom Arduino empfangene Zeile> anzeigt.
Warum soll man dafür ein eigenes Programm schreiben müssen. Jedes
vernünftige Terminal Emulationsprogramm, dass zu Recht zu dieser Gattung
zählt, verfügt über die Möglichkeit der Cursor Positionierung. Der µC
muss lediglich die Positioniersequenzen in den mit Serial.print()
erzeugten Datenstrom einfügen. Serial.println() ist dafür allerdings
eher nicht geeignet, weil es <CR><LF>-Sequenzen einfügt, die man gerade
nicht haben möchte.
Wolfgang schrieb:> Der µC> muss lediglich die Positioniersequenzen in den mit Serial.print()> erzeugten Datenstrom einfügen. Serial.println() ist dafür allerdings> eher nicht geeignet, weil es <CR><LF>-Sequenzen einfügt, die man gerade> nicht haben möchte.
merkste selber, ne? :-D
Bei vielen Terminalprogrammen kann man die aktuelle Zeile so
überschrieben:
Serial.print("\r%d",x);
Der serielle Monitor von der Arduino IDE kann das nicht, soweit ich
weiß. Da musst du andere Software verwenden.
Eventuell möchtest du die Ausgabe so formatieren, dass die Ausgabe immer
gleich breit ist, so dass nicht ungewollt Überreste der vorherigen Zeile
stehen bleiben:
Serial.print("\r%6d",x);
Siehe https://playground.arduino.cc/Main/Printf/
Absence schrieb:> Aber wenn ich auf die Daten der seriellen Schnittstelle zurückgreife und> die Plots vom Arduino Plotter mit meinem Plotter aus Matlab vergleiche,> dann sehe ich eine riesige Latenz zwischen den Veränderungen, wenn ich> das Signal beispielsweise ändere.
Wenn das Problem mit dem Matlab-Plotter auftritt, nicht aber mit dem
Arduino-Plotter, ist ja schon einmal klar, dass die Ursache nicht auf
der Mikrocontrolleresite liegen kann.
Absence schrieb:> Vielleicht liegt es dann an meiner Kommunikation bzw. dass die> Bluetooth Kommunikation allgemein sehr langsam ist
Wenn du in beiden Fällen dieselbe Kommunikationsschnittstelle benutzt
und der Matlab-Plotter dann immer noch langsamer ist, weißt du, dass es
an der PC-seitigen Software liegen muss.
Du schreibst "mit meinem Plotter aus Matlab": Hast du den selber
geschrieben? Bist du sicher, dass er sich bzgl. Datenpufferung gleich
verhält wie der Arduino-Plotter? Letzterer scheint die jeweils letzten n
Werte in einem FIFO-Puffer zu speichern und den Inhalt dieses Puffers zu
plotten, so dass die Messkurve horizontal durchgescrollt wird. Wenn dein
Matlab-Plotter hingegen sämtliche Werte seit dem Programmstart speichert
und plottet, wird die Anzeige mit wachsender Datenmenge logischerweise
immer langsamer werden.
Eine eigene Frage?
Dieser Thread ist über 7 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.