Función Arduino sscanf
Este tutorial analizará la lectura de datos formateados de una matriz de caracteres o cadena utilizando la función sscanf()
en Arduino.
la función sscanf()
de Arduino
Podemos guardar números, símbolos, caracteres y otros datos dentro de un archivo de texto o cadena. Podemos usar la función sscanf()
para leer los datos en un formato específico de un texto, cadena o matriz de caracteres.
La sintaxis básica de la función sscanf()
se encuentra a continuación.
sscanf(char *data, char *format, ...);
En el código anterior, date
contiene la cadena o matriz de caracteres dada que queremos leer usando el formato definido en el segundo argumento. Después de definir el formato, podemos enumerar la cantidad de variables que queremos almacenar los datos formateados.
Por ejemplo, considere que tenemos una cadena que contiene la fecha de un evento y queremos separar la fecha, el mes y el año y almacenarlos en variables separadas. Vea el código a continuación.
char *data = "28 April 2022";
int date = 0;
int year = 0;
char month[10];
void setup() {
Serial.begin(9600);
Serial.println(data);
sscanf(data, "%2d %s %4d", &date, month, &year);
Serial.println(date);
Serial.println(month);
Serial.println(year);
}
void loop() {}
Producción :
28 April 2022
28
April
2022
Creamos la variable data
para almacenar la cadena dada en el código anterior. Las variables date
, year
y month
almacenan los valores de día, año y mes por separado.
Inicializamos la variable month
con un tamaño de 10, pero podemos cambiar su tamaño de acuerdo con la cadena dada que queremos guardar en la variable. Usamos la función Serial.begin()
para inicializar el monitor serial de Arduino, que usaremos para mostrar el resultado.
Para obtener un valor entero, usamos el símbolo %d
, y el número 2 con él define cuántos números queremos leer. Usamos el símbolo %s
para obtener una cadena, que devolverá los caracteres hasta un espacio en blanco.
Si no hay espacio en la cadena dada, podemos usar el %c
y un número para especificar cuántos caracteres queremos leer. No podemos usar %s
porque no hay espacios en blanco, lo que no devolverá el resultado esperado.
Después del formato, para guardar el resultado en un número entero, tenemos que usar el símbolo &
, y para una cadena o matriz de caracteres, solo tenemos que usar el nombre de la variable. En el ejemplo anterior, usamos el espacio en blanco como delimitador para dar formato a los datos, pero también podemos usar cualquier carácter, símbolo o número.
Por ejemplo, considere si tenemos una coma en lugar del espacio en blanco dentro de la cadena de fecha.
Para extraer el resultado requerido, tenemos que usar la coma dentro de la función sscanf()
en lugar del espacio en blanco. También tenemos que usar el símbolo %c
en lugar del símbolo %s
porque no hay espacios en blanco presentes en la cadena.
Por ejemplo, repitamos el ejemplo anterior con un delimitador diferente. Vea el código a continuación.
char *data = "28,April,2022";
int date = 0;
int year = 0;
char month[10];
void setup() {
Serial.begin(9600);
Serial.println(data);
sscanf(data, "%2d,%5c,%4d", &date, month, &year);
Serial.println(date);
Serial.println(month);
Serial.println(year);
}
void loop() {}
Producción :
28,April,2022
28
April
2022
Usamos el símbolo %5c
dentro de la función sscanf()
en el código anterior porque solo queremos leer cinco caracteres. Si leemos más de cinco caracteres, la siguiente salida cambiará.
Como podemos ver, la salida es la misma que la salida del primer ejemplo. También podemos usar otros símbolos para formatear los datos como %f
para números de punto flotante, %o
para números octales, %x
para números hexadecimales y %u
para un número entero sin signo.