Kako počistiti serijski medpomnilnik Arduino

Kako Pocistiti Serijski Medpomnilnik Arduino



Arduino je elektronska platforma, ki od uporabnikov sprejema navodila v obliki kode, znane kot skica, in ustrezno ustvarja izhod. Za zbiranje navodil in njihovo obdelavo enega za drugim Arduino uporablja serijski medpomnilnik. Serijski medpomnilnik Arduino hrani vhodne podatke, dokler jih naprava ni pripravljena obdelati. Včasih moramo počistiti serijski medpomnilnik Arduino, da preprečimo motnje pri dohodnih podatkih. Oglejmo si to podrobneje.

Serijski medpomnilnik Arduino

Torej, vsi vemo, da Arduino komunicira z uporabo serijskega komunikacijskega protokola, znanega kot USART. Da, Arduino ima nekaj drugih protokolov, kot sta SPI, I2C, vendar je USART najpogostejši in pogosto uporabljen protokol. Če vas zanima branje Arduino vseh treh protokolov, kliknite tukaj .







Serijski medpomnilniki Arduino zbirajo dohodne serijske znake in jih zadržijo, dokler jih mikrokrmilnik ne more obdelati. Serijska komunikacija je način prenosa podatkov iz ene naprave v drugo. Arduino z uporabo strojne opreme USART na svojih ploščah sestavi vsakih 8 bitov v bajt. Nato shranite te bajte v serijski medpomnilnik, največ 64 bajtov je lahko shranjenih znotraj serijskega medpomnilnika Arduino.



Počisti serijski medpomnilnik Arduino

Zaporedni medpomnilniki Arduino imajo omejen pomnilnik za shranjevanje podatkov v primeru, da je pomnilnik prepolnjen ali je na serijskem pinu velika količina podatkov, moramo najprej počistiti serijski medpomnilnik, da shranimo dohodne podatke. Ugotovimo možne načine čiščenja serijskega medpomnilnika Arduino.



Načini čiščenja serijskega medpomnilnika Arduino

Če želite sprostiti prostor v serijskem vmesnem pomnilniku, da ga je mogoče posodobiti z novimi podatki, je lahko v pomoč ta dva načina:





    • Počisti serijski medpomnilnik s funkcijo Serial.flush().
    • Počisti serijski medpomnilnik s funkcijo Serial.begin().

1: Počistite serijski medpomnilnik s funkcijo Serial.flush().

Torej, prva metoda, ki lahko počisti serijski medpomnilnik Arduino, je uporaba funkcije Serial.flush(). Ta funkcija spada v funkcijo serijske knjižnice Arduino.

Serial.flush()

Funkcija Arduino Serial.flush() čaka, da se podatki v celoti prenesejo. Namesto da bi zavrgel dohodne podatke, mu dovoli čakanje, tako da lahko serijski medpomnilnik sprejme nove podatke, ko so podatki v medpomnilniku v celoti preneseni.



Opomba : Po uporabi programa Serial.flush() lahko traja več časa za izvajanje in tiskanje izhoda na serijski monitor. Od zdaj koda Arduino čaka, ko so vsi podatki poslani, da lahko shrani nove podatke v svoj pomnilnik.

Sintaksa

Serial.flush ( )

Parametri

Potrebuje samo en parameter.

Serijska številka: Objekt serijskih vrat

Vračila

Ta funkcija ne vrne ničesar.

Primer kode

Tukaj je koda, ki je napisana brez uporabe funkcije Serial.flush():

nastavitev praznine ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Zaženite kodo s shranjevanjem trenutne ure Arduino čas */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Vadnica' ) ) ;
unsigned long millis_FlushStop = millis ( ) ; /* trenutno čas na tej točki */
Serijski.natis ( F ( 'Brez funkcije splakovanja je potrebno' ) ) ;
Serijski.natis ( millis_FlushStop - millis_FlushStart ) ; /* Odtisi čas ki jih zaporedni medpomnilnik za tiskanje podatkov */
Serial.println ( F ( 'milisekund.' ) ) ;
}
prazna zanka ( ) {
}


V zgornji kodi smo inicializirali tri različne nize in zagnali kodo tako, da smo vzeli trenutni čas iz funkcije millis() in ga shranili v novo spremenljivko. Ko so podatki znova natisnjeni s funkcijo millis(), posredujemo trenutni čas novi spremenljivki.

Ko sta oba časa prejeta znotraj dveh spremenljivk, nam bo razlika podala čas, ki ga Arduino porabi za tiskanje treh definiranih nizov v milisekundah.


V izhodnem terminalu je razvidno, da traja 9 ms za tiskanje definiranega niza.


Zdaj bomo v spodnji kodi uporabili funkcijo Serial.flush(), ki bo omogočila prehod vseh nizov in počakala tam, dokler serijski medpomnilnik ne postane prazen, da prejme naslednje podatke. Zato bo trajalo več časa v primerjavi s tiskanjem podatkov brez uporabe Serial.flush().

nastavitev praznine ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Zaženite kodo s shranjevanjem trenutne ure Arduino čas */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Vadnica' ) ) ;
Serial.flush ( ) ; /* čaka za podatki, ki bodo poslani po tem pomnilniku za izpiranje */
unsigned long millis_FlushStop = millis ( ) ; /* trenutno čas na tej točki */
Serijski.natis ( F ( 'S funkcijo Flush je potrebno ' ) ) ;
Serijski.natis ( millis_FlushStop - millis_FlushStart ) ; /* Odtisi čas ki jih zaporedni medpomnilnik za tiskanje podatkov */
Serial.println ( F ( 'milisekund.' ) ) ;
}
prazna zanka ( ) {
}


Ta koda je podobna tisti, ki smo jo razložili prej. Razlika je v funkciji Serial.flush(), ki programu omogoča, da počaka nekaj dodatnega časa, dokler se serijski vmesni pomnilnik ne sprosti za sprejem naslednjih podatkov.


V izhodu lahko jasno vidimo, da tokrat potrebuje 76 ms za tiskanje treh nizov v primerjavi s prejšnjim, ki je trajal le 9 ms.

2: Počistite serijski medpomnilnik s funkcijo Serial.begin().

Do zdaj smo razlagali funkcijo Serial.flush() za čiščenje serijskega medpomnilnika, vendar mora ta funkcija počakati, da se podatki v celoti prenesejo, zdaj pa se postavljajo vprašanja, kaj, če želimo počistiti dohodne podatke znotraj serijskega medpomnilnika. Odgovor na vprašanje je preprost: to lahko storimo z uporabo a medtem zanke s funkcijo serijske knjižnice.

Sintaksa

medtem ( Serijski.na voljo ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Koda

String val;
nastavitev praznine ( ) {
}
prazna zanka ( ) {
če ( Serijski.na voljo ( ) ) { /* preverite za serijski podatki */
val = '' ;
medtem ( Serijski.na voljo ( ) ) { /* prebrati serijski podatki če na voljo */
char Serijski_podatki = Serial.read ( ) ;
val =val+Serial_Data; /* shrani podatke znotraj novega niza */
}
Serial.println ( val ) ; /* natisni prebrati podatke */
Serial.end ( ) ; /* konec serijske komunikacije */
Serial.begin ( 9600 ) ; /* jasno serijski medpomnilnik */
}
}


Arduino uporablja funkcije Serial.begin() za inicializacijo serijske komunikacije z definiranjem hitrosti prenosa; ko je ta funkcija inicializirana, podatki, ki so bili predhodno shranjeni v pomnilniku Arduino, postanejo jasni. Tukaj bomo preverili serijske podatke s funkcijo Serial.available(), ko bodo podatki prebrani, shranjeni v nov niz in nazadnje z uporabo Serial.begin(9600) bomo počistili serijski medpomnilnik Arduino.

Opomba: Izprazniti moramo serijski medpomnilnik, ker zagotavlja, da so bili podatki poslani v napravo in preprosto ne čakajo ali so na čakanju za pošiljanje.

Zaključek

Če želite počistiti serijski medpomnilnik Arduino, tako da lahko shrani nove podatke v medpomnilnik, lahko uporabite Serial.flush() in Serial begin. Uporablja se lahko za brisanje serijskega medpomnilnika Arduino, vendar moramo počakati, ko so vsi podatki poslani, da se temu izognemo, lahko uporabimo zanko while s funkcijo Serial.begin(), ki lahko tudi počisti dohodne podatke iz serijskega medpomnilnika.