Kā notīrīt Arduino sērijas buferi

Ka Notirit Arduino Serijas Buferi



Arduino ir elektroniska platforma, kas saņem norādījumus no lietotājiem koda veidā, kas pazīstams kā skice, un attiecīgi ģenerē izvadi. Lai apkopotu instrukcijas un apstrādātu tās pa vienam, Arduino izmanto sērijas buferi. Arduino seriālais buferis glabā ienākošos datus, līdz ierīce ir gatava tos apstrādāt. Dažreiz mums ir jādzēš Arduino seriālais buferis, lai izvairītos no iejaukšanās ienākošajos datos. Apskatīsim to sīkāk.

Arduino sērijas buferis

Tātad, mēs visi zinām, ka Arduino sazinās, izmantojot seriālo sakaru protokolu, kas pazīstams kā USART. Jā, Arduino ir daži citi protokoli, piemēram, SPI, I2C, bet USART ir visizplatītākais un biežāk izmantotais protokols. Ja vēlaties lasīt Arduino visus trīs protokolus, noklikšķiniet uz šeit .







Arduino sērijas buferi savāc ienākošās sērijas rakstzīmes un aiztur tās, līdz mikrokontrolleris var tās apstrādāt. Seriālā komunikācija ir datu pārsūtīšanas metode no vienas ierīces uz citu. Arduino, izmantojot USART aparatūru savās platēs, katru 8 bitu apkopo baitā. Pēc tam glabājiet šos baitus seriālajā buferī, Arduino sērijas buferī var saglabāt ne vairāk kā 64 baitus.



Notīrīt Arduino sērijas buferi

Arduino seriālajiem buferiem ir ierobežota atmiņa datu glabāšanai, ja atmiņa ir pārpildīta vai pie seriālās tapas ir liels datu apjoms, vispirms ir jānotīra seriālais buferis, lai saglabātu ienākošos datus. Noskaidrosim iespējamos veidus, kā notīrīt Arduino seriālo buferi.



Veidi, kā notīrīt Arduino sērijas buferi

Lai atbrīvotu sērijas bufera vietu, lai to varētu atjaunināt ar jauniem datiem, var būt noderīgi šādi divi veidi:





    • Notīrīt seriālo buferi, izmantojot funkciju Serial.flush().
    • Notīrīt seriālo buferi, izmantojot funkciju Serial.begin()

1: Notīrīt seriālo buferi, izmantojot funkciju Serial.flush()

Tātad, pirmā metode, kas var notīrīt Arduino seriālo buferi, ir funkcijas Serial.flush() izmantošana. Šī funkcija pieder Arduino seriālās bibliotēkas funkcijai.

Serial.flush()

Arduino Serial.flush() funkcija gaida, līdz dati tiks pilnībā pārsūtīti. Tā vietā, lai izmestu ienākošos datus, tas ļauj tiem pagaidīt, tāpēc, tiklīdz buferī esošie dati ir pilnībā pārsūtīti, seriālais buferis var saņemt jaunos datus.



Piezīme : Pēc Serial.flush() izmantošanas programmām var būt nepieciešams vairāk laika, lai izpildītu un izdrukātu izvadi seriālajā monitorā. Šobrīd Arduino kods gaida, kad visi dati ir pārsūtīti, lai tas varētu saglabāt jaunus datus savā atmiņā.

Sintakse

Serial.flush ( )

Parametri

Tam nepieciešams tikai viens parametrs.

Sērija: Seriālā porta objekts

Atgriežas

Šī funkcija neko neatgriež.

Koda piemērs

Šeit ir kods, kas ir rakstīts, neizmantojot funkciju Serial.flush():

tukša iestatīšana ( ) {
Sērija.sākt ( 9600 ) ;
neparakstīts garš millis_FlushStart = mili ( ) ; /* Sāciet kodu, saglabājot pašreizējo Arduino pulksteni laiks */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
neparakstīts garš millis_FlushStop = mili ( ) ; /* strāva laiks šobrīd */
Serial.print ( F ( 'Tas nepieciešams bez skalošanas funkcijas' ) ) ;
Serial.print ( millis_FlushStop — millis_FlushStart ) ; /* Izdrukas laiks izmanto seriālais buferis, lai drukātu datus */
Serial.println ( F ( 'milisekundes.' ) ) ;
}
tukša cilpa ( ) {
}


Iepriekš minētajā kodā mēs inicializējām trīs dažādas virknes un sākām kodu, ņemot pašreizējo laiku no funkcijas millis () un saglabājot to jaunā mainīgajā. Kad dati ir atkārtoti izdrukāti, izmantojot funkciju millis (), mēs nododam pašreizējo laiku jaunam mainīgajam.

Kad abi laiki tiek saņemti divos mainīgajos, atšķirība sniegs mums laiku, kas nepieciešams Arduino, lai izdrukātu trīs noteiktās virknes milisekundēs.


Izvades terminālī var redzēt, ka definētās virknes izdrukāšana aizņem 9 ms.


Tagad tālāk norādītajā kodā mēs izmantosim funkciju Serial.flush(), kas ļaus iziet visas virknes un gaidīsim, līdz kļūst skaidrs seriālais buferis, lai saņemtu nākamos datus. Tāpēc tas prasīs papildu laiku, salīdzinot ar datu drukāšanu, neizmantojot Serial.flush().

tukša iestatīšana ( ) {
Sērija.sākt ( 9600 ) ;
neparakstīts garš millis_FlushStart = mili ( ) ; /* Sāciet kodu, saglabājot pašreizējo Arduino pulksteni laiks */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; /* Gaida priekš pārsūtāmie dati pēc šīs atmiņas iztukšošanas */
neparakstīts garš millis_FlushStop = mili ( ) ; /* strāva laiks šobrīd */
Serial.print ( F ( 'Ar skalošanas funkciju tas aizņem' ) ) ;
Serial.print ( millis_FlushStop — millis_FlushStart ) ; /* Izdrukas laiks izmanto seriālais buferis, lai drukātu datus */
Serial.println ( F ( 'milisekundes.' ) ) ;
}
tukša cilpa ( ) {
}


Šis kods ir līdzīgs tam, ko mēs paskaidrojām iepriekš. Atšķirība šeit ir funkcija Serial.flush(), kas ļauj programmai pagaidīt kādu papildu laiku, līdz seriālā bufera atmiņa kļūst brīva nākamo datu saņemšanai.


Izvadē mēs varam skaidri redzēt, ka šoreiz trīs virkņu izdrukāšanai nepieciešami 76 ms, salīdzinot ar iepriekšējo, kas aizņem tikai 9 ms.

2: Notīrīt seriālo buferi, izmantojot funkciju Serial.begin()

Līdz šim mēs izskaidrojām funkciju Serial.flush(), lai notīrītu seriālo buferi, taču šai funkcijai ir jāgaida, līdz dati tiks pilnībā pārsūtīti, tagad rodas jautājumi, ko darīt, ja mēs vēlamies notīrīt ienākošos datus seriālajā buferī. Atbilde uz jautājumu ir vienkārša: mēs to varam izdarīt, izmantojot a kamēr cilpa ar Serial bibliotēkas funkciju.

Sintakse

kamēr ( Serial.pieejams ( ) )
Seriāls.lasīt ( ) ;
Serial.beigas ( ) ;
Sērija.sākt ( 9600 ) ;

Kods

Stīgu val;
tukša iestatīšana ( ) {
}
tukša cilpa ( ) {
ja ( Serial.pieejams ( ) ) { /* pārbaudiet priekš sērijas dati */
val = '' ;
kamēr ( Serial.pieejams ( ) ) { /* lasīt sērijas dati ja pieejams */
char Sērijas_dati = Serial.lasīt ( ) ;
val =val+Serial_Data; /* saglabāt datus jaunā virknē */
}
Serial.println ( val ) ; /* izdrukāt lasīt datus */
Serial.beigas ( ) ; /* beigt seriālo komunikāciju */
Sērija.sākt ( 9600 ) ; /* skaidrs sērijas buferis */
}
}


Arduino izmanto Serial.begin() funkcijas, lai inicializētu seriālo komunikāciju, definējot pārsūtīšanas ātrumu, kad šī funkcija ir inicializēta, iepriekš Arduino atmiņā saglabātie dati kļūst skaidri. Šeit mēs pārbaudīsim sērijas datus, izmantojot funkciju Serial.available() pēc datu nolasīšanas, tie tiks saglabāti jaunā virknē, un visbeidzot, izmantojot Serial.begin(9600), mēs notīrīsim Arduino sērijas buferi.

Piezīme: Mums ir jāizskalo seriālais buferis, jo tas nodrošina, ka dati ir nosūtīti uz ierīci un vienkārši negaida vai aiztur, lai tos nosūtītu.

Secinājums

Lai notīrītu Arduino seriālo buferi, lai tas varētu saglabāt jaunus datus bufera atmiņā, var izmantot Serial.flush() un Serial begin. To var izmantot, lai notīrītu Arduino seriālo buferi, taču mums ir jāgaida, kad visi dati ir pārsūtīti, lai no tā izvairītos, mēs varam izmantot kamēr cilpu ar funkciju Serial.begin(), kas var arī notīrīt ienākošos datus no seriālā bufera.