Pages: [1]   Go Down
Author Topic: SD card saving problems  (Read 192 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey forum,

I'm busy building a gps logger. Im using an UP501 gps and a regular SD card slot.
In the code below everything works perfectly fine and without  a gps connection zeros get saved on the SD card as you would expect. When the gps gets a connection nothing gets saved on the SD card anymore and I have no idea how this comes. Can you please advise?

Greets,

Leo

Quote

#include <TinyGPS.h>
#include <SoftwareSerial.h>
#include <SD.h>


File GPSFile;

TinyGPS gps;
SoftwareSerial nss(2, 3);
float flat=0;
float flon=0;
int year;
byte month, day, hour, minute, second, hundredths;
byte hourDiff=1;
byte minuteDiff=0;
byte secondDiff=0;


int stap=0;
int time=0;

void setup()
{
  pinMode(10, OUTPUT);
  if (!SD.begin(10)) {
    return;
  }
}


void loop()
{

  time=millis();
  startGPS();
  writeToSD();
  gpsdump(gps);
  if((gps.satellites())!=(TinyGPS::GPS_INVALID_SATELLITES)){
    gpsdump(gps);
    writeToSD();
  }
  delay(5000);
}



void writeToSD(void)
{
  GPSFile = SD.open("GPSFile.txt", FILE_WRITE);
  if (GPSFile) {
    ////Serial..print("Writing to GPSFile.txt");
    GPSFile.print(" ");
    GPSFile.print(flat,5);
    GPSFile.print(" ");
    GPSFile.print(flon,5);
    GPSFile.print(" ");
    GPSFile.print(day);
    GPSFile.print("/");
    GPSFile.print(month);
    GPSFile.print("/");
    GPSFile.print(year);
    GPSFile.print(" ");
    GPSFile.print(hour+hourDiff);
    GPSFile.print(":");
    GPSFile.print(minute+minuteDiff);
    GPSFile.print(":");
    GPSFile.println(second);
    // close the file:
    GPSFile.close();
    ////Serial..println("done.");
  } 
  else {
    // if the file didn't open, print an error:
    ////Serial..println("error opening GPSFile.txt");
  }
}

static void gpsdump(TinyGPS &gps)
{

  unsigned long age, date, time, chars = 0;
  gps.f_get_position(&flat, &flon, &age);
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);

}
void startGPS(void)
{
  bool newdata = false;
  unsigned long start = millis();
  while (millis() - start < 1000)
  {
    if (feedgps())
      newdata = true;
  }

}

static bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}

Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You are going about collecting data from the GPS all wrong. You should not have any kind of time limit on collecting data. What you should do is log the data whenever there is a complete sentence. If that is too much, change to record every third complete sentence, or every twelfth sentence (Or whatever value causes recording often enough).
Logged

Pages: [1]   Go Up
Jump to: