Cum să ștergeți tamponul serial Arduino

Cum Sa Stergeti Tamponul Serial Arduino



Arduino este o platformă electronică care preia instrucțiuni de la utilizatori sub formă de cod cunoscut sub numele de schiță și generează rezultate în consecință. Pentru a colecta instrucțiunile și a le procesa unul câte unul, Arduino folosește un tampon serial. Bufferul serial Arduino reține datele primite până când dispozitivul este gata să le proceseze. Uneori trebuie să ștergem tamponul serial Arduino pentru a evita interferența cu datele primite. Să vedem asta mai detaliat.

Arduino Serial Buffer

Deci, știm cu toții că Arduino comunică folosind protocolul de comunicare serială cunoscut sub numele de USART. Da, Arduino are și alte protocoale, cum ar fi SPI, I2C, dar USART este protocolul cel mai comun și mai frecvent utilizat. Dacă sunteți interesat să citiți toate cele trei protocoale Arduino, faceți clic Aici .







Bufferele seriale Arduino colectează caracterele seriale primite și le păstrează până când microcontrolerul le poate procesa. Comunicarea în serie este metoda de transfer de date de la un dispozitiv la altul. Arduino folosind hardware-ul USART pe plăcile sale asamblează fiecare 8 biți într-un octet. Apoi stocați acești octeți în tamponul serial, maxim 64 de octeți pot fi stocați în memoria tampon serial Arduino.



Ștergeți tamponul serial Arduino

Bufferele seriale Arduino au o memorie limitată pentru a stoca date în cazul în care, dacă memoria depășește sau o cantitate mare de date există la pinul serial, trebuie să ștergem mai întâi tamponul serial pentru a stoca datele primite. Să aflăm modalități posibile de ștergere a tamponului serial Arduino.



Modalități de a șterge tamponul serial Arduino

Pentru a elibera spațiu serial tampon, astfel încât să poată fi actualizat cu date noi, urmând cele două moduri poate fi utilă:





    • Ștergeți tamponul serial utilizând funcția Serial.flush().
    • Ștergeți Serial Buffer folosind funcția Serial.begin().

1: Ștergeți tamponul serial utilizând funcția Serial.flush().

Deci, prima metodă care poate șterge un buffer serial Arduino este utilizarea unei funcții Serial.flush(). Această funcție aparține funcției de bibliotecă serială Arduino.

Serial.flush()

Funcția Arduino Serial.flush() așteaptă ca datele să fie transmise complet. În loc să renunțe la datele primite, îi permite să aștepte, astfel încât odată ce datele din interiorul bufferului sunt transmise complet, tamponul serial poate primi noile date.



Notă : După utilizarea programelor Serial.flush(), executarea și imprimarea rezultatelor pe monitorul serial poate dura mai mult. De acum, codul Arduino așteaptă odată ce toate datele sunt transmise, astfel încât să poată stoca date noi în memoria sa.

Sintaxă

Serial.flush ( )

Parametrii

Este nevoie de un singur parametru.

Serial: Obiect port serial

Se intoarce

Această funcție nu returnează nimic.

Exemplu de cod

Iată codul care este scris fără a utiliza funcția Serial.flush():

anulează configurarea ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = milis ( ) ; /* Porniți codul salvând ceasul Arduino curent timp */
Serial.println ( F ( „Linuxhint.com/Arduino” ) ) ;
Serial.println ( F ( „Linuxhint.com/RaspberryPi” ) ) ;
Serial.println ( F ( „Linuxhint.com/Tutorial” ) ) ;
unsigned long millis_FlushStop = milis ( ) ; /* actual timp în acest moment */
Serial.print ( F ( „Fără funcție Flush este nevoie” ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Printuri timp luate de tampon serial pentru a imprima datele */
Serial.println ( F ( „milisecunde”. ) ) ;
}
buclă goală ( ) {
}


În codul de mai sus, am inițializat trei șiruri de caractere diferite și am început codul luând timpul curent din funcția millis() și salvându-l într-o nouă variabilă. Odată ce datele sunt imprimate din nou utilizând funcția millis(), trecem timpul prezent unei variabile noi.

Odată ce ambele timpi sunt primite în interiorul a două variabile, diferența ne va oferi timpul necesar Arduino pentru a tipări cele trei șiruri definite în milisecunde.


În terminalul de ieșire se poate vedea că durează 9 ms pentru a imprima șirul definit.


Acum, în codul de mai jos vom folosi funcția Serial.flush() care va permite tuturor șirurilor să treacă și așteptăm acolo până când tamponul serial devine clar pentru a primi următoarele date. Prin urmare, va dura mai mult timp în comparație cu imprimarea datelor fără a utiliza Serial.flush().

anulează configurarea ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = milis ( ) ; /* Porniți codul salvând ceasul Arduino curent timp */
Serial.println ( F ( „Linuxhint.com/Arduino” ) ) ;
Serial.println ( F ( „Linuxhint.com/RaspberryPi” ) ) ;
Serial.println ( F ( „Linuxhint.com/Tutorial” ) ) ;
Serial.flush ( ) ; /* Așteaptă pentru datele care urmează să fie transmise după acea memorie de spălare */
unsigned long millis_FlushStop = milis ( ) ; /* actual timp în acest moment */
Serial.print ( F ( „Cu funcția Flush este nevoie” ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Printuri timp luate de tampon serial pentru a tipări datele */
Serial.println ( F ( „milisecunde”. ) ) ;
}
buclă goală ( ) {
}


Acest cod este similar cu cel pe care l-am explicat mai devreme. Diferența aici este funcția Serial.flush() care permite programului să aștepte ceva timp suplimentar până când memoria tampon serial devine liberă pentru primirea următoarelor date.


La ieșire putem vedea clar că de data aceasta durează 76 ms pentru a imprima cele trei șiruri în comparație cu cel precedent, care durează doar 9 ms.

2: Ștergeți Serial Buffer folosind funcția Serial.begin().

Până acum am explicat funcția Serial.flush() pentru a șterge buffer-ul serial, dar această funcție trebuie să aștepte ca datele să fie transmise complet, acum ne vin în minte întrebările dacă vrem să ștergem datele primite din bufferul serial. Răspunsul la întrebare este simplu: putem face acest lucru folosind a in timp ce buclă cu funcția de bibliotecă serială.

Sintaxă

in timp ce ( Serial.disponibil ( ) )
Serial.citeşte ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Cod

String val;
anulează configurarea ( ) {
}
buclă goală ( ) {
dacă ( Serial.disponibil ( ) ) { /* Verifica pentru date seriale */
val = '' ;
in timp ce ( Serial.disponibil ( ) ) { /* citit date seriale dacă disponibil */
char Serial_Data = Serial.read ( ) ;
val =val+Serial_Data; /* stocați datele într-un șir nou */
}
Serial.println ( val ) ; /* tipăriți citit date */
Serial.end ( ) ; /* terminați comunicarea în serie */
Serial.begin ( 9600 ) ; /* clar tampon serial */
}
}


Arduino folosește funcțiile Serial.begin() pentru a inițializa comunicarea serială prin definirea vitezei de transmisie, odată ce această funcție este inițializată, datele stocate anterior în memoria Arduino devin clare. Aici vom verifica datele seriale folosind funcția Serial.available() odată ce datele sunt citite, acestea vor fi stocate într-un șir nou și, în sfârșit, folosind Serial.begin(9600) vom șterge tamponul serial Arduino.

Notă: Trebuie să ștergem tamponul serial, deoarece se asigură că datele au fost trimise către dispozitiv și pur și simplu nu așteaptă sau sunt în așteptare să fie trimise.

Concluzie

Pentru a șterge tamponul serial Arduino, astfel încât să poată stoca date noi în memoria tampon, pot fi utilizate Serial.flush() și Serial begin. Poate fi folosit pentru a șterge tamponul serial Arduino, dar trebuie să așteptăm odată ce toate datele sunt transmise pentru a evita acest lucru, putem folosi o buclă while cu funcția Serial.begin() care poate șterge și datele primite din tamponul serial.