En este post veremos como almacenar y leer strings almacenados en la memoria EEPROM del microcontrolador de la tarjeta Arduino.
Materiales:
- Arduino UNO/Mega/Nano
Procedimiento:
Escritura de un string en la memoria EEPROM
Para guardar un string en la memoria EEPROM declaramos una función (writeStringToEEPROM(0,"Ejemplo")) la cual va a recibir dos parámetros, como primer parámetro: la posición de inicio desde la cual se va a almacenar el string, y como segundo parámetro: el string.
Función writeStringToEEPROM(0,"Ejemplo"):
En esta función tenemos lo siguiente:
void writeStringToEEPROM(int addrOffset, const String &strToWrite)
{
byte len = strToWrite.length(); // - 1 -
EEPROM.write(addrOffset, len); // - 2 -
for (int i = 0; i < len; i++) // - 3 -
{
EEPROM.write(addrOffset + 1 + i, strToWrite[i]);
}
}
- Obtenemos el valor del número de caracteres del string ingresado y lo almacenamos en la variable: len.
- Escribimos en la primera posición de la memoria EEPROM el valor de la variable len. Este dato nos va a ser de utilidad al momento de la lectura de la memoria EEPROM.
- Abrimos un ciclo for: en este ciclo for con cada iteración guardaremos a partir de la posición 1 los caracteres del string recibido.
Lectura de un string almacenado en la memoria EEPROM.
Para leer el string almacenado en la memoria EEPROM declaramos una función (readStringFromEEPROM(0)) la cual va a recibir un parámetro: dirección de la posición para el inicio de la lectura.
Función readStringFromEEPROM(0):
En esta función tenemos lo siguiente:
String readStringFromEEPROM(int addrOffset)
{
int newStrLen = EEPROM.read(addrOffset); // - 1 -
char data[newStrLen + 1]; // - 2 -
for (int i = 0; i < newStrLen; i++) // - 3 -
{
data[i] = EEPROM.read(addrOffset + 1 + i);
}
data[newStrLen] = '\0'; // - 4 -
return String(data); // - 5 -
}
- Leemos el valor de la posición 0 de la memoria y guardamos ese valor en la variable: newStrLen
- Definimos un array de tipo char, en este array vamos a almacenar los datos que extraeremos de la memoria EEPROM.
- Abrimos un ciclo for: Leemos los valores almacenados en la memoria a partir de la posición 1 y en cada iteración almacenamos el valor en una posición del array data.
- Añadimos en la última posición del array el caracter: '\0'
- Convertimos el array en string y lo retornamos para imprimirlo en consola. El caracter ,'\0', lo utilizamos para indicar el final del string.
Código completo:
#include <EEPROM.h>
void writeStringToEEPROM(int addrOffset, const String &strToWrite)
{
byte len = strToWrite.length();
EEPROM.write(addrOffset, len);
for (int i = 0; i < len; i++)
{
EEPROM.write(addrOffset + 1 + i, strToWrite[i]);
}
}
String readStringFromEEPROM(int addrOffset)
{
int newStrLen = EEPROM.read(addrOffset);
char data[newStrLen + 1];
for (int i = 0; i < newStrLen; i++)
{
data[i] = EEPROM.read(addrOffset + 1 + i);
}
data[newStrLen] = '\0';
return String(data);
}
void setup() {
Serial.begin(9600);
writeStringToEEPROM(0, "123A"); // Guardamos el string
String retrievedString = readStringFromEEPROM(0); // Leemos el string
Serial.print("The String we read from EEPROM: ");
Serial.println(retrievedString); // Imprimimos el string en el monitor Serial
}
void loop() {}
Publicar un comentario
¡Hola! Nos alegra mucho que hayas llegado hasta aquí y que estés leyendo este artículo en Edeptec.
Este formulario es un espacio abierto para ti: puedes dejar un comentario con tus dudas, sugerencias, experiencias o simplemente tu opinión sobre el tema tratado.
» ¿Te resultó útil la información?
» ¿Tienes alguna experiencia personal que quieras compartir?
» ¿Se te ocurre algún tema que te gustaría ver en próximos artículos?
Recuerda que este espacio es para aprender y compartir, por eso te animamos a participar de manera respetuosa y constructiva. Tus comentarios pueden ayudar a otros lectores que están en el mismo camino, ya sea en electrónica, programación, deportes o tecnología.
¡Gracias por ser parte de esta comunidad de aprendizaje! Tu participación es lo que hace crecer este proyecto.