Scrittura .txt su SD card

Ciao a tutti! XD
Ho un problema con la scrittura di un file .txt all'interno di una SD card, preceduto dalla lettura di un altro file : "index.htm", il quale però viene gestito senza alcun problema.

Lo sketch che segue fa questo :

  • Leggo il file index.htm carattere per carattere, nella stringa "s"
  • Stampo sia sul monitor Seriale che sul File di destinazione "test.txt" (sul file non ci finisce niente...)
  • Vado a effettuare la lettura del file "test.htm" per verificare la scrittura.
#include <SPI.h>
#include <SD.h>

void setup() {
  
  Serial.begin(9600);
  
  if (!SD.begin(4)) {  Serial.print("Errore sulla SD..."); return; }
}


void loop()
{
  char c;
  String s=String();
  char* file_to_load = "index.htm";
  File htmlFile = SD.open( file_to_load );
   
   if (!htmlFile) {
     Serial.print("Errore : Il file ' ");
     Serial.print(file_to_load);
     Serial.println("' non esiste!");
     exit(0);
   }
    if (SD.exists("test.txt")) {
     Serial.println("'test.txt' esiste gia'...rimozione in corso..'");
     SD.remove("test.txt");
   }
    // Creo un nuovo file per scriverci su la versione modificata dell'altro
   File myFile = SD.open("test.txt", FILE_WRITE);
   
   
   
  // Ricevo i caratteri
  Serial.println("Lettura File");
  
  while (htmlFile.available()) {
      
        boolean end_row = false;
        s = String();
        
        while(!end_row) {
            c = htmlFile.read();
            
            if(c == '\n'){
                end_row = true; 
            }
            s += c;
        }// FINE RIGA
        int i=0;
        Serial.println(s);
        myFile.print(s);
        /*
        while(myFile.write(s.charAt(i)) && i<s.length()){
          i++;
        }   */  
  }
  
  Serial.println("Scrittura Terminata");
  
  htmlFile.close();
  myFile.close();
  
  
  
  Serial.println("Lettura del File Scritto");
  
  myFile = SD.open("test.txt");
  
  while (myFile.available()) {
        Serial.write(myFile.read());
  }
  
  myFile.close();
}

Ora, voi trovate errori!?

Grazie a tutti!

Risolto, era una sciocchezza.
Andavo a far la lettura all'interno del loop() senza metter un controllo iniziale, il loop ciclava il codice all'infinito....un gran minestrone insomma...ora funziona...

ti andrebbe di postare il codice corretto ?

magari potrà essere d'aiuto ad altri :stuck_out_tongue:

Certo! XD

Ecco qui:

/* Queso sketch Legge un file testo in ingresso e produce un file "test.txt" uguale, memorizzato su SD card. */


#include <SPI.h>
#include <SD.h>

int i=0;


void setup() {
  
  Serial.begin(9600);
  if (!SD.begin(4)) {  Serial.print("Errore sulla SD..."); return; }
}


void loop()
{
  
  if(i==0){      // Senza questo, il loop leggerebbe il file continuamente, senza fine..
    i++;
    char c;
    String s=String();
    char* file_to_load = "index.htm";
    File htmlFile = SD.open( file_to_load );
   
    if (!htmlFile) {
      Serial.print("Errore : Il file ' ");
      Serial.print(file_to_load);
      Serial.println("' non esiste!");
      exit(0);
    }
    
    if (SD.exists("test.txt")) {
      Serial.println("'test.txt' esiste gia'...rimozione in corso..'");
      SD.remove("test.txt");
    }
    // Creo un nuovo file per scriverci su la versione modificata dell'altro
    File myFile = SD.open("test.txt", FILE_WRITE);
   
   
    // Ricevo i caratteri
    Serial.println("Lettura File");

  
   boolean end_row = false;
  
   while (htmlFile.available()) {
      
        c = htmlFile.read();
        // in ogni caso, aggiungo il carattere alla stringa
        s += c;
        
        // ho raggiunto la fine della riga?
        if(c == '\n'){
            end_row = true; 
        }
        
        // Se ho raggiunto la fine, stampo, azzero le variabili e passo alla successiva
        if(end_row) {
            Serial.println(s);
            myFile.println(s);
            end_row = false;
            s = String();
        }// FINE RIGA
       
   }
   // Se è l'ultima stringa, non ci son più caratteri da leggere..
   s += '\n';
 
   // Scrivo l'ultima stringa del file
   Serial.println(s);
   myFile.println(s);
  
  
   Serial.println("Scrittura Terminata");
  
   htmlFile.close();
   myFile.close();
  
  
  
  Serial.println("Lettura del File Scritto");
 Serial.println("");
  
  myFile = SD.open("test.txt", FILE_READ);
  
  while (myFile.available()) {
        Serial.write(myFile.read());
  }
  
  myFile.close();
  
  } // fine - if(i=0)
}