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