Serielle Übertragung in "Paketen"?

Hallo, ich habe eine Frage zur Seriellen Datenübertrag: Wenn ich z.B. mit

Serial.println("AD*");

Daten vom Arduino an ein Gerät sende, wird der ganze Teil "AD*" auf einmal gesendet, oder die einzelnen Zeichen A, D, * hintereinander? Falls diese nicht als "Paket" versendet werden ,wie kann man dies ermöglichen? (z.B. bestimmtes Kommando/Zeichen zeigt Ende des "Datenpakets" an)

Vielen Dank

Niete: Falls diese nicht als "Paket" versendet werden ,wie kann man dies ermöglichen? (z.B. bestimmtes Kommando/Zeichen zeigt Ende des "Datenpakets" an)

Im "Seriellen Monitor" kannst Du es einstellen, ob eine gesendete Zeile mit bestimmten Steuerzeichen abgeschlossen werden soll. Solange Du den Seriellen Monitor verwendest,, kannst Du entweder ein NL (New Line) oder ein CR (Carriage Return) oder beides oder "kein Zeilenende" mitsenden.

An den Steuerzeichen kannst Du dann erkennen, dass die gesendete Zeile zuende ist. Das ist "rechts unten" im seriellen Monitor einstellbar.

In der umgekehrten Richtung, mit Arduino als Sender, entspricht ein: Serial.println("AD*"); der Einstellung "NL + CR am Zeilenende senden".

Und ob die Zeichen als Paket oder nacheinander gesendet werden, ist eine nette Frage.

Sogar ein einzelnes Zeichen wird in 10 Schritten gesendet. Und jedesmal, wenn 10 Schritte angekommen sind, hat der Empfänger 1 neues Zeichen. Andererseits wird ein Arduino in der Regel beim Ausgeben eines Textes über HardwareSerial nicht viel mehr als das vereinbarte 1 Stopbit erzeugen, du bekommst also den Text "am Stück" so gut es eben seriell geht.

Es ist immer sinnvoll, Endezeichen mitzusenden. Bei lesbarem Text bieten sich die 'NeueZeile' Zeichen an. Das ist erheblich einfacher als -- abhängig von der seriellen Geschwindigkeit -- zu prüfen ob nun offensichtlich der Sender eine Pause macht. 9600 ~ 1 Zeichen/msec 115200 ~ 10 Zeichen/msec oder ca. 100 µs / Zeichen

Die Serielle Schnittstelle hat keinen Packetmodus. Du kannst um zu wissen ob ein Datenpacket angekommen / vollstädig verschickt wurde: * Konstante Länge (Anzahl) der versannten Zeichen * Timeout (nach x mS ist das Packet fertig), dazu braucht es nicht das Wissen über die Anzahl der übertragenen Zeichen. * Start bzw Endsequenz aus einer besimmten Zeichenfolge bzw eines bestimmten Zeichens, das in den versendeten Zeichen nicht vorhanden ist. Grüße Uwe

Man kann auch Pakete unterschiedlicher Länge senden und am Anfang die Länge mit übertragen. Dann weiß man am anderen Ende wie viel eingelesen werden muss.

Vielen Dank schonmal,

wenn ich mit PuTTY folgende Daten über die serielle Schnittstelle sende

AD* (dann ENTER-Taste drücken) MW* (dann ENTER-Taste drücken) AD* (dann ENTER-Taste drücken) EF (dann ENTER-Taste drücken) LZ (dann ENTER-Taste drücken) SE (dann ENTER-Taste drücken) SY* (dann ENTER-Taste drücken)

reagiert eine von mir angeschlossene Steuerbox und führt die Befehle aus, die für die entsprechenden eingaben Eingaben programmiert sind. Dies erfolgt jedoch nur nach ENTER-Tastendruck: In diesem Moment wird beispielsweise der Befehl "AD*" von der Box verarbeitet.

Wenn ich die gleichen Befehle mit dem Arduino folgendermaßen sende

  delay(1000);
  Serial1.begin(9600);  
  delay(1000);
  Serial1.println("AD*");
  delay(200);
  Serial1.println("MW*");
  delay(200);
  Serial1.println("EF");
  delay(200);
  Serial1.println("LZ");
  delay(200);
  Serial1.println("SE");
  delay(200);
  Serial1.println("SY*");
  delay(3000);

zeigt sie jedoch keine Reaktion(Im Serial Monitor werden diese erfolgreich aufgenommen). Kann mir jemand erklären, worin der Unterschied in der seriellen Datenübertragung zwischen Arduino und dem Terminalprogramm PuTTY besteht? Es muss doch möglich sein, die Daten mit dem Arduino auf die gleiche Art zu übertragen.

Hast du den Arduino richtig an die Steuerbox angeschlossen? Vielleicht Rx und Tx vertauscht?
Ist ein Mega2560, da du Serial1 verwendest oder?

Ja, es ist ein MEGA2560, Anschlüsse hab ich überprüft und sogar noch einmal anders herum getestet. Es muss wohl am RETURN liegen. Gibt es eine Möglichkeit, einen RETURN-Befehl zu senden?

Hallo, Kannst Du uns mal die Schaltung zeigen? Grüße, Jürgen

Ich rate mal, dass Putty nicht in “Paketen” sendet.
Sondern jeden Buchstaben sofort: A ----- D ------------ * ------------------

SerialMonitor und Arduino senden eine EingabeZeile jedenfalls erst bei Betätigung der Enter-Taste, bzw. wenn der Befehl
println ausgeführt wird.
Wie verhält sich deine Steuerbox denn am SerialMonitor ?

Ein RETURN ist entweder ein 0x0D = 13 = ‘\r’
oder ein 0x0A = 10 = ‘\n’
oder beides, vorzugsweise in der Reihenfolge “\r\n”
Senden kannst du es natürlich auch einzeln vom Arduino mit write oder print statt println.
Auch im SerialMonitor kannst du einstellen, was bei Enter zusätzlich zu den eingetippten Buchstaben gesendet werden soll.