Funzione Arduino Sscanf

Funzione Arduino Sscanf
La programmazione Arduino ha ereditato molteplici funzioni dalla lingua C. Una delle funzioni ampiamente utilizzate è sscanf () utilizzando la quale possiamo leggere i dati da qualsiasi stringa o testo. In questa guida, esploreremo come utilizzare questa funzione nella programmazione Arduino. Cominciamo:

Funzione Arduino sscanf ()

Nella programmazione Arduino possiamo archiviare simboli, caratteri, numeri o altri dati all'interno di una stringa. Per leggere i dati da una stringa utilizziamo il sscanf () funzione; Non solo legge i dati, ma può anche archiviarli all'interno di una nuova variabile. Generalmente, nei dati di programmazione C vengono letti utilizzando Scanf () Ma usando questa funzione possiamo leggere solo i dati usando la console, se si desidera leggere un input dalla stringa o qualsiasi altro testo, viene utilizzata la funzione sscanf ().

Sintassi

Per leggere i dati da una stringa dobbiamo sapere come funziona la funzione. Di seguito è riportata la sintassi della funzione sscanf ().

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

Nel codice sopra, il primo argomento rappresenta l'input che contiene i dati del carattere o dell'array stringa che devono essere letti usando il formato definito nel secondo argomento. Possiamo elencare i dati disponibili in diverse variabili definendo il formato nel secondo argomento.

Parametri

  • dati: Questo è un puntatore a una stringa che vogliamo leggere.
  • formato: Gli specificatori del formato verranno utilizzati qui per leggere i dati in un certo modo.
  • Storage_variables: Viene utilizzato per archiviare il valore di lettura dai puntatori in argomenti aggiuntivi. Il nome della variabile deve essere preceduto da & segnale se dobbiamo archiviare i valori in una variabile regolare anziché in un puntatore.

Specificatori di formato

IL sscanf () La funzione utilizza diversi specificatori di formato che possono archiviare i dati in un certo modo. È un set unico di personaggi preceduti da % segno seguito da simboli di personaggi rilevanti. I seguenti simboli sono generalmente utilizzati:

Simbolo Tipo
S Corda
C Singolo carattere
D Decimale int
e, e, f, g, g Punti galleggianti
U Insigned Int
x, x Hexadecimal num

Valore di ritorno

  • L'errore di fine file (EOF) verrà restituito se la stringa non è riuscita a leggere un valore corretto.
  • -1 viene restituito se si verifica un altro tipo di errore.
  • Il numero totale di elementi letti viene restituito come valore intero dalla funzione.

Esempi

Ora che conosciamo la sintassi e il funzionamento della funzione sscanf () facciamo un esempio per capirlo meglio.

1. Leggere un elemento dello stesso tipo

Il primo esempio spiegherà come possiamo leggere un solo singolo input di tipo di dati da una stringa e archiviarlo all'interno di una nuova variabile.

Codice

void setup ()
Seriale.Inizia (115200); /*Comunicazione seriale inizia*/
char* buffer = "linuxhint"; /*Stringa viene inizializzata nella variabile buffer usando char*/
char input_string [10]; /*Lunghezza della stringa definita*/
int total_input_read; /*La variabile è inizializzata per contare input totale lettura*/
Total_input_read = sscanf (buffer, "%s", input_string); /*La funzione sscanf viene utilizzata per leggere la stringa di input*/
Seriale.print ("Valore stringa memorizzato in buffer:");
Seriale.println (input_string); /*La stringa di input è stampata sul monitor seriale*/
Seriale.stampa ("No degli articoli totali leggi:");
Seriale.println (total_input_read); /*NO di Input Read è stampato sul monitor seriale*/

void loop ()

Qui in questo codice prima iniziamo la comunicazione seriale per stampare i risultati sul monitor seriale. Successivamente un array char è definito usando una variabile respingente. La durata dell'array è impostata su 10, che può variare di conseguenza. Viene inizializzata una nuova variabile che memorizzerà il numero totale di input letti.

Poi usando il sscanf () La stringa di funzione verrà memorizzata all'interno di una nuova variabile input_string. Qui in sscanf () utilizziamo il formato specificatore %S Perché leggerà solo le stringhe come input. Entrambi i risultati saranno stampati sul monitor seriale.

Produzione

L'output mostra che una stringa viene presa come input e memorizzata all'interno di una nuova variabile input_string.

2. Leggendo più elementi di diversi tipi

Questo esempio spiegherà come sscanf () prenderà i dati di più tipi di dati da una singola stringa di input.

Codice

void setup ()
Seriale.Inizia (115200); /*Comunicazione seriale inizia*/
char *data = "28 feb 2022"; /*La nuova stringa è inizializzata*/
int data = 0; /*La variabile è definita per archiviare la data*/
int anno = 0; /*La variabile è definita per archiviare l'anno*/
CHAR MESE [10]; /*Un array viene inizializzato per archiviare il mese*/
Seriale.println (dati); /*I dati di input sono stampati*/
sscanf (dati, " %2d %s %4d", & data, mese e anno); /*sscanf leggerà i dati dall'input e li memorizzerà in variabili separate*/
Seriale.println (data); /*La data di lettura è stampata*/
Seriale.println (mese); /*Leggi il mese è stampato*/
Seriale.println (anno); /*Leggi l'anno è stampato*/

void loop ()

Nel codice sopra abbiamo creato a dati variabile che può archiviare la stringa data. Tre diverse date variabili, anno e mese memorizzeranno l'input di lettura dalla stringa separatamente. mese La variabile è inizializzata con dimensioni di 10 che può essere modificata di conseguenza.

Prossimo sscanf () La funzione leggerà i dati dall'input e li memorizzerà in tre diverse variabili. Come data e anno rappresentano entrambi un valore intero così %D il simbolo viene usato insieme al numero 2 e 4 che rappresenta quanti numeri vogliamo leggere. IL %S il simbolo viene utilizzato con il mese che restituirà i caratteri fino a quando non arriva uno spazio bianco.

Se non c'è spazio tra i dati, allora possiamo usare %C insieme a un numero che rappresenterà il numero di caratteri che vogliamo leggere. Tutti i dati letti verranno stampati separatamente utilizzando Seriale.println ().

Produzione

L'output mostra la stringa di input. Sscanf () leggerà i dati e li memorizzerà in tre variabili separate.

Conclusione

In generale, mentre la programmazione in linguaggio C leggiamo l'input dall'utente utilizzando la funzione scanf (), ma è limitata alla console. Per leggere i dati da una stringa definita e archiviarli separatamente in più variabili che utilizziamo sscanf () funzione nella programmazione Arduino. Questo articolo ti aiuterà a capire sscanf () e leggere i dati da stringhe definite.