▷ EEPROM Arduino - Código Para Guardar y Leer Strings.

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]);
  }
}
  1. Obtenemos el valor del número de caracteres del string ingresado y lo almacenamos en la variable: len.
  2. 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.
  3. 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 - 
}
  1. Leemos el valor de la posición 0 de la memoria y guardamos ese valor en la variable: newStrLen
  2. Definimos un array de tipo char, en este array vamos a almacenar los datos que extraeremos de la memoria EEPROM.
  3. 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.
  4. Añadimos en la última posición del array el caracter: '\0'
  5. 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() {}

0/Post a Comment/Comments