Ich habe eine einfache Skizze, die "Hello World" zur Serie druckt, aber ich bekomme stattdessen eine Menge Kauderwelsch.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
Warum wird "Hello World" nicht wie im Code angegeben gedruckt?
Antworten:
Die Karte und das Terminal verwenden wahrscheinlich nicht die gleiche Baudrate. Überprüfen Sie die untere rechte Ecke des Arduino Serial Terminal und stellen Sie sicher, dass es auf 9600 eingestellt ist.
Serielle Daten
Serielle Kommunikation funktioniert, indem der gesamte Datenstrom bitweise gesendet wird. Dies steht im Gegensatz zum standardmäßigen parallelen Port, der jeweils ein Byte sendet. Beide Geräte müssen wissen, mit welcher Geschwindigkeit die Daten gesendet werden. Außerdem müssen beide Geräte mit der gleichen Geschwindigkeit arbeiten. Dies nennt man die Baudrate.
Baudrate
Baud bedeutet eigentlich nur Impulse pro Sekunde. Bei der seriellen Kommunikation bedeutet dies, wie viele Bits pro Sekunde übertragen werden. Einer der gebräuchlichsten Werte ist 9600, aber es gibt auch andere gebräuchliche Werte, die Faktoren oder Vielfache von 9600 sind. Es spielt jedoch keine Rolle, solange beide Geräte mit der gleichen Geschwindigkeit arbeiten.
Wenn ich Ihnen Nachrichten schneller sende, als Sie sie erhalten, gehen Daten verloren. Wenn ich Ihnen Nachrichten langsamer sende, als Sie sie empfangen, wird der Unsinn mit dem vermengt, was ich Ihnen gesendet habe.
Daten, Parität, Stoppbits
Wenn Sie sich die Dokumentation
begin()
ansehen, werden Sie feststellen, dass zwei Parameter verwendet werden können:Hoffentlich verstehen Sie die Geschwindigkeit jetzt, es sind die Bits pro Sekunde, mit denen der Arduino kommunizieren wird.
Mit dem zweiten Parameter
config
können Sie einige andere Dinge zur seriellen Datenübertragung konfigurieren. Dies sind die Daten-, Paritäts- und Stoppbits. Sie werden auf der Seite sehen , es hat Werte wie5N1
,6N1
undSERIAL_8N1 (the default)
Die erste Zahl gibt an, wie viele Datenbits vorhanden sind. Das zweite Zeichen gibt an, welche Art von Paritätsbit vorhanden ist.
E
für gerade Parität,O
für ungerade Parität oderN
für keine Parität. Die dritte Zahl gibt an, wie viele Stoppbits vorhanden sind.Mit 8N1 werden also wirklich 10 Bits für jeweils 8 Bits "Ihrer" Daten gesendet. 1 Startbit, 8 Datenbits und 1 Stoppbit.
Auf jeden Fall müssen sich beide Seiten auf diese Informationen sowie die Geschwindigkeit einigen. Das serielle Arduino-Terminal bietet Ihnen nicht die Möglichkeit, diese Einstellungen zu ändern, andere jedoch, sodass Sie sicherstellen müssen, dass alle diese Konfigurationseinstellungen identisch sind.
Weitere Informationen im Wiki: Asynchrone serielle Kommunikation
quelle
Sachleens Antwort (oben) lautet:
Wenn diese Zahl 9600 ist und Sie immer noch verstümmelte Daten erhalten, überprüfen Sie die Ausgabe, die Sie beim Hochladen des Codes erhalten haben. Es sollte ungefähr so lauten:
In der unteren Zeile (von dem, was ich gepostet habe) ist die Standard-Baudrate Ihres Geräts angegeben. Für mich habe ich geändert
Serial.begin(9600);
->Serial.begin(57600);
und überprüft, ob in der unteren rechten Ecke meines Arduino Serial Terminal 57600 steht.Nachdem ich dies ausgeführt hatte und es funktionierte, konnte ich auf 9600 zurückschalten und nicht verstümmelte Daten abrufen. Arduino scheint pingelig zu sein ...
quelle
Ich habe eine halbe Stunde lang versucht, das zu lösen, und es war mein Arduino Pro Mini mit 3,3 V, und ich hatte 5 V in der Arduino IDE (auf dem PC) ausgewählt. Der serielle Druck funktioniert auch bei gleicher Baudrate nie so.
Wählen Sie die richtige Karte in der Arduino IDE.
Um dies zu verdeutlichen, muss der richtige Prozessor (Spannung / Taktrate) auf der Registerkarte Tools ausgewählt werden.
quelle