GPS dataloger atto finale, mi date un occhio al codice ? non posso provarlo -_-

Ho finito l’elettronica del datalogger GPS portatile per bici/escursionismo/passeggiate etc.
All’interno cè GPS SkyNav35, LiPo 1S 1Ah, carica lipo, supporto per SD card, Schermo Nokia 5110, Una Breackout con sopra un 328 con lo stesso pinout del ProMini.
Ora il tempo non mi consente di provare il circuitino e non posso mettermi in auto con il circuito ed il portatile e girare per il paese guidando e programmando allo stesso tempo -_-
Qui mi serve il vostro aiuto, il codice è il seguente :

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <SPI.h>
#include <SD.h>


const int chipSelect = 10;
TinyGPS gps;
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
SoftwareSerial nss(14, 15);

void setup()
{ Serial.begin(9600);
  display.begin();
  display.setContrast(25); //3.3 ->30
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(BLACK);
  display.setCursor(0,5);
  display.print("Ratto's");
  display.setCursor(25,26);
  display.print("GPS");
  display.display(); 
  delay(650); 
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Initializing  SD card...");
  display.display();
  delay(600);
  if (!SD.begin(chipSelect)) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("SD-CARD failedor not present");
  display.display();
  delay(600);
    return;
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("SD-CARD OK !!!");
  display.println("  Log Start.");
  display.display();
  delay(600);
}




void loop()
{
  String dataString = "";
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (nss.available())
    {
      char c = nss.read();
      if (gps.encode(c))
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    display.begin();
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK);
    display.print("LAT=");
    display.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
          dataString += (flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
          dataString += ","; 
    display.println(" LON=");
    display.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
          dataString += (flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
          dataString += ","; 
    display.println(" SAT=");
    display.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
          dataString +=(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites()) ;
          dataString += ","; 
    display.println(" PREC=");
    display.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
          dataString +=(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop()) ;
          dataString += ","; 
    display.println(" VEl=");
    display.print((gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2));
          dataString += (gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
          dataString += ","; 
    display.println(" ALT=");
    display.print((gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2));
          dataString += (gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
    display.display();
    delay(20);

  }


  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  }  
  else {
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(BLACK);
      display.setCursor(0,0);
      display.println("error opening datalog.txt");
      display.display();
      delay(600);
  } 
}

Fino al setup so che funziona al 100% apre la Sd e lo schermo funziona correttamente,il mio dubbio arriva poi, ora la TinyGPS fa in modo che finchè non vi sono dati non restituisce alcun valore, così ho sostituito i dati in arrivo dalla lib a mano, ho reso vero l’if che fa partire praticamente tutto il codice dentro il loop.
Su schermo i dati sono formattati correttamente però ciclicamente mi fa vedere i dati riguardanti laat, lon vel etc… e alternatamente mi dice (error opening datalog.txt)
La cosa a dir poco stramba è che con i codici di esempio che aprono, scrivono frugano dentro la sd funzionano tutti restituendo dati veritieri… non capisco proprio -_-