Kuinka tyhjentää Arduino-sarjapuskuri

Kuinka Tyhjentaa Arduino Sarjapuskuri



Arduino on elektroninen alusta, joka ottaa ohjeet käyttäjiltä koodin muodossa, joka tunnetaan nimellä sketch, ja tuottaa tulosteen vastaavasti. Ohjeiden keräämiseen ja käsittelyyn yksitellen Arduino käyttää sarjapuskuria. Arduino-sarjapuskuri säilyttää saapuvat tiedot, kunnes laite on valmis käsittelemään niitä. Joskus meidän on tyhjennettävä Arduino-sarjapuskuri välttääksemme häiriöitä saapuviin tietoihin. Katsotaanpa tätä tarkemmin.

Arduino-sarjapuskuri

Joten me kaikki tiedämme, että Arduino kommunikoi käyttämällä sarjaliikenneprotokollaa, joka tunnetaan nimellä USART. Kyllä, Arduinolla on joitain muita protokollia, kuten SPI, I2C, mutta USART on yleisin ja useimmin käytetty protokolla. Jos olet kiinnostunut lukemaan Arduinon kaikkia kolmea protokollaa, napsauta tässä .







Arduinon sarjapuskurit keräävät saapuvat sarjamerkit ja pitävät niitä, kunnes mikro-ohjain pystyy käsittelemään ne. Sarjaliikenne on tapa siirtää tietoja laitteesta toiseen. Arduino, joka käyttää levyilleen USART-laitteistoa, kokoaa jokaisen 8 bitin tavuksi. Tallenna sitten nämä tavut sarjapuskuriin, enintään 64 tavua voidaan tallentaa Arduino-sarjapuskuriin.



Tyhjennä Arduino-sarjapuskuri

Arduinon sarjapuskureissa on rajoitettu muisti tietojen tallentamiseen siltä varalta, että jos muisti ylittyy tai sarjaliittimessä on suuri määrä dataa, meidän on ensin tyhjennettävä sarjapuskuri tallentaaksemme saapuvat tiedot. Selvitetään mahdollisia tapoja tyhjentää Arduino-sarjapuskuri.



Tapoja tyhjentää Arduino-sarjapuskuri

Sarjapuskuritilan vapauttaminen, jotta se voidaan päivittää uusilla tiedoilla, voi olla hyödyllistä seuraavilla kahdella tavalla:





    • Tyhjennä sarjapuskuri käyttämällä Serial.flush()-funktiota
    • Tyhjennä sarjapuskuri käyttämällä Serial.begin()-funktiota

1: Tyhjennä sarjapuskuri käyttämällä Serial.flush()-funktiota

Joten ensimmäinen menetelmä, joka voi tyhjentää Arduinon sarjapuskurin, on käyttää Serial.flush()-funktiota. Tämä toiminto kuuluu Arduinon sarjakirjastotoimintoon.

Serial.flush()

Arduino Serial.flush() -funktio odottaa tietojen siirtämistä kokonaan. Saapuvien tietojen hylkäämisen sijaan se antaa sen odottaa, joten kun puskurin sisällä oleva data on lähetetty kokonaan, sarjapuskuri voi vastaanottaa uutta dataa.



Merkintä : Serial.flush()-toiminnon käytön jälkeen ohjelmien suorittaminen ja tulosteen tulostaminen sarjanäytössä voi kestää kauemmin. Toistaiseksi Arduino-koodi odottaa, kun kaikki tiedot on lähetetty, jotta se voi tallentaa uutta tietoa muistiinsa.

Syntaksi

Serial.flush ( )

Parametrit

Se vaatii vain yhden parametrin.

Sarja: Sarjaporttiobjekti

Palauttaa

Tämä funktio ei palauta mitään.

Esimerkkikoodi

Tässä on koodi, joka kirjoitetaan ilman Serial.flush()-funktiota:

tyhjä asetus ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Aloita koodi tallentamalla nykyinen Arduino-kello aika */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
allekirjoittamaton pitkä millis_FlushStop = millis ( ) ; /* nykyinen aika tässä tilanteessa */
Serial.print ( F ( 'Ilman huuhtelutoimintoa se kestää' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Tulosteet aika ottaa sarjapuskurin tietojen tulostamiseen */
Serial.println ( F ( 'millisekuntia.' ) ) ;
}
tyhjä silmukka ( ) {
}


Yllä olevassa koodissa alustimme kolme eri merkkijonoa ja aloitimme koodin ottamalla nykyisen ajan millis()-funktiosta ja tallentamalla sen uuteen muuttujaan. Kun tiedot on tulostettu uudelleen käyttämällä millis()-funktiota, siirrämme nykyisen ajan uudelle muuttujalle.

Kun molemmat aika on vastaanotettu kahden muuttujan sisällä, ero antaa meille ajan, jonka Arduino kuluu kolmen määritetyn merkkijonon tulostamiseen millisekunteina.


Lähtöliittimestä voidaan nähdä, että määritellyn merkkijonon tulostaminen kestää 9 ms.


Nyt alla annetussa koodissa käytämme Serial.flush()-funktiota, joka sallii kaikkien merkkijonojen kulkemisen ja odottaa siellä, kunnes sarjapuskuri tulee selväksi seuraavan tiedon vastaanottamiseksi. Siksi se vie ylimääräistä aikaa verrattuna tietojen tulostamiseen ilman Serial.flush().

tyhjä asetus ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Aloita koodi tallentamalla nykyinen Arduino-kello aika */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; /* Odottaa varten muistin tyhjennyksen jälkeen lähetettävät tiedot */
allekirjoittamaton pitkä millis_FlushStop = millis ( ) ; /* nykyinen aika tässä tilanteessa */
Serial.print ( F ( 'Huuhtelutoiminnolla se kestää' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Tulosteet aika ottaa sarjapuskurin tietojen tulostamiseen */
Serial.println ( F ( 'millisekuntia.' ) ) ;
}
tyhjä silmukka ( ) {
}


Tämä koodi on samanlainen kuin aiemmin selitetty koodi. Erona tässä on Serial.flush()-funktio, jonka avulla ohjelma odottaa jonkin verran lisäaikaa, kunnes sarjapuskurimuisti vapautuu seuraavan tiedon vastaanottamista varten.


Tulosteessa näemme selvästi, että tällä kertaa kolmen merkkijonon tulostamiseen kuluu 76 ms verrattuna edelliseen, joka kestää vain 9 ms.

2: Tyhjennä sarjapuskuri käyttämällä Serial.begin()-funktiota

Tähän asti olemme selittäneet funktion Serial.flush() sarjapuskurin tyhjentämiseksi, mutta tämän toiminnon on odotettava tietojen siirtämistä kokonaan, nyt tulee mieleen kysymykset, mitä jos haluamme tyhjentää sarjapuskurin sisällä olevat saapuvat tiedot. Vastaus kysymykseen on yksinkertainen: voimme tehdä tämän käyttämällä a sillä aikaa silmukan Serial library -toiminnolla.

Syntaksi

sillä aikaa ( Sarja.saatavilla ( ) )
Sarja.lue ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Koodi

String val;
tyhjä asetus ( ) {
}
tyhjä silmukka ( ) {
jos ( Sarja.saatavilla ( ) ) { /* tarkistaa varten sarjatiedot */
val = '' ;
sillä aikaa ( Sarja.saatavilla ( ) ) { /* lukea sarjatiedot jos saatavilla */
hiiltyä Serial_Data = Serial.read ( ) ;
val =arvo+Serial_Data; /* tallentaa tiedot uuteen merkkijonoon */
}
Serial.println ( val ) ; /* tulostaa lukea tiedot */
Serial.end ( ) ; /* lopettaa sarjaviestinnän */
Serial.begin ( 9600 ) ; /* asia selvä sarjapuskuri */
}
}


Arduino käyttää Serial.begin()-funktioita sarjaliikenteen alustamiseen määrittämällä siirtonopeuden, kun tämä toiminto on alustettu, aiemmin Arduinon muistiin tallennetut tiedot selviävät. Tässä tarkistamme sarjatiedot käyttämällä Serial.available()-funktiota, kun tiedot on luettu, ne tallentuvat uuteen merkkijonoon ja lopuksi tyhjennämme Arduinon sarjapuskurin käyttämällä Serial.begin(9600) -toimintoa.

merkintä: Meidän on huuhdeltava sarjapuskuri, koska se varmistaa, että tiedot on lähetetty laitteeseen, eikä se vain odota tai pidossa lähettämistä.

Johtopäätös

Arduinon sarjapuskurin tyhjentämiseksi, jotta se voi tallentaa uutta tietoa puskurimuistiin, voidaan käyttää Serial.flush()- ja Serial begin -toimintoa. Sitä voidaan käyttää Arduinon sarjapuskurin tyhjentämiseen, mutta meidän on odotettava, kun kaikki tiedot on siirretty tämän välttämiseksi. Voimme käyttää while-silmukkaa Serial.begin() -funktiolla, joka voi myös tyhjentää saapuvat tiedot sarjapuskurista.