Problema SD.begin()

Salve a tutti,
ho bisogno di un aiuto...da quasi un anno mi cimento con Arduino e sono inceppato in un problema che non riesco a risolvere...
Con Arduino Uno ricevo un segnale da un sensore e salvo la media su microSD (usando l'apposito modulo) ogni 10 minuti. Funziona tutto bene ma succede che se, dopo il primo ciclo tolgo la microSD, Arduino procede normalmente come se salvasse i dati senza accorgersi dalla mancanza della scheda (se la tolgo al primo ciclo invece se ne accorge)!! L'SD è inizializzato nel setup e qui se non è presente la scheda se ne accorge.
Questo è il codice che uso per la scrittura del file

    Input = SD.open("Misure.txt", FILE_WRITE);

  if(Input){
    Input.print(media);
    Input.print(";\n");
    Input.close();
    }
   else{
     lcd.setCursor(0, 0);
     lcd.print("Errore scrittura file");
     digitalWrite(LEDRED, HIGH);
     exit(-1);
   }

Visto che così non se ne accorge ho pensato di inserire un controllo prima della scrittura usando lo stesso che uso per l'inizializzazione dell'SD, ovvero

    if(!SD.begin(4)) {
      lcd.setCursor(0, 0);
      lcd.print("SD fallita");
      digitalWrite(LEDRED, HIGH);
      exit(-1);
    }

ma è addirittura peggio perchè anche se l'SD è inserita (nonostante l'inizializzazione avviene correttamente) esce dal ciclo segnalando l'errore. Come posso fare?
Inoltre se tolgo la scheda SD e la rimetto non scrive più i file quindi dovrei ri-inizializzarla per evitare di resettare. Come?

Grazie in anticipo

Secondo me (leggendo in giro su internet) la libreria SD non è pensata per permettere il togliere la schedina mentre il circuito/arduino è attivo. Non siamo su un PC con sistema operativo.

Un modo per verificare se la SD c'e' ancora è aprire il file in lettura dopo la scrittura.
La scrittura se il file non esisteva lo crea, l'apertura in lettura dovrebbe riuscire, se tolgono la SD la lettura non riesce.
Qualcosa del tipo:

boolean err=false;
Input = SD.open("Misure.txt", FILE_WRITE);
if(Input)
{  Input.print(media);
   Input.println(";");
   Input.close();
   Input = SD.open("Misure.txt", FILE_READ);
   if( ! Input ) err=true;
   Input.close();
}
else
{ err=true;
}
if(err==true)
{ lcd.setCursor(0, 0);
  lcd.print("Errore scrittura file");
  digitalWrite(LEDRED, HIGH);
  while(1) ;        //  la exit NON ha senso in Arduino!! exit(-1);
}

P.S. la exit() non ha senso su Arduino, non hai lanciato un programma in un PC son sistema operativo ed all'errore esci (chiudi) il programma, su Arduino c'e' un solo programma in esecuzione infinita, al massimo puoi bloccare tutto con un while(1) ; infinito.

Ho provato ma non cambia niente, il ciclo continua senza accorgersene...probabile sia un problema legato alla libreria come hai detto tu.

Grazie mille.

Prova aprendo in lettura un file che tu crei e ce sai che esiste e nel quale metti un carattere, es. 'A'. Dopo l'apertura leggi un carattere ...

... se la SD è inserita doverti non ricevere errori e leggere la tua 'A', se non c'è la SD, anche se non ti da errore alla Open, comunque è impossibile che lagga il carattere che tu sai di aver messo nel file (la 'A') :wink:

Dopo aver letto, chudi il file prima del prossimo ciclo.

Fammi sapere se così riesci ad individuare la rimozione ...

Guglielmo