Problema con lectura de SD

Estoy haciendo un proyecto de fin de bachillerato y necesito almacenar unas pocas líneas de texto en una tarjeta SD para luego leerlas. Esto haciendo pruebas en un pedazo de código separado del principal. He conseguido abrir y escribir datos pero cuando intento leerlos no lo consigo. Soy bastante nuevo en esto de Arduino y probablemente haya cometido un error tonto pero me encuentro estancado ya que no encuentro el error.

Aqui dejo el código:

#include <SPI.h>    // incluye libreria interfaz SPI
#include <SD.h>     // incluye libreria para tarjetas SD


File archivo;  

void setup() {
  Serial.begin(9600);
  SD.begin();
  SD.remove("PRUEBA.TXT");  //Borro el archivo ya que cada vez que se enciende el arduino necesito que se borre toda la info para volver a escribirla

  delay(1000);

  archivo = SD.open("PRUEBA.txt", FILE_WRITE);    // apertura de archivo prueba.txt
  if(archivo){
    Serial.println("Se ha conseguido crear el archivo");
  }
  else{
    Serial.println("No se ha conseguido ni crear ni abrir el archivo");
  }
  archivo.println("2");
  archivo.println("3");
  archivo.println("6");
  archivo.println("6");
  archivo.println("1000");
  archivo.println("0500");
  archivo.println("0800");
  archivo.println("0300");
  archivo.close();

  archivo = SD.open("PRUEBA.TXT");
  if(archivo){
    Serial.println("Se ha podido abrir para lectura");
    while (archivo.available()) {      //Esta es la parte donde el bucle no funciona y no lee nada
      Serial.write(archivo.read());
    }
    archivo.close();
  }
  else{
    Serial.println("No se ha podido abrir para lectura");
  }
  
  //Serial.println(received);
  archivo.close();
}

void loop() {     // funcion loop() obligatoria de declarar pero no utilizada
  // nada por aqui
}

Agradecería mucho la ayuda de alguien ya que necesito continuar el proyecto lo antes posible.

No sé si ese es el problema, pero...
comparar nombres de archivo

archivo = SD.open("PRUEBA.txt", FILE_WRITE);

y

archivo = SD.open("PRUEBA.TXT");
1 Like

He comprobado si ese es el problema pero no lo es. La cuestión es que el archivo se consigue borrar, abrir, escribir los datos, cerrar y volver a abrir para leerlos pero cuando llega a la parte del bucle while(archivo.available()){} no entra en el bucle y no se porque es.

Primero que nada, por favor, edita tu post y pon el código según Normas del foro, punto 7.

Por otro lado, lo simulé en Wokwi y funciona perfectamente

Mira

Saludos

Sigo pensando que el problema está en el nombre del archivo. Usaría solo letras minúsculas en el nombre - "prueba.txt"
No veo ningún otro error en el código.

Al menos al simulador no le importó el tema de la extensión en minúsculas.
Solo "se molestó" por el espacio detrás de cada #include (no se por qué), los borré y volví a tipear y cero problema.

Saludos

Wow, no entiendo porque hago exactamente lo mismo y no funciona. He revisado las conexiones y en principio todo está correctamente. Solo me falla la parte de leer no se porque.

Las mayúsculas y minúsculas pueden no ser importantes para el simulador, pero no funcionan en una tarjeta real

Respecto a los espacios que cité antes, son caracteres unicode (0xC2A0) en lugar de simples espacios UTF-8 (0x20)

@guillermopinteno Sobre por que no te funciona, la verdad no lo sé.

Saludos

PD: @b707 no lo sé, la librería no aclara que sea "case sensitive" con los nombres de archivo.
Como no tengo una SD a mano, hasta aquí puedo aportar. Slds

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.