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)
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
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.
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
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.
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?
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.