GPS data logger

Salve a tutti,
Sono nuovo del forum e del mondo Arduino, e spero qui di trovare un aiuto a risolvere un problema relativo a un progettino di GPS data logger che ho in mente.
Basando il progetto su una scheda Mega 2560 originale, ho collegato ad essa un modulo PA6H in modalita’ UART (cioe’ ho collegato semplicemente il modulo alla alimentazione e l’uscita dati seriali TX del modulo all’ingresso RX1 della Arduino.
Il tutto funziona perfettamente, e riesco a mandare al PC e vedere i dati delle sentenze NMEA complete e bene ordinate per riga utilizzando Monitor seriale del IDE Arduino e perfettamente utilizzabili da un programma di navigazione installato sul PC.
Ma poiché e’ mia intenzione di memorizzare questi dati su una SD Card, ho anche aggiunto al tutto un modulino SD Card lettore e scrittore.
Anche esso in linea generale sembra funzionare, ma vado ad aprire sulla SD Card il file generato, mi accorgo che i dati (le sentenze NMEA), vengono scritte in maniera quasi casuale e probabilmente anche incomplete, ma soprattutto senza rispettare le righe.
Al fine di potere comprendere meglio il problema, allego il Codice Arduino che ho scritto

#include <SD.h>
#include <SPI.h>
 
int cs = 53; // Set Chip Select to pin ten

File myFile;  // a File Object
 
void setup()
{

 pinMode(cs, OUTPUT);
  

  char myFileName[] = "Prova.txt";  // The name of the file we will create
  String LineString = "";  
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  Serial1.begin(9600); // GPS baudrate
  while (!Serial) {
    
  }
  Serial.println("Initializing SD card...");
  Serial.println();
  
  //pinMode(cs, OUTPUT);
  
  // Documentation says you're supposed to do this
  // even if you don't use it:
  //pinMode(SS, OUTPUT);
   
  // see if the card is present and can be initialized:
  if (!SD.begin(cs)) {
    Serial.println("SD did not initialiazed");   
    while (1) ;
  }
  Serial.println("SD initialized.");
  Serial.println();
  Serial.println("Reading Prova.txt...");
  Serial.println();
 
  // Open our File for Reading
  myFile = SD.open(myFileName, FILE_READ);
  
  // Keep Reading String until there are no more
  while (myFile.available() != 0) {  
    // read the string until we have a newline
    // Careful on using this where you don't have newlines.

    LineString = myFile.readStringUntil('\n');
    Serial.println(LineString);       
  } 
 myFile.close();
 
 Serial.println();
 Serial.println("Done");
 
 
  //myFile = SD.open(myFileName, FILE_WRITE); 
    //myFile.println("Another Line of Data");  // Send Your First Line to that file
    //myFile.flush();

} 
  
void loop()
{

 if (Serial1.available())
  {
   
   char c = Serial1.read();
   
      
    myFile = SD.open("Prova.txt", FILE_WRITE);
    myFile.print(c); 
    myFile.close();
    
    }    
  
}

e un “Sample” del file scritto sulla SD.

$GPGSA,A,1,,,,,,,,,,,C,,
$GPGSA,A,1,,,,,,,,,,,,,,2,C,,
T.$GPGGA,194948.097,,,,,0,0,,,M,,M,,*4F
$GPGSA,A,1,,,,
T0$GPGGA,194949.084,,,,,0,0,,,M,,M,,*4C
$GPGSA,A,1,,,,,,,,RF,.$GPGGA,194950.084,,,,,0,0,,,M,,M,,*44
$GPGSA,A,1,,,,,,,,1,2
,0$GPGGA,194951.084,,,,,0,0,,,M,,M,,*45
$GPGSA,A,1,,,,,,,,1901G$GPGGA,194952.084,,,,,0,0,,,M,,M,,*46
$GPGSA,A,1,,,,,,,,G,2P400$GPGGA,194953.084,,,,,0,0,,,M,,M,,*47
$GPGSA,A,1,,,,,*4,0P,,$GPGGA,194954.084,,,,,0,0,,,M,,M,,*40
$GPGSA,A,1,,,,,,,,MV03,.$GPGGA,194955.084,,,,,0,0,,,M,,M,,*41
$GPGSA,A,1,,,,,,,,,
50,G$GPGGA,19,4,,9,2
,.$GPGGA,194956.300,,,,,0,3,,,M,,M,,*4E
$G,*1,0,,1,9,2
,.$GPGGA,194958.000,,,,,0,3,,,M,,M,,*43
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
5.1V,,$GPGGA,194959.000,3806.9458,N,01321.8479,E,1,3,2.58,107.0M,,2$08,2
$GPGGA,195000.000,3806.9461,N,01321.8483,E,1,3,2.58,1,,09017A7,
$GPGGA,195001.000,3806.9464,N,01321.8492,E,1,3,2083,1C336,,,$A8223P,740,
,,G9N,1G,K$GPGGA,195003.000,3806.9468,N,01321.8501,E,1,3,2.58,106.9,M,43.1,M,,
096.4,213$GPGGA,195004.000,3806.9468,N,01321.8503,E,1,3,2.5900,G0,E2$T5$GPGGA,195005.000,3806.9468,N,01321.8505,E,1,3,2.58,,A,,$08,,
,.$GPGGA,195006.000,3806.9469,N,01321.8509,E,1,3,2.,M,,.N01G,4$GPGGA,195007.000,3806.9467,N,01321.8510,E,1,3,2.58M$1,0,426*2,072,,G.*595,,5R,,01G,,$GPGGA,195009.000,3806.9464,N,01321.8510,E,1,3,2.58,106.9,M,43.1,M,,
,,0.1,313$GPGGA,195010.000,3806.9464,N,01321.8509,E,1,3,2..5,,,M,111$GPGGA,195011.000,3806.9464,N,01321.8511,E,1,3,2.583P,74195.*.N
$GPGGA,195012.000,3806.9462,N,01321.8510,E,1,3,2.5,$1,S7,00S90.1,313$GPGGA,195013.000,3806.9463,N,01321.8512,E,1,1,8MA0.0PMK,01..S861813,,.*$GPGGA,195015.000,3806.9456,N,01321.8515,E,1,3,2.58,106.9,M,43.1,M,,
,

Come si puo’ notare, sembrerebbe che fino al Fix i dati vengano scritti abbastanza in ordine e riga per riga, ma dopo il Fix non si capisce piu’ dove inizino le sentenze NMEA e dove finiscano.

Preciso che la prima parte del codice come si potra’ intuire riguarda solamente la lettura della SD, mentre solamente la parte “Void loop” riguarda la scrittura del dati.
Grazie

Buona sera,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO … Grazie.

Guglielmo