Problema lectura SD.

Creo haber encontrado en que parte radica el fallo en el sketch del anterior post.

No me lee bien la SD, cuando provando ésta misma función en un programa simple funciona. Adjunto el sketch y lo que me muestra el puerto serie.

#include <SD.h>
#include <SPI.h>
#include <Time.h>
#include <SoftwareSerial.h>
#include <WiFlyHQ.h>
SoftwareSerial wifiSerial(8,10);
const char mySSID[] = "XXX";
const char myPassword[] = "XXXX";
WiFly wifly;
uint32_t rtctime;
int adelanto=1;
int aux=0;
String linea, valor, fecha, medida;
float t33, t50;




void setup() {
  
  Serial.begin(9600); //Establecemos velocidad de conexion con puerto serie.
  wifiSerial.begin(9600);
  iniWifly();
  iniDate();
  iniSD();
}

void loop() {
  valor=medSens();
  valor=valor+getDate();
  Serial.println(valor);

  if (aux<5){
    guardarSD();
    }
    
  else{
    while(aux>=0){
      linea=leerSD(aux);
      Serial.println(linea);
      aux--;
    }
    SD.remove("test.txt");
  }
  aux++;
  delay(3000);
}

void guardarSD(){
  File Archivo1; //Creamos un archivo de prueba que sera copiado en la funcion mover archivo.
  Archivo1=SD.open("test.txt",FILE_WRITE);  //Abrimos el Archivo1 creado para ESCRIBIR.
  
  if(Archivo1){  //Añadimos el texto a modo de prueva a nuestro archivo test.txt
    Archivo1.println(valor);
    Archivo1.close();
  }
  else{
    Serial.println("Mierda, no se ha creado el archivo.");
    }
  
}    
String leerSD(int posicion){
  
  char Ruta[9]={'t','e','s','t','.','t','x','t','\0'}; //Array de caracteres que identifican nuestro documento de texto.  
  String Line;
  Line=ReadFile(posicion,Ruta); //Leemos la linea de archivo en la ruta SD.
  return Line;
}

String ReadFile(int Linea,char Ruta[]){
  int Lin=0;
  String Resultado;
  File Archivo;
  byte Bin;
  Archivo=SD.open(Ruta);
  if(Archivo){
    while(Archivo.available()){
      Bin=Archivo.read(); //Leemos el archivo en bytes
      if (Bin==13){ //El numero 13 corresponde al Retorno del carro. El 10 a la nueva linea. El 37 con el %.
        Lin++;
        Archivo.read();
        }
      else{
        if(Lin==Linea){ //Cuando linea coincida con la que queremos, acumulamos nuestra string en Resultado.
          Resultado=Resultado+(char(Bin));
        }
        if(Lin>Linea){
          Archivo.close();
          return Resultado;
        }
      }
    }
    Archivo.close();
    return Resultado;
  }
}

void iniSD(){
   pinMode(10,OUTPUT);
  if(!SD.begin(4)){  //Si no inicializa la SD...
    return;
    }
  if(SD.exists("test.txt")){  //Miramos si existe un archivo llamado test.txt
    SD.remove("test.txt");    //Lo eliminamos.
  }
}

void iniWifly(){
    if (!wifly.begin(&wifiSerial, &Serial)) {
        Serial.println("Fallo al inicializar Wifly.");
	return;
    }
    if (!wifly.isAssociated()) {
	wifly.setSSID(mySSID);
	wifly.setPassphrase(myPassword);
	wifly.enableDHCP();
	if (!wifly.join()) {	   
	    Serial.println("Fallo al conectar wifly");
	    return;
	}
    } 
    else {
        Serial.println("Ya estabas conectado");
    }
    Serial.println("WiFly listo");
}

void iniDate(){
    wifly.setTimeAddress("24.56.178.140"); // nist1-pa.ustiming.org - 206.246.122.250	- Hatfield, PA
    wifly.time();
    rtctime=wifly.getRTC();
    setTime(rtctime);
    if(month() > 3 && month() < 11) adelanto = 2;
    else adelanto = 1;    

}

String getDate(){
  
    rtctime=now();
    setTime(rtctime);    
    if(month() == 3 && day() > 24 && weekday() == 1) //El domingo es dia 1
    {
      if(adelanto == 1) adelanto = 2; //2 es verano y 1 es invierno.
    }

    if(month() == 10 && day() > 24 && weekday() == 1)
    {
     if(adelanto == 2) adelanto = 1;
    }
    rtctime=rtctime+3600*adelanto;
    adelanto=0;
    setTime(rtctime);
    fecha=String(year())+printDigits(month())+printDigits(day())+printDigits(hour())+printDigits(minute())+printDigits(second());
    fecha="&FECHA="+fecha;
    return fecha;
}

String printDigits(byte digits)
{
  String nuevodigit;
  if(digits < 10){
   nuevodigit="0"+String(digits,DEC);
   }
  else{
   nuevodigit=String(digits,DEC);   
   }
  return nuevodigit;
}

String medSens()
{
  t33 = analogRead(A0);
  t50 = analogRead(A1);
  t33=t33*5;
  t33=t33/1024;
  t50=t50*5;
  t50=t50/1024;
  medida="SENSOR1="+String(t33)+"&SENSOR2="+String(t50);
  return medida;
}

Adjunto lo que muestra el puerto serie.

La libreria WiflyHQ es la siguiente: Libreria WiflyHQ

Un saludo.

Peta la función ReadFile y devuelve un valor vacío.

Pudiera ser falta de memoria en el momento de hacer el barrido de caracteres en la SD?

Puedes usar esa libraría para saber si es falta de memoria: https://github.com/maniacbug/MemoryFree

fíjate en el ejemplo que trae.

Si no es eso, podríamos buscar alguna otra solución.

Utilicé la librería en el paso de ir acumulando el barrido de la SD, y el valor no variaba. Se mantenía y no a un valor excesivamente bajo.

Si fuera problema de memoria, alguna idea de cómo solucionar el guardado y lectura en SD?