So löschen Sie den seriellen Arduino-Puffer

So Loschen Sie Den Seriellen Arduino Puffer



Arduino ist eine elektronische Plattform, die Anweisungen von Benutzern in Form von Code entgegennimmt, der als Sketch bekannt ist, und eine entsprechende Ausgabe generiert. Um die Anweisungen zu sammeln und einzeln zu verarbeiten, verwendet der Arduino einen seriellen Puffer. Der serielle Puffer von Arduino hält die eingehenden Daten, bis das Gerät bereit ist, sie zu verarbeiten. Manchmal müssen wir den seriellen Arduino-Puffer löschen, um Interferenzen mit eingehenden Daten zu vermeiden. Sehen wir uns das genauer an.

Serieller Arduino-Puffer

Wir alle wissen also, dass Arduino über ein serielles Kommunikationsprotokoll namens USART kommuniziert. Ja, Arduino hat einige andere Protokolle wie SPI, I2C, aber USART ist das gebräuchlichste und am häufigsten verwendete Protokoll. Wenn Sie daran interessiert sind, alle drei Arduino-Protokolle zu lesen, klicken Sie auf hier .







Serielle Arduino-Puffer sammeln die eingehenden seriellen Zeichen und halten sie, bis der Mikrocontroller sie verarbeiten kann. Serielle Kommunikation ist die Methode zum Übertragen von Daten von einem Gerät zum anderen. Arduino, das USART-Hardware auf seinen Platinen verwendet, setzt alle 8 Bits zu einem Byte zusammen. Speichern Sie diese Bytes dann im seriellen Puffer, maximal 64 Bytes können im seriellen Arduino-Puffer gespeichert werden.



Löschen Sie den seriellen Arduino-Puffer

Serielle Arduino-Puffer haben begrenzten Speicher zum Speichern von Daten, falls der Speicher überläuft oder eine große Datenmenge am seriellen Pin vorhanden ist, müssen wir zuerst den seriellen Puffer löschen, um eingehende Daten zu speichern. Lassen Sie uns herausfinden, wie Sie den seriellen Arduino-Puffer löschen können.



Möglichkeiten zum Löschen des seriellen Arduino-Puffers

Um Speicherplatz im seriellen Puffer freizugeben, damit er mit neuen Daten aktualisiert werden kann, kann es auf zwei Arten hilfreich sein:





    • Löschen Sie den seriellen Puffer mit der Funktion Serial.flush()
    • Löschen Sie den seriellen Puffer mit der Funktion Serial.begin()

1: Seriellen Puffer mit der Funktion Serial.flush() löschen

Die erste Methode, die einen seriellen Arduino-Puffer löschen kann, ist die Verwendung einer Serial.flush()-Funktion. Diese Funktion gehört zur seriellen Bibliotheksfunktion von Arduino.

Serial.flush()

Die Funktion Arduino Serial.flush() wartet darauf, dass die Daten vollständig übertragen werden. Anstatt die eingehenden Daten zu verwerfen, erlaubt es ihm zu warten, damit der serielle Puffer die neuen Daten empfangen kann, sobald die Daten im Puffer vollständig übertragen wurden.



Notiz : Nach der Verwendung von Serial.flush() kann es länger dauern, bis Programme ausgeführt und auf dem seriellen Monitor ausgegeben werden. Ab sofort wartet der Arduino-Code, sobald alle Daten übertragen wurden, damit er neue Daten in seinem Speicher speichern kann.

Syntax

Serial.flush ( )

Parameter

Es braucht nur einen Parameter.

Seriennummer: Objekt der seriellen Schnittstelle

Kehrt zurück

Diese Funktion gibt nichts zurück.

Beispielcode

Hier ist der Code, der geschrieben wird, ohne die Funktion Serial.flush() zu verwenden:

ungültige Einrichtung ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Starten Sie den Code, indem Sie die aktuelle Arduino-Uhr speichern Zeit */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
unsigned long millis_FlushStop = millis ( ) ; /* aktuell Zeit an dieser Stelle */
Serial.print ( F ( 'Ohne Spülfunktion geht es' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Drucke Zeit vom seriellen Puffer genommen, um Daten zu drucken */
Serial.println ( F ( 'Millisekunden.' ) ) ;
}
Leere Schleife ( ) {
}


Im obigen Code haben wir drei verschiedene Strings initialisiert und den Code gestartet, indem wir die aktuelle Zeit aus der Funktion millis () genommen und in einer neuen Variablen gespeichert haben. Sobald die Daten erneut mit der Funktion millis () gedruckt werden, übergeben wir die aktuelle Zeit an eine neue Variable.

Sobald beide Zeiten in zwei Variablen empfangen werden, gibt uns die Differenz die Zeit, die Arduino benötigt, um die drei definierten Zeichenfolgen in Millisekunden zu drucken.


Im Ausgabeterminal ist ersichtlich, dass es 9 ms dauert, um die definierte Zeichenfolge zu drucken.


In dem unten angegebenen Code verwenden wir nun die Funktion Serial.flush(), die es allen Zeichenfolgen ermöglicht, zu passieren und dort zu warten, bis der serielle Puffer frei wird, um die nächsten Daten zu empfangen. Daher dauert es im Vergleich zum Drucken von Daten ohne Verwendung von Serial.flush() länger.

ungültige Einrichtung ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Starten Sie den Code, indem Sie die aktuelle Arduino-Uhr speichern Zeit */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; /* Wartet zum Daten, die nach diesem Flush-Speicher übertragen werden sollen */
unsigned long millis_FlushStop = millis ( ) ; /* aktuell Zeit an dieser Stelle */
Serial.print ( F ( 'Mit Spülfunktion dauert es ' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Drucke Zeit vom seriellen Puffer genommen, um Daten zu drucken */
Serial.println ( F ( 'Millisekunden.' ) ) ;
}
Leere Schleife ( ) {
}


Dieser Code ähnelt dem zuvor erläuterten. Der Unterschied hier ist die Funktion Serial.flush(), die es dem Programm ermöglicht, einige zusätzliche Zeit zu warten, bis der serielle Pufferspeicher für den Empfang der nächsten Daten frei wird.


In der Ausgabe können wir deutlich sehen, dass es diesmal 76 ms dauert, um die drei Zeichenfolgen zu drucken, im Vergleich zum vorherigen, der nur 9 ms dauert.

2: Löschen Sie den seriellen Puffer mit der Funktion Serial.begin()

Bisher haben wir die Funktion Serial.flush() erklärt, um den seriellen Puffer zu löschen, aber diese Funktion muss warten, bis die Daten vollständig übertragen sind. Jetzt stellen sich die Fragen, was ist, wenn wir die eingehenden Daten im seriellen Puffer löschen möchten. Die Antwort auf die Frage ist einfach: Wir können dies mit a tun während Schleife mit der Serial Library-Funktion.

Syntax

während ( Seriell verfügbar ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Code

String val;
ungültige Einrichtung ( ) {
}
Leere Schleife ( ) {
wenn ( Seriell verfügbar ( ) ) { /* überprüfen zum serielle Daten */
Wert = '' ;
während ( Seriell verfügbar ( ) ) { /* lesen serielle Daten wenn verfügbar */
verkohlen Serial_Data = Serial.read ( ) ;
Wert =val+Serial_Data; /* Daten in neuem String speichern */
}
Serial.println ( Wert ) ; /* Drucken Sie die lesen Daten */
Serial.end ( ) ; /* serielle Kommunikation beenden */
Serial.begin ( 9600 ) ; /* klar serieller Puffer */
}
}


Arduino verwendet Serial.begin()-Funktionen, um die serielle Kommunikation zu initialisieren, indem die Baudrate definiert wird. Sobald diese Funktion initialisiert ist, werden die zuvor im Arduino-Speicher gespeicherten Daten klar. Hier werden wir mit der Funktion Serial.available () nach den seriellen Daten suchen, sobald die Daten gelesen sind, werden sie in einer neuen Zeichenfolge gespeichert, und schließlich mit Serial.begin (9600) löschen wir den seriellen Arduino-Puffer.

Notiz: Wir müssen den seriellen Puffer leeren, da er sicherstellt, dass Daten an das Gerät gesendet wurden und nicht darauf warten, gesendet zu werden.

Fazit

Um den seriellen Arduino-Puffer zu löschen, damit er neue Daten im Pufferspeicher speichern kann, können Serial.flush() und Serial begin verwendet werden. Es kann verwendet werden, um den seriellen Arduino-Puffer zu löschen, aber wir müssen warten, bis alle Daten übertragen wurden, um dies zu vermeiden. Wir können eine While-Schleife mit der Funktion Serial.begin() verwenden, die auch eingehende Daten aus dem seriellen Puffer löschen kann.