Arduino sscanf -funksjon

Arduino sscanf -funksjon
Arduino -programmering har arvet flere funksjoner fra C -språket. En av de mye brukte funksjonene er sscanf () som vi kan lese data fra hvilken som helst streng eller tekst. I denne guiden vil vi utforske hvordan du bruker denne funksjonen i Arduino -programmering. La oss begynne:

Arduino sscanf () -funksjon

I Arduino -programmering kan vi lagre symboler, tegn, tall eller andre data i en streng. For å lese dataene fra en streng bruker vi sscanf () funksjon; Den leser ikke bare dataene, men kan også lagre dem i en ny variabel. Generelt leses i C -programmeringsdata ved hjelp av Scanf () Men ved å bruke denne funksjonen kan vi bare lese data ved hjelp av konsoll, hvis man ønsker å lese en inngang fra streng eller annen tekst, brukes SSCANF () -funksjonen.

Syntaks

For å lese data fra en streng må vi vite hvordan funksjonen fungerer. Nedenfor er syntaksen til SSCANF () -funksjonen.

int sscanf (char *data, char *format, lagring_variabler);

I koden ovenfor representerer det første argumentet inngangen som inneholder karakter- eller streng -array -data som skal leses ved hjelp av formatet som er definert i det andre argumentet. Vi kan liste tilgjengelige data i forskjellige variabler ved å definere formatet i det andre argumentet.

Parametere

  • data: Dette er en peker til en streng som vi vil lese.
  • format: Formatspesifikasjoner vil bli brukt her til å lese data på en bestemt måte.
  • Storage_Variables: Den brukes til å lagre leseverdien fra pekere i flere argumenter. Variabeltnavnet må inngås av & tegnet hvis vi trenger å lagre verdier i en vanlig variabel i stedet for en peker.

Formatspesifikasjoner

De sscanf () Funksjon bruker forskjellige formatspesifikasjoner som kan lagre data på en bestemt måte. Det er et unikt sett med tegn foran med % tegn etterfulgt av relevante tegnsymboler. Følgende symboler brukes vanligvis:

Symbol Type
s Streng
c Enkelt røye
d Desimal int
e, e, f, g, g Flytende punkter
U Usignert int
x, x Heksadesimal num

Returverdi

  • End of File (EOF) -feil vil bli returnert hvis strengen ikke kunne lese en riktig verdi.
  • -1 returneres hvis noen annen type feil oppstår.
  • Totalt antall leste elementer returneres som en heltallverdi av funksjonen.

Eksempler

Nå som vi kjenner syntaks og arbeid med SSCANF () -funksjonen, la oss ta et eksempel for å forstå det bedre.

1. Lesing av ett element av samme type

Det første eksemplet vil forklare hvordan vi bare kan lese en enkelt datatypeinngang fra en streng og lagre den inne i en ny variabel.

Kode

void setup ()
Serie.Begin (115200); /*Seriell kommunikasjon begynner*/
char* buffer = "linuxhint"; /*Streng initialiseres i buffervariabel ved bruk av røye*/
char input_string [10]; /*Strenglengde definert*/
int total_input_read; /*Variabel initialiseres for å telle total inngangslesing*/
Total_input_read = sscanf (buffer, "%s", input_string); /*sscanf -funksjon brukes til å lese inngangsstreng*/
Serie.print ("Strengverdi lagret i buffer:");
Serie.println (input_string); /*Inngangsstreng skrives ut på seriell skjerm*/
Serie.print ("ingen av totale varer som er lest:");
Serie.println (total_input_read); /*Ingen av input Read skrives ut på seriell monitor*/

ugyldig sløyfe ()

Her i denne koden først begynner vi seriell kommunikasjon for å skrive ut resultater på seriemonitoren. Neste en char -matrise er definert ved hjelp av en variabel buffer. Lengden på matrisen er satt til 10, noe som kan variere deretter. En ny variabel er initialisert som vil lagre det totale antallet inngangsinnganger.

Neste ved hjelp av sscanf () Funksjonsstreng blir lagret i en ny variabel input_string. Her i SSCANF () bruker vi formatspesifikasjon %s fordi den bare vil lese strenger som input. Begge resultatene vil bli skrevet ut på seriemonitoren.

Produksjon

Utgang viser at en streng tas som inngang og lagret i en ny variabel input_string.

2. Lesing av flere elementer av forskjellige typer

Dette eksemplet vil forklare hvordan sscanf () vil ta data om flere datatyper fra en enkelt inngangsstreng.

Kode

void setup ()
Serie.Begin (115200); /*Seriell kommunikasjon begynner*/
char *data = "28. feb 2022"; /*Ny streng initialiseres*/
int dato = 0; /*Variabel er definert til å lagre dato*/
int år = 0; /*Variabel er definert til å lagre år*/
Char Month [10]; /*En matrise initialiseres for å lagre måned*/
Serie.println (data); /*Inngangsdata skrives ut*/
SSCANF (data, " %2D %S %4D", og dato, måned og år); /*sscanf vil lese data fra input og lagre dem i separate variabler*/
Serie.println (dato); /*Lesdato skrives ut*/
Serie.Println (måned); /*Lesmåneden skrives ut*/
Serie.Println (år); /*Lesåret er trykt*/

void loop ()

I koden ovenfor har vi opprettet en data variabel som kan lagre den gitte strengen. Tre forskjellige variable datoer, år og måned vil lagre leseinngangen fra strengen hver for seg. måned Variabel initialiseres med størrelse på 10 som kan endres deretter.

NESTE sscanf () Funksjonen vil lese dataene fra input og lagre dem i tre forskjellige variabler. Som dato og år representerer begge en heltallverdi så %d Symbol brukes sammen med nummer 2 og 4 som representerer hvor mange tall vi vil lese. De %s symbolet brukes med måned som vil returnere tegn til et hvitt rom kommer.

Hvis det ikke er noen plass mellom data, kan vi bruke %c sammen med et tall som vil representere antall tegn vi vil lese. Alle dataene som leses vil bli skrevet ut separat ved hjelp av Serie.println ().

Produksjon

Utgang viser inngangsstrengen. Sscanf () vil lese data og lagre dem i separate tre variabler.

Konklusjon

Generelt, mens programmering på C -språk, leser vi innspill fra brukeren ved hjelp av SCANF () -funksjon, men det er bare begrenset til konsollen. For å lese data fra en definert streng og lagre dem separat i flere variabler vi bruker sscanf () Funksjon i Arduino -programmering. Denne skrivingen vil hjelpe deg med å forstå sscanf () og les data fra definerte strenger.