Datenmüll Arduino Seriel

Hi,

ich habe ein Problem bei der seriellen Kommunikation.
Es kommt noch vor dem eigentlichen Inhalt den ich sende Datenmüll welcher aus wohl alten Fragmenten besteht.

Im Setup habe ich schon nach dem öffnen der Schnittstelle ein Delay probiert, Delay funktioniert auch
trotzdem kommt erst Datenmüll.
Danach ist die Welt allerdings vollkommen in Ordnung.

Nun ist die Frage ob da noch was im Puffer ist und ich habe es mit serial.flush probiert, ohne Erfolg.

Da dies sowohl unter Windows als auch unter Linux auftritt gehe ich davon aus das tatsächlich der Arduino das Problem ist.
Eingesetzt wird ein 2560R3

Wie bekomme ich den Datenmüll los?

Bavarian:
Wie bekomme ich den Datenmüll los?

Das hängt davon ab, wie Du den Datenmüll hinein bekommst, also welcher Sketch auf dem Board läuft.

Probiere im Sketch mal aus, in der setup-Funktion die Schnittstelle nicht nur einmal zu öffnen, sondern danach sofort wieder zu schließen und gleich nochmal zu öffnen.

Beispiel für 9600 Baud:

void setup()
{
  Serial.begin(9600);
  Serial.end();
  Serial.begin(9600);

}

Unterschied?

Hilfreich wäre vielleicht auch den kompletten Sketch hier zu zeigen. Denn wenn z.B. ein Programm von mir auf meinem Arduino UNO direkt irgend etwas sendet, und erst ein paar Sekunden später der serielle Monitor geöffnet wird, dann bekomme ich generell auch Murks am Anfang zu lesen. Wahrscheinlich muss das delay(x) im Setup recht lang eingestellt werden, damit du den seriellen Monitor öffnen kannst, ohne dass schon Daten im Buffer sind. Ist nur 'ne Vermutung.

Hi,

int Wert0, Wert1, Wert2, Wert3, Wert4, Wert5;

void setup() {
    Serial.begin(9600);
}
 
void loop() {
  Wert0 = analogRead(A0);
  Wert1 = analogRead(A1);
  Wert2 = analogRead(A2);
  Wert3 = analogRead(A3);
  Wert4 = analogRead(A4);
  Wert5 = analogRead(A5);
 
  String myString = "@" + String(Wert0) + ";"
                        + String(Wert1) + ";"
                        + String(Wert2) + ";"
                        + String(Wert4) + ";"
                        + String(Wert4) + ";"
                        + String(Wert5) + "#";
 
  Serial.println(myString);
  Serial.flush();
  delay(1000);
}

Zum Beispeil das hier was ich im Internet gefunden habe allerdings im Zusammenhang mit Java.
Bei dem Java verzweifel ich daran, dass es austeigt wegen dem Datenmüll am Anfang.

Das öffnen der Schnittstelle mit anschlieden schließen war auch nicht die Lösung.

Auch folgendes bringt nix:

void setup() {
    Serial.begin(9600);
    delay(500);
    Serial.println("Schnittstelle geöffnet");
}

Es kommt dann erst der Datenmüll und dann Schnittstelle geöffnet und dann klappt alles reibungslos.

Ein delay im setup bringt überhaupt nichts, da das Öffnen der seriellen Schnittstelle den Arduino sowieso neu startet, die PC Seite ist also lange vor dem Arduino bereit zu empfangen.

Neuer Test:

void setup() {
    Serial.begin(9600);
}
 
void loop() {
  Serial.println("@000;111;222;333;444;555;666;777;888;999;123#");
  Serial.flush();
  delay(300);
}

Ergebnis zB:

@
88;999;123#
@000;111;222;333;444;555;666;777;888;999;123#
@000;111;222;333;444;555;666;777;888;999;123#
...

Immer erst am Anfang Müll bevor es weiter geht wie es soll.

Hier passiert das auf einem Nano/Win7-64/Ide1.6.5 nicht.

Kein Datenmüll, alles wie erwartet.

Es passiert hier auch auf einen Mega nicht.

Komisches Problem.

Ist die Platine ein Orginal-Arduino?
Passiert das gleiche auch bei einem anderen PC?
Passiert das gleiche auch wenn Du ein anderes Terminalprogram verwendest?
Passiert das gleiche wenn Du andere Baudraten verwendest.

Serial.flush(); macht nicht das was Du denkst.

Grüße Uwe

Serial.flush(); macht nicht das was Du denkst.

@Uwe: Diesmal liefert deine Glaskugel die rätselhaftere Antwort als meine.

Meine sagt:

Die zwei Zeilen

Serial.flush();
 delay(300);

kann man im Beispiel durch

delay(340);

ersetzen.


Bavarian:
allerdings im Zusammenhang mit Java

Ich würde auf der "Empfängerseite" suchen, bzw. mal mit dem Arduino SerialMonitor testen.

2x Original Mega 2560R3

  1. PC Dell Notebook Win10
  2. PC Raspberry Pi2 Raspbian Linux
  3. PC Asus Board I5 Win10

Auf allen Systemem mit dem Arduino SerialMonitor der selbe Effekt wie auch im Terminal Fenster auf dem Raspberry wo es letztendlich angezeigt werden soll.

Interessant ist vielleicht noch, dass wenn im setup ein delay steht gefolgt einemserial.print mit nem Text, der Datenmüll noch vor dem Delay und dem Text kommt!?

void setup () {
 Serial.begin(9600);
 Serial.println("Start");
}
void loop() {}

Damit kommt also "<Müll>Start" im SerialMonitor an, wenn du diesen startest ?

Schonmal den Reset-Knopf probiert (Bei wartendem Empfänger) ?

An Pin1 auf deinem Mega ist hoffentlich nichts angeschlossen?

Interessant, dass das Problem mal besprochen wird.
Kenn ich nämlich auch.
Mein Eindruck: die IDE (V 1.67) ist der Übeltäter.
Wenn man die nämlich beendet und neu öffnet, dann den seriellen Monitor, ist kein Müll da.
Läuft der serielle Monitor aber in einer Sitzung zum Xten Male, dann schon.
Es kommen immer Daten zuerst, die "vorher" mal erzeugt wurden, die sind also nicht "frei erfunden".

Es könnte schon sein daß das Terminal die Daten des Buffers des PC ausliest, den Buffer aber nicht bei öfnen löscht.

Grüße Uwe

Dieser Beitrag ist recht interessant, die Zusammenhänge noch viel mehr. Und wie schon "Rabenauge" vermutet, bin ich zu einem ähnlichen Ergebnis gekommen. Folgende Story dazu:

Unabhängig von all dem hier experimentiere ich gerne mit OOP herum, eigentlich recht erfolgreich. Bis auf die Tatsache, dass mir die IDE seit kurzem total seltsame Fehler rauswirft und ich recht fatale Klimmzüge machen muss damit alles halbwegs läuft. Ich nutzte bisher die IDE 1.06 und 1.6.0, darunter lief alles. Die Fehler tauchten (bei mir) erst mit der IDE 1.6.9 auf. Ebenso AUCH die Probleme mit dem "Müll" über die serielle Schnittstelle. Dieses störte mich jedoch weniger weil ich diese fast nie nutze. Aber bezüglich meiner obigen (fehlerhaften) Experimente wollte ich fast schon aufgeben - bis ich dann gestern per Zufall einen Beitrag von "combie" gelesen hatte.

Er hatte 04/2015 exakt die selben Fehlermeldungen und berichtete, dass er dann die "LD.EXE" aus einer älteren Fassung in eine neue kopiert hatte. Seit dem wären die Fehler weg...

Das hat mich heute morgen dazu gebracht, genau dieses einmal auszuprobieren. Und siehe da: Die IDE 1.6.9 übersetzt meine Sketches nun anstandslos! Und auch der Müll im seriellen Monitor ist plötzlich verschwunden!

Das klingt alles nach "Dirty Trick" und/oder "an den Haaren herbeigezogen". Aber auf jeden Fall läuft bei mir nun alles sauber und ohne Schrott im seriellen Monitor. Woran das nun genau liegt weiss ich nicht. Aber solange ich nun ohne Probleme arbeiten kann ist es doch gut?!

Hier der Link zu combie's Beitrag:
https://forum.arduino.cc/index.php?topic=318273.0

Aaaaaber!

Linux Konsole mit cu ist es das selbe!
Somit scheidet die IDE Variante aus für mich...