Bueno. Ataquemos el tema de la EEPROM. Hay que añadir tres modificaciones, aparte de incluir la librería en si:
Agregar una variable global donde guardar la posición del siguiente registro:
char nom[17]; // buffer de almacenamiento temporal
char tel[17]; // buffer de almacenamiento temporal
unsigned long regActual; // posición de lectura del archivo
En el setup, leeremos la dirección 0 de la EEPROM y, si el dato es "cabal" (la primera vez será FFFFFFFF) entenderemos que es posición guardada de un registro.
if (myFile) {
lcd.print ("NOMBRE:");
lcd.setCursor (0, 1);
lcd.print ("TEL:");
EEPROM.get(0, regActual);
if (regActual<myFile.size) { // Si la posición de lectura es menor que el tamaño de archivo
myFile.seek(regActual); // apuntamos el File hacia dicha dirección
}
} else lcd.print ("No se pudo abrir");
Finalmente, cuando se muestra un registro, podemos guardar en la EEPROM la posición siguiente a leer:
void muestra_registro(void){
if (myFile) {
if (myFile.available()) {
nom[myFile.readBytesUntil(',', nom, 16)] = '\0';
tel[myFile.readBytesUntil('\n', tel, 16)] = '\0';
Serial.println(nom);
Serial.println(tel);
lcd.clear();
lcd.print ("NOMBRE:");
lcd.print (nom);
lcd.setCursor (0, 1);
lcd.print ("TEL:");
lcd.print (tel);
} else {
Serial.println ("Final del Archivo");
myFile.seek (0L);
lcd.clear ();
lcd.print ("Final del Archivo");
}
// TRAS HABER LEIDO REGISTRO, GUARDAMOS LA SIGUIENTE POSICIÓN DE LECTURA DE ARCHIVO
EEPROM.put(0, myFile.position());
} else {
lcd.clear();
lcd.print ("ERROR: no hay SD");
lcd.setCursor (0, 1);
lcd.print ("o archivo no exs");
}
}