Jak usunąć bufor seryjny Arduino

Jak usunąć bufor seryjny Arduino

Arduino to platforma elektroniczna, która przyjmuje instrukcje od użytkowników w formie kodu znanego jako szkic i odpowiednio generuje wyjście. Aby zebrać instrukcje i przetworzyć je jeden po drugim, Arduino używa bufora szeregowego. Bufor szeregowy Arduino przechowuje dane przychodzące, dopóki urządzenie będzie gotowe do ich przetworzenia. Czasami musimy wyczyścić bufor szeregowy Arduino, aby uniknąć zakłóceń z danymi przychodzącymi. Zobaczmy to bardziej szczegółowo.

Bufor szeregowy Arduino

Tak więc wszyscy wiemy, że Arduino komunikuje się przy użyciu szeregowego protokołu komunikacji znanego jako USART. Tak, Arduino ma inne protokoły, takie jak SPI, I2C, ale USART jest najczęstszym i często używanym protokołem. Jeśli jesteś zainteresowany przeczytaniem Arduino wszystkich trzech protokołów, kliknij tutaj.

Arduino seryjne bufory zbierają przychodzące znaki szeregowe i przytrzymują je, dopóki mikrokontroler nie będzie mógł je przetworzyć. Komunikacja szeregowa to metoda przesyłania danych z jednego urządzenia do drugiego. Arduino używa sprzętu USART na swoich płytach, składa każde 8 bitów w bajt. Następnie przechowuj te bajty w buforze szeregowym, maksymalnie 64 bajty można przechowywać w buforze szeregowym Arduino.

Clear Arduino seryjny

Bufory szeregowe Arduino mają ograniczoną pamięć do przechowywania danych w przypadku, gdy pamięć przepełnia się lub duża ilość danych, musimy najpierw wyczyścić bufor szeregowy, aby przechowywać przychodzące dane. Dowiedzmy się możliwych sposobów wyczyszczenia bufora seryjnego Arduino.

Sposoby wyczyszczenia bufora seryjnego Arduino

Pomocne może być zwolnienie przestrzeni bufora szeregowego, aby można go było aktualizować o nowe dane po dwóch sposobach:

    • Jasne bufor szeregowy za pomocą szeregowego.funkcja flush ()
    • Jasne bufor szeregowy za pomocą szeregowego.Funkcja początkowa ()

1: Wyczyść bufor szeregowy za pomocą szeregowego.funkcja flush ()

Zatem pierwszą metodą, która może oczyścić bufor szeregowy Arduino, jest użycie szeregowego.funkcja flush (). Ta funkcja należy do funkcji biblioteki szeregowej Arduino.

Seryjny.spłukać()

Arduino Serial.funkcja flush () czeka, aż dane zostaną całkowicie przesłane. Zamiast odrzucić przychodzące dane, pozwala mu czekać, więc gdy dane wewnątrz bufora zostaną całkowicie przesłane, bufor szeregowy może odbierać nowe dane.

Notatka: Po użyciu seryjnego.Programy Flush () mogą zająć więcej czasu na wykonanie i drukowanie wyjściowych na monitor szeregowych. Na razie kod Arduino czeka po przesłaniu wszystkich danych, aby mógł przechowywać nowe dane w pamięci.

Składnia

Seryjny.spłukać()

Parametry

Wymaga tylko jednego parametru.

Seryjny: Obiekt portu szeregowego

Zwroty

Ta funkcja nic nie zwraca.

Przykładowy kod

Oto kod, który jest napisany bez użycia szeregowej.Flush () Funkcja:

void setup ()
Seryjny.rozpocząć (9600);
niepodpisany długi millis_flushstart = millis (); /*Kod startowy przez zapisywanie bieżącego czasu zegara Arduino*/
Seryjny.println (f („Linuxhint.com/arduino "));
Seryjny.println (f („Linuxhint.com/raspberrypi "));
Seryjny.println (f („Linuxhint.com/tutorial "));
niepodpisany długi millis_flushstop = millis (); /*aktualny czas w tym momencie*/
Seryjny.print (f („bez funkcji spłukiwania”));
Seryjny.print (millis_flushstop - millis_flushstart); /*Drukuje czas poświęcony buforze szeregowym, aby wydrukować dane*/
Seryjny.println (f („milisekund."));

void Loop ()


W powyższym kodzie zainicjowaliśmy trzy różne ciągi i rozpoczęliśmy kod, odbywając bieżący czas z funkcji Millis () i zapisując go w nowej zmiennej. Po ponownym wydrukowaniu danych za pomocą funkcji MILLIS () przekazujemy czas obecny do nowej zmiennej.

Po otrzymaniu obu czasu w dwóch zmiennych różnica da nam czas poświęcony przez Arduino na wydrukowanie trzech zdefiniowanych ciągów w milisekundach.


W terminalu wyjściowym można zobaczyć, że wydrukowanie zdefiniowanego ciągu zajmuje 9 ms.


Teraz w podanym poniżej kodzie użyjemy serialu.Flush () funkcja, która pozwoli przejść wszystkie struny i poczekać, aż bufor szeregowy stanie się jasny, aby otrzymać następne dane. Dlatego zajmie to dodatkowy czas w porównaniu do drukowania danych bez użycia szeregowej.spłukać().

void setup ()
Seryjny.rozpocząć (9600);
niepodpisany długi millis_flushstart = millis (); /*Kod startowy przez zapisywanie bieżącego czasu zegara Arduino*/
Seryjny.println (f („Linuxhint.com/arduino "));
Seryjny.println (f („Linuxhint.com/raspberrypi "));
Seryjny.println (f („Linuxhint.com/tutorial "));
Seryjny.spłukać(); /*Czeka, aż dane zostaną przesłane po tej pamięci Flush*/
niepodpisany długi millis_flushstop = millis (); /*aktualny czas w tym momencie*/
Seryjny.print (f („z funkcją spłukiwania”));
Seryjny.print (millis_flushstop - millis_flushstart); /*Drukuje czas poświęcony buforze szeregowym, aby wydrukować dane*/
Seryjny.println (f („milisekund."));

void Loop ()


Ten kod jest podobny do tego, który wyjaśniliśmy wcześniej. Różnica tutaj jest szeregowa.funkcja flush (), która pozwala programowi czekać na dodatkowy czas, aż pamięć bufora szeregowego stanie się jasne w celu otrzymania następnych danych.


W wyjściu możemy wyraźnie zobaczyć, że tym razem wydrukowanie trzech ciągów w porównaniu z poprzednim zajmuje 76 ms.

2: Wyczyść bufor szeregowy za pomocą szeregowego.Funkcja początkowa ()

Do tej pory wyjaśniliśmy szereg funkcji.flush () w celu wyczyszczenia buforu szeregowego, ale ta funkcja musi poczekać, aż dane zostaną całkowicie przesłane, teraz pojawiają się pytania, co, jeśli chcemy wyczyścić przychodzące dane w buforze szeregowym. Odpowiedź na pytanie jest prosta: możemy to zrobić za pomocą chwila pętla z funkcją biblioteki szeregowej.

Składnia

When (serial.dostępny())
Seryjny.Czytać();
Seryjny.koniec();
Seryjny.rozpocząć (9600);

Kod

String Val;
void setup ()

void Loop ()
if (serial.Dostępne ()) /*Sprawdź dane szeregowe* /
val = "";
When (serial.Dostępne ()) /*odczyt dane szeregowe, jeśli są dostępne* /
char serial_data = serial.Czytać();
val = val+serial_data; /*przechowuj dane w nowym ciągu*/

Seryjny.println (val); /*Wydrukuj dane odczytu*/
Seryjny.koniec(); /*końcowa komunikacja szeregowa*/
Seryjny.rozpocząć (9600); /*Wyczyść bufor szeregowy*/


Arduino używa szeregowego.Rozpoczęcie () funkcje inicjowania komunikacji szeregowej poprzez definiowanie szybkości BAUD, po zainicjowaniu tej funkcji dane wcześniej przechowywane w pamięci Arduino stają się jasne. Tutaj sprawdzimy dane szeregowe za pomocą szeregów.dostępna () funkcja po odczytaniu danych będzie przechowywać w nowym ciągu, a na koniec za pomocą szeregów.Rozpocznij (9600) Wyczyścimy bufor seryjny Arduino.

Notatka: Musimy wypłukać bufor szeregowy, ponieważ zapewnia on, że dane zostały wysłane do urządzenia i po prostu nie czeka lub wstrzymują się, aby je wysłać.

Wniosek

Aby wyczyścić bufor szeregowy Arduino, aby mógł przechowywać nowe dane w serialu pamięci bufora.można użyć flush () i początek seryjnego. Można go użyć do wyczyszczenia buforu szeregowego Arduino, ale musimy poczekać, kiedy wszystkie dane zostaną przesyłane, aby tego uniknąć, możemy użyć pętli z serialem.Funkcja początkowa (), która może również usunąć przychodzące dane z bufora szeregowego.