Arduino ist eine elektronische Plattform, die Anweisungen von Benutzern in Form von Code nimmt. Um die Anweisungen zu sammeln und sie nacheinander zu verarbeiten, verwendet der Arduino einen seriellen Puffer. Der Arduino -Serienpuffer enthält die eingehenden Daten, bis das Gerät zur Verarbeitung bereit ist. Manchmal müssen wir den Arduino -Serienpuffer löschen, um Störungen mit eingehenden Daten zu vermeiden. Lassen Sie uns dies genauer sehen.
Arduino Serienpuffer
Wir alle wissen also alle, dass Arduino mit einem seriellen Kommunikationsprotokoll, der als USAart bekannt ist, kommuniziert. Ja, Arduino hat einige andere Protokolle wie SPI, I2C, aber USAart ist das häufigste und am häufigsten verwendete Protokoll. Wenn Sie Interesse daran haben, Arduino alle drei Protokolle zu lesen, klicken Sie hier.
Arduino -Serienpuffer sammeln die eingehenden Serienzeichen und halten sie, bis der Mikrocontroller sie verarbeiten kann. Die serielle Kommunikation ist die Methode zum Übertragen von Daten von einem Gerät auf ein anderes. Arduino verwendete USAart -Hardware auf seinen Board. Speichern Sie diese Bytes dann im Serienpuffer, maximal 64 Bytes können im Arduino -Serienpuffer gespeichert werden.
Klarer Arduino -Serienpuffer
Arduino -Serienpuffer haben einen begrenzten Speicher, um Daten zu speichern, falls der Speicherüberlauf oder eine große Datenmenge am seriellen PIN vorhanden ist, müssen wir den seriellen Puffer zuerst löschen, um eingehende Daten zu speichern. Lassen Sie uns mögliche Möglichkeiten finden, den Arduino -Serienpuffer zu beseitigen.
Möglichkeiten, den Serienpuffer von Arduino zu löschen
Um den seriellen Pufferraum freizugeben, können Sie mit neuen Daten auf beiden Möglichkeiten aktualisiert werden, kann hilfreich sein:
1: Serienpuffer mit serieller Löschpuffer löschen.Flush () Funktion
Die erste Methode, die einen Arduino -Serienpuffer löschen kann.Flush () Funktion. Diese Funktion gehört zur Funktion der Serienbibliothek von Arduino.
Serie.spülen()
Arduino Serie.Die Funktion von Flush () wartet darauf, dass die Daten vollständig übertragen werden. Anstatt die eingehenden Daten zu verwerfen, können Sie warten, sobald die Daten im Puffer vollständig übertragen werden.
Notiz: Nach der Verwendung von Serien.FLUSH () -Programme können mehr Zeit in Anspruch nehmen, um die Ausgabe auf dem Serienmonitor auszuführen und auszudrucken. Ab sofort wartet Arduino Code, sobald alle Daten übertragen werden, damit neue Daten in seinem Speicher gespeichert werden können.
Syntax
Serie.spülen()
Parameter
Es dauert nur einen Parameter.
Serie: Seriennportobjekt
Kehrt zurück
Diese Funktion gibt nichts zurück.
Beispielcode
Hier ist der Code, der ohne Serien geschrieben wurde.Flush () Funktion:
void setup ()
Serie.Beginnen Sie (9600);
nicht signiert long Millis_flushstart = millis (); /*Code starten, indem Sie die aktuelle Arduino -Uhrzeit speichern*//
Serie.println (f ("LinuxHint.com/arduino "));
Serie.println (f ("LinuxHint.com/raspberrypi "));
Serie.println (f ("LinuxHint.com/tutorial "));
nicht signiert long Millis_flushStop = Millis (); /*aktuelle Zeit zu diesem Zeitpunkt*///
Serie.print (f ("ohne Flush -Funktion es nimmt"));
Serie.print (Millis_flushStop - millis_flushstart); /*Druckt die Zeit, die von einem seriellen Puffer in Anspruch genommen wurde, um Daten zu drucken*/
Serie.println (f ("Millisekunden."));
void Loop ()
In dem obigen Code haben wir drei verschiedene Zeichenfolgen initialisiert und den Code gestartet, indem wir die aktuelle Zeit von Millis () Funktion genommen und in eine neue Variable gespeichert haben. Sobald die Daten mithilfe von Millis () -Funktion erneut gedruckt sind, übergeben wir die gegenwärtige Zeit an eine neue Variable.
Sobald beide Zeit in zwei Variablen empfangen sind, gibt es uns die Zeit, die Arduino zum Drucken der drei definierten Saiten in Millisekunden benötigt.
In der Ausgangsklemme ist zu sehen, dass es 9 ms benötigt, um die definierte Zeichenfolge zu drucken.
Jetzt werden wir im unten angegebenen Code die Serie verwenden.Flush () -Funktion, mit der alle Saiten dort passieren und warten können, bis der Serienpuffer klar wird, um die nächsten Daten zu empfangen. Daher dauert es zusätzliche Zeit im Vergleich zu Druckdaten ohne serielle Verwendung.spülen().
void setup ()
Serie.Beginnen Sie (9600);
nicht signiert long Millis_flushstart = millis (); /*Code starten, indem Sie die aktuelle Arduino -Uhrzeit speichern*//
Serie.println (f ("LinuxHint.com/arduino "));
Serie.println (f ("LinuxHint.com/raspberrypi "));
Serie.println (f ("LinuxHint.com/tutorial "));
Serie.spülen(); /*Wartet darauf, dass Daten nach diesem Spülenspeicher übertragen werden*/
nicht signiert long Millis_flushStop = Millis (); /*aktuelle Zeit zu diesem Zeitpunkt*///
Serie.print (f ("mit Flush -Funktion, die es nimmt"));
Serie.print (Millis_flushStop - millis_flushstart); /*Druckt die Zeit, die von einem seriellen Puffer in Anspruch genommen wurde, um Daten zu drucken*/
Serie.println (f ("Millisekunden."));
void Loop ()
Dieser Code ähnelt einem, den wir zuvor erklärt haben. Der Unterschied hier ist seriell.Flush () -Funktion, mit der das Programm auf eine zusätzliche Zeit warten kann, bis der Speicher des seriellen Pufferspeichers für den Empfangen der nächsten Daten klar wird.
In der Ausgabe können wir deutlich erkennen, dass diesmal 76 ms erforderlich ist, um die drei Zeichenfolgen im Vergleich zu der vorherigen zu drucken, die nur 9 ms benötigt.
2: Serienpuffer mit seriell.begin () Funktion
Bisher haben wir die Funktionserie erklärt.Flush (), um den seriellen Puffer zu löschen, aber diese Funktion muss warten, bis die Daten vollständig übertragen werden. Jetzt kommen die Fragen, was, wenn wir die eingehenden Daten im Serienpuffer löschen möchten. Die Antwort auf die Frage ist einfach: Wir können dies mit a tun während Schleife mit der Serienbibliotheksfunktion.
Syntax
while (seriell.verfügbar())
Serie.lesen();
Serie.Ende();
Serie.Beginnen Sie (9600);
Code
Saite Val;
void setup ()
void Loop ()
if (seriell.verfügbar ()) /*nach seriellen Daten* /prüfen
val = "";
while (seriell.Verfügbar ()) /*Lesen serielle Daten, falls verfügbar
char Serial_data = serial.lesen();
val = val+serial_data; /*Daten in neuer Zeichenfolge speichern*/
Serie.println (val); /*Drucken Sie die Lesedaten*////
Serie.Ende(); /*Ende der seriellen Kommunikation enden*/
Serie.Beginnen Sie (9600); /*Serienpuffer löschen*//
Arduino verwendet Serien.begin () Funktionen zur Initialisierung der seriellen Kommunikation durch Definieren der Baud -Rate. Sobald diese Funktion initialisiert wurde, wird die zuvor im Arduino -Speicher gespeicherten Daten klar. Hier werden wir mit der seriellen seriellen Daten nach den seriellen Daten suchen.verfügbar.Beginnen Sie (9600) Wir werden den Arduino -Serienpuffer löschen.
Notiz: Wir müssen den seriellen Puffer spülen, da er sicherstellt.
Abschluss
So löschen.Flush () und Serien beginnen können verwendet werden. Es kann verwendet werden, um den Arduino -Serienpuffer zu löschen, aber wir müssen warten, sobald alle Daten übertragen werden, um dies zu vermeiden.begin () Funktion, die auch eingehende Daten aus dem Serienpuffer löschen kann.