Explorar y abrir archivos de una SD???

Buenas a todos de nuevo...

Vuelvo por aqui para solicitar de vuestra sabiduría...

En mi proyecto creo archivos de texto en diferentes carpetas, con la siguiente estructura...

ENTRENOS
... > AÑO
......> MES
..........> DIA
.............> HORA.txt

he visto ejemplos de como abrir un archivo concreto, pero me interesaría poder explorar las carpetas y seleccionar el archivo que yo quiera para poder ver el contenido, y mostrarlo en un display...

Conocéis algún ejemplo que pueda mirar para saber por donde me da el aire?? ando un poco perdido... y no encuentro nada con el oráculo google...

Gracias de antemano .....

1 Like

echa un ojo a esto a ver si es lo que buscas.

También puede que te interese esta otra función para saber si son directorios aunque pienso que usas un orden bastante regular y puede que no te haga falta.

Lo tienes todo en la clase SD.h. Ya nos contarás cómo te ha ido!

Gracias! Eso ya lo tenia mirado , y me viene bien para abrir un archivo en cuestion...
Pero para abrirlo debo saber la ruta exacta...
Mi plan es poder navegar por los directorios y ver los archivos de cada directorio en un lcd...y una vez visto el nombre del archivo,poder seleccionarlo y abrirlo para verlo linea a linea.

Pero no consigo hacerlo...

A ver si consigo ayudarte. He hecho este pequeño ejemplo, cutre pero espero que te sirva para entenderlo, que si lo cargas te sirve para listar todos los archivos que hay en un directorio. Con la función isDirectory() ves si es un directorio o un archivo. En tu programa si es un archivo al seleccionarlo debería abrirlo y si es un directorio pues imprimes todos los archivos de ese nuevo directorio. Para el asunto de la ruta puedes ir almacenando en una variable la ruta que has ido siguiendo al navegar, cada vez que entras en un directorio nuevo pues se lo añades a la ruta al final y listo!

#include <SD.h>

File root;
File archivo;

void setup()
{
  Serial.begin(9600);
  pinMode(10, OUTPUT);

  if(SD.begin(10)){
    Serial.println("Iniciado correctamente.");
  }else{
    Serial.println("Error al iniciar.");
  }

  root = SD.open("/");

  do{
    archivo = (root.openNextFile());
    if(!archivo){
        //Si no hay archivo siguiente
        Serial.println("\n \n FIN");
    }else{
      Serial.print(archivo.name());  //Imprimo el nombre
      if (archivo.isDirectory()){
          //Si es un directorio
          Serial.print("\t \t directorio");
      }else{
          //Si es un archivo
          Serial.print("\t \t archivo");
      }
      Serial.print("\n");
    }
  }while(archivo);
  
}

void loop()
{

}
1 Like

Ok! muchas gracias por el scketch y por la idea.. voy a estudiarla.. y ya comentare los resultados...
quiero mostrarlo en un LCD 2x16, así que tengo curro para hacerlo....

gracias otra vez...