Escritura en SD

Buenas a todos os paso parte de un programa que funciona bien. El problema está en que si por accidente se saca la SD, el programa no entra en el "else", sigue enviando por el monitor serie el incremento del numero como si tal. Alguien sabe si la condición para que entre en el if comprueba realmente que el fichero está y por consiguiente la SD esta insertada, gracias.

void loop()
{

 myFile = SD.open("test.txt", FILE_WRITE );
 if (myFile)
 {
   myFile.println(numero);
   myFile.close();
   Serial.println(numero);
   numero = numero + 1;
 }
 else                                                              
 {
   Serial.println("\nError abriendo el fichero.");
 }

}

Aunque es más lento, pero se podría hacer SD.begin() repetidamente para asegurarse que la tarjeta siga adentro...

Gracias Lucario448. Problema solucionado... pero a medias. Te cuento. Ahora al sacar la SD el monitor serie sigue mostrando incrementos de números. Al volver a poner la SD AHORA si que vuelve a grabar en la SD, pero claro, por el numero que va el contador. Gracias un saludo.

Hola,
Quizás si haces

File myFile = SD.open("test.txt", FILE_WRITE );
 if (myFile)

No conozco mucho c++ pero es posible que un if sobré un objeto no nulo no sea false, como tú objeto no se inicializa de nuevo y al no poder cargar el archivo estoy convencido que no se vacía o carga con nulo por lo tanto un if sobre ese objeto siempre devolverá true, de ahí que nunca pase por el else.
Si lo instancio cada vez el objeto se vuelve a crear y al no poder cargar el fichero quedará en nulo o vacío y por lo tanto el if será false.
O también puedes intentar usar el método exists ()

Hola, es curioso que todos los ejemplos que he visto por ahí escritos realizan todo en el SETUP, no he visto ninguno que realice la escritura-lectura de una manera cíclica en el LOOP..... Esto con Asembler no me pasaba...... No sé como hacer para meter mano en las librerías del la SD y ver como trabajan las funciones. Un saludo.

Las que vienen por defecto o junto con el IDE estan en C:\Archivos de programa\Arduino\libraries
Las que instalas desde zip, es configurable yo por ejemplo las tengo en misdocumentos\arduino\libraries

El fichero con el código es el *.cpp

Llevado a la estructura del C común donde solo tienes un void main() {}

recuerda que ahi comienzas inicializando todo... y luego de hacerlo pasas a un while(1) { } que equivale al loop.

Si tu solo te restringes a setup() el proceso de inicializar un archivo se hará solo una vez.
Por eso acá se coloca en el loop o sea dentro del while(1) de la estructura habitual de C que no es la del IDE Arduino.

Existe un par de pines en la SD que te indican si esta o no presente la memoria. Creo que esos pines no estan en uso en las librerías. Sería aconsejable que vieras si en tu módulo estan de algun modo conectados al arduino y si lo estan y tienes lectura del estado de presencia de la SD lo uses o lo agregues a tu sketch.

Si ese switch que menciono esta cableado a algún pin podrás resolver con facilidad tu problema.

Gracias, seguiré investigando. Un saludo.

Busca lupa y sigue las conexiones de ese switch. Son bastante fáciles de seguir. Si tienes una conexión disponible resuelves tu problema.