Lo intente muchisimo de esa manera y no dudo de que funcione pero tenia problemas, ahora con mas experiencia podre intentarlo.
Misteriosamente todo se soluciono de una manera sin sentido, ojala alguien pueda explicarme. Se soluciono poniendo un put dentro del condicional de guardado, put que guarda nada en cualquier lado.
if (digitalRead(button_save) == LOW ) {
writeStringToEEPROM(0, stringsave);
Serial.print("String guardada: ");
Serial.println(stringsave);
Serial.print("Largo: ");
Serial.println(stringsave.length());
Serial.println("---");
// Serial.print("String EEPROM.put ");
EEPROM.put(10200, ppp);
delay (2000);
}
Y el codigo sin sentido funcionando;
//#include <EEPROM.h>
#define EEPROM_EMULATION_SIZE (10 * 1024)
#include <FlashAsEEPROM_SAMD.h>
String stringsave;
String stringsave2;
String ppp = "a"; //para guardar en put, no tiene sentido pero sin esto no anda
String ppp2 = "a";
int button_save = 10;
int button_save2 = 8;
int button_load_print = 9;
void writeStringToEEPROM(int addrOffset, 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);
pinMode(button_save, INPUT_PULLUP);
pinMode(button_save2, INPUT_PULLUP);
pinMode(button_load_print, INPUT_PULLUP);
while (!Serial);
Serial.print("EEPROM length: ");
Serial.println(EEPROM.length());
}
void loop() {
if (Serial.available()) {
stringsave = Serial.readString();
Serial.print("String recivida: ");
Serial.println(stringsave);
}
if (digitalRead(button_save) == LOW ) {
writeStringToEEPROM(0, stringsave);
Serial.print("String guardada: ");
Serial.println(stringsave);
Serial.print("Largo: ");
Serial.println(stringsave.length());
Serial.println("---");
// Serial.print("String EEPROM.put desde 10");
EEPROM.put(10200, ppp);
delay (2000);
}
if (digitalRead(button_save2) == LOW ) {
writeStringToEEPROM(25, stringsave);
Serial.print("String guardada2: ");
Serial.println(stringsave);
Serial.print("Largo: ");
Serial.println(stringsave.length());
Serial.println("---");
// Serial.print("String EEPROM.put desde 10");
EEPROM.put(10100, ppp2);
delay (2000);
}
if (digitalRead(button_load_print) == LOW) {
String retrievedString_string = readStringFromEEPROM(0);
Serial.println ("");
Serial.print("String 1 read from EEPROM: ");
Serial.println(retrievedString_string);
Serial.print("Largo: ");
Serial.println(retrievedString_string.length());
Serial.println("");
Serial.println("String EEPROM Raw 0 to 20: ");
for (int j = 0; j < 20; j++) {
Serial.print (EEPROM.read(j));
}
Serial.println ("");
}
if (digitalRead(button_load_print) == LOW) {
String retrievedString_string = readStringFromEEPROM(0);
String retrievedString_string2 = readStringFromEEPROM(25);
Serial.println ("");
Serial.print("String 2 read from EEPROM: ");
Serial.println(retrievedString_string2);
Serial.print("Largo: ");
Serial.println(retrievedString_string2.length());
Serial.println("");
Serial.println("String2 EEPROM Raw 25 to 45: ");
for (int j = 25; j < 45; j++) {
Serial.print (EEPROM.read(j));
}
Serial.println("");
}
delay (350);
}