limitaciones de texto al escribir un archivo en una SD???? SOLUCIONADO

Buenas a todos…
Tengo un proyecto, en el que estoy trabajando (lisergio.wordpress.com , proyecto RiCino) y en una parte del proyecto escribo varios datos en una SD… simplemente unas lineas de texto, con unos valores …

He querido añadir mas datos al archivo y hay empieza el problema… llega un momento que depende de las lineas a escribir se queda bloqueado el sketch, o simplemente crea el archivo pero esta vacío…

pongo las lineas de la parte de la escritura del archivo… esta marcado el punto a partir del que falla…

para mas INRI, si elimino esas lineas y duplico las anteriores funciona bien, pero si en esas que he duplicado, cambio los textos, también falla

myFile = SD.open(nombrefichero, FILE_WRITE);
if (myFile)
{
myFile.println("******************** INICIO DEL ENTRENO ********************");
myFile.println("");
myFile.println("");
myFile.print(“Tiempo total del entreno: “);
m=tiempo/60000;
mu=m%10;
md=(m-mu)/10;
s=(tiempo/1000)-(m60);
su=s%10;
sd=(s-su)/10;
l=tiempo-(s
1000)-(m60000);
lu=l%10;
ld=((l-lu)/10)%10;
lc=(l-(ld
10)-lu)/100;
myFile.print(md);
myFile.print(mu);
myFile.print(”:”);
myFile.print(sd);
myFile.print(su);
myFile.print(":");
myFile.print(lc);
myFile.print(ld);
myFile.println(lu);
myFile.println("");
myFile.print(“Total de vueltas: “);
myFile.println(numero_vueltas);
myFile.println(””);
myFile.print(“Vuelta rapida - Vuelta “);
if (numero_vuelta_rapida==0)
{
numero_vuelta_rapida=1;
}
myFile.print(numero_vuelta_rapida);
myFile.print(” en: “);
m=vuelta_rapida/60000;
mu=m%10;
md=(m-mu)/10;
s=(vuelta_rapida/1000)-(m60);
su=s%10;
sd=(s-su)/10;
l=vuelta_rapida-(s
1000)-(m60000);
lu=l%10;
ld=((l-lu)/10)%10;
lc=(l-(ld
10)-lu)/100;
myFile.print(md);
myFile.print(mu);
myFile.print(”:”);
myFile.print(sd);
myFile.print(su);
myFile.print(":");
myFile.print(lc);
myFile.print(ld);
myFile.println(lu);
myFile.println("");
myFile.println(“RESUMEN DE VUELTAS:”);
myFile.println("");
int posicion_array = 0;

while (posicion_array<numero_vueltas)
{
myFile.print(posicion_array+1);
myFile.print(" – “);
tiempo_vuelta=guarda_vueltas[posicion_array];
m=tiempo_vuelta/60000;
mu=m%10;
md=(m-mu)/10;
s=(tiempo_vuelta/1000)-(m60);
su=s%10;
sd=(s-su)/10;
l=tiempo_vuelta-(s
1000)-(m60000);
lu=l%10;
ld=((l-lu)/10)%10;
lc=(l-(ld
10)-lu)/100;
myFile.print(md);
myFile.print(mu);
myFile.print(”:");
myFile.print(sd);
myFile.print(su);
myFile.print(":");
myFile.print(lc);
myFile.print(ld);
myFile.println(lu);
posicion_array=posicion_array+1;
}
myFile.println("");
myFile.println("********************* FIN DEL ENTRENO **********************");
myFile.println("");
myFile.println("");

// A PARTIR DE AQUI … DATOS NUEVOS

myFile.println("");
myFile.println("");
myFile.println("************************ DATASHEET *************************");
myFile.println("");
myFile.println("");
myFile.println("");

myFile.print(" CAMBER DELANTERO…: ");
myFile.println(camber_del);

myFile.print(" CASTER DELANTERO…: ");
myFile.println(caster_del);

myFile.print(" TOE DELANTERO…: ");
myFile.println(toe_del);

myFile.print(" AGUJERO PISTON AMORTIGUADORES DELANTEROS…: ");
myFile.println(suspension_del_piston);

myFile.print(" ACEITE AMORTIGUADORES DELANTEROS…: ");
myFile.println(suspension_del_aceite);

myFile.print(" MUELLES AMORTIGUADORES DELANTEROS…: ");
myFile.println(t_muelles_del);

myFile.print(" MOUSSE RUEDAS DELANTERAS…: ");
myFile.println(t_mousse_del);

myFile.print(" MARCA RUEDAS DELANTERAS…: ");
myFile.println(t_marca_del);

myFile.print(" CAMBER TRASERO…: ");
myFile.println(camber_tras);

myFile.print(" TOE TRASERO…: ");
myFile.println(toe_tras);

myFile.print(" AGUJERO PISTON AMORTIGUADORES TRASEROS…: ");
myFile.println(suspension_tras_piston);


// A PARTIR DE AQUI … FALLA SI LO PONGO INCLUSO ELIMINANDO LAS LINEAS DE ESCRIBIR LOS VALORES DE LAS VARIABLES
// SI ESTA COMENTADO FUNCIONA BIEN


myFile.print(" ACEITE AMORTIGUADORES TRASEROS…: “);
myFile.println(suspension_tras_aceite);
myFile.println(”");
delay (50);

myFile.print(" MUELLES AMORTIGUADORES TRASEROS…: “);
myFile.println(t_muelles_tras);
myFile.println(”");

myFile.print(" MOUSSE RUEDAS TRASERAS…: “);
myFile.println(t_mousse_tras);
myFile.println(”");

myFile.print(" MARCA RUEDAS TRASERAS…: “);
myFile.println(t_marca_tras);
myFile.println(”");

myFile.print(" PINON…: “);
myFile.println(pinon);
myFile.println(”");

myFile.print(" CORONA…: “);
myFile.println(corona);
myFile.println(”");

myFile.print(" HEMBRAGUE…: “);
myFile.println(t_hembrague);
myFile.println(”");

myFile.println("");
myFile.close();
}

Me estoy chinando … ya no se que hacer… no le encuentro ninguna lógica ni razón…

alguna idea???

Hola,
yo simplificaría el programa, simplemente haría un
Por ejemplo,
for(n=0;n< 1000; n++)
myFile.println(n);

Jugaría con el tope (1000, 5000, 10000…), y vería lo que pasa.

Otra cosa: Cuando haya una iteración como esta, prueba un pequeño delay al final
while (posicion_array<numero_vueltas)
{


delay(55);
}

he probado lo que me comentas, funciona bien, no hay problemas al escribir....

pero he probado lo siguiente....

he sustituido las lineas a partir de las que falla.... Solo cambiando las lineas de texto de información.... y dejando la de la variable a mostrar....

ESTO ES LO QUE QUIERO; PERO NO FUNCIONA (se bloquea el sketch )

myFile.print(" CAMBER DELANTERO.............................: "); myFile.println(camber_del); delay (50);

myFile.print(" CASTER DELANTERO.............................: "); myFile.println(caster_del); delay (50);

myFile.print(" TOE DELANTERO................................: "); myFile.println(toe_del); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES DELANTEROS.....: "); myFile.println(suspension_del_piston); delay (50);

myFile.print(" ACEITE AMORTIGUADORES DELANTEROS.............: "); myFile.println(suspension_del_aceite); delay (50);

myFile.print(" MUELLES AMORTIGUADORES DELANTEROS............: "); myFile.println(t_muelles_del); delay (50);

myFile.print(" MOUSSE RUEDAS DELANTERAS.....................: "); myFile.println(t_mousse_del); delay (50);

myFile.print(" MARCA RUEDAS DELANTERAS......................: "); myFile.println(t_marca_del); delay (50);

myFile.print(" CAMBER TRASERO...............................: "); myFile.println(camber_tras); delay (50);

myFile.print(" TOE TRASERO..................................: "); myFile.println(toe_tras); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES TRASEROS.......: "); myFile.println(suspension_tras_piston); delay (50);

//********************************************************************

myFile.print(" ACEITE AMORTIGUADORES TRASEROS...............: "); myFile.println(suspension_tras_aceite); myFile.println(""); delay (50);

myFile.print(" MUELLES AMORTIGUADORES TRASEROS..............: "); myFile.println(t_muelles_tras); myFile.println(""); delay (50);

myFile.print(" MOUSSE RUEDAS TRASERAS.......................: "); myFile.println(t_mousse_tras); myFile.println(""); delay (50);

myFile.print(" MARCA RUEDAS TRASERAS........................: "); myFile.println(t_marca_tras); myFile.println(""); delay (50);

myFile.print(" PINON........................................: "); myFile.println(pinon); myFile.println(""); delay (50);

myFile.print(" CORONA.......................................: "); myFile.println(corona); myFile.println(""); delay (50);

myFile.print(" HEMBRAGUE....................................: "); myFile.println(t_hembrague); myFile.println(""); delay (50);

ESTO ESTA MODIFICADO COPIANDO LAS LINEAS ANTERIORES .. ESTO SI FUNCIONA

myFile.print(" CAMBER DELANTERO.............................: "); myFile.println(camber_del); delay (50);

myFile.print(" CASTER DELANTERO.............................: "); myFile.println(caster_del); delay (50);

myFile.print(" TOE DELANTERO................................: "); myFile.println(toe_del); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES DELANTEROS.....: "); myFile.println(suspension_del_piston); delay (50);

myFile.print(" ACEITE AMORTIGUADORES DELANTEROS.............: "); myFile.println(suspension_del_aceite); delay (50);

myFile.print(" MUELLES AMORTIGUADORES DELANTEROS............: "); myFile.println(t_muelles_del); delay (50);

myFile.print(" MOUSSE RUEDAS DELANTERAS.....................: "); myFile.println(t_mousse_del); delay (50);

myFile.print(" MARCA RUEDAS DELANTERAS......................: "); myFile.println(t_marca_del); delay (50);

myFile.print(" CAMBER TRASERO...............................: "); myFile.println(camber_tras); delay (50);

myFile.print(" TOE TRASERO..................................: "); myFile.println(toe_tras); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES TRASEROS.......: "); myFile.println(suspension_tras_piston); delay (50);

//********************************************************************

myFile.print(" CAMBER DELANTERO.............................: "); myFile.println(suspension_tras_aceite); myFile.println(""); delay (50);

myFile.print(" CASTER DELANTERO.............................: "); myFile.println(t_muelles_tras); myFile.println(""); delay (50);

myFile.print(" TOE DELANTERO................................: "); myFile.println(t_mousse_tras); myFile.println(""); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES DELANTEROS.....: "); myFile.println(t_marca_tras); myFile.println(""); delay (50);

myFile.print(" ACEITE AMORTIGUADORES DELANTEROS.............: "); myFile.println(pinon); myFile.println(""); delay (50);

myFile.print(" MUELLES AMORTIGUADORES DELANTEROS............: "); myFile.println(corona); myFile.println(""); delay (50);

myFile.print(" MOUSSE RUEDAS DELANTERAS.....................: "); myFile.println(t_hembrague); myFile.println(""); delay (50);

ESTA ULTIMA PRUEBA; CAMBIANDO MAYUSCULAS POR MINUSCULAS DE LA OPCION QUE ME INTERESA, CREA EL ARCHIVO, PERO ESTA VACIO; NO ESCRIBE NADA

myFile.print(" CAMBER DELANTERO.............................: "); myFile.println(camber_del); delay (50);

myFile.print(" CASTER DELANTERO.............................: "); myFile.println(caster_del); delay (50);

myFile.print(" TOE DELANTERO................................: "); myFile.println(toe_del); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES DELANTEROS.....: "); myFile.println(suspension_del_piston); delay (50);

myFile.print(" ACEITE AMORTIGUADORES DELANTEROS.............: "); myFile.println(suspension_del_aceite); delay (50);

myFile.print(" MUELLES AMORTIGUADORES DELANTEROS............: "); myFile.println(t_muelles_del); delay (50);

myFile.print(" MOUSSE RUEDAS DELANTERAS.....................: "); myFile.println(t_mousse_del); delay (50);

myFile.print(" MARCA RUEDAS DELANTERAS......................: "); myFile.println(t_marca_del); delay (50);

myFile.print(" CAMBER TRASERO...............................: "); myFile.println(camber_tras); delay (50);

myFile.print(" TOE TRASERO..................................: "); myFile.println(toe_tras); delay (50);

myFile.print(" AGUJERO PISTON AMORTIGUADORES TRASEROS.......: "); myFile.println(suspension_tras_piston); delay (50);

//***************************************************************************

myFile.print(" Aceite Suspension Trasera....................: "); myFile.println(suspension_tras_aceite); delay (50);

myFile.print(" Muelles Suspension Trasera...................: "); myFile.println(t_muelles_tras); delay (50);

myFile.print(" Mousse Ruedas Traseras.......................: "); myFile.println(t_mousse_tras); delay (50);

myFile.print(" Marca Ruedas Traseras .......................: "); myFile.println(t_marca_tras); delay (50);

myFile.print(" Pinon........................................: "); myFile.println(pinon); delay (50);

myFile.print(" Corona ......................................: "); myFile.println(corona); delay (50);

myFile.print(" Hembraque ...................................: "); myFile.println(t_hembrague); delay (50);

No entiendo nada :astonished: , Lo único que cambia, son unas lineas de texto, sin ningún carácter especial.... Las lineas en las que escribo el valor de las variables, se escriben de forma correcta... Llevo 5 dias con este problema, y estoy atascadísimo ... ya no se que probar! He probado a quitar , puntos, cambiar mayúsculas, quitar espacios....

que arduino usas? prueba la libreria FreeMem y dinos cuanta memoria RAM te queda libre

Si tienes muchas cadenas de texto, guárdalas en memoria flash. Ahora las tienes todas en RAM... http://playground.arduino.cc/Learning/Memory

FUNCIONAAAA!!!!!!!!! :) :) :) :) :)

usando F para guardar en la memoria flash

myFile.print(F(" CAMBER DELANTERO.............................: "));

Era problema de memoria.. ahora... como vacio la memoria flash???? o no es necesario????

Muchas Gracias!!!!!!!!!!

Sois los mejores!!!!!!!

No tienes que hacer nada. También es conocida como memoria de programa (es decir, donde se sube tu programa).

;)

Perfecto entonces! Imagino que se borra al reiniciar...

Mañana probare la libreria freemem , para ver como ando de memoria libre, y modificar el scketch para que todos string se guarden en la flash....

Gracias otra vez!

Bueno, pues en mi arduino mega... después de pasar todos los strings a la memoria flash.. y usando la libreria MemoryFree ...he pasado de 1295 a 3481 bytes libres...

ahora funciona bien y graba sin problema el archivo en la SD....

me alegro. en mi primer proyecto grande yo sufrí 2 o 3 meses volviéndome loco por culpa de que había llenado el Arduino UNO.