10Hz GPS data with TinyGPSPlus library

Thank you very much for the reply again /Dev, I have applied the code you provided and it's working flawlessly.

 gps.send_P( &gps_port, F("PMTK251,115200") ); // set baud rate
     ...
  gps.send_P( &gps_port, F("PMTK220,100") );    // set 10Hz update rate

this is the better way! as I don't want to mess with the things again.

I have been logging the data into a class 4 micro SD card using the catalex module, and I am using the SDFAT.h library for data logging.

below is my full code

#include <Arduino.h>
#include <NMEAGPS.h>
#include <SPI.h>
#include <SdFat.h>

NMEAGPS  gps; // This parses the GPS characters

#define gps_port Serial1
File dataFile;


char filename[] = "12345.tcx";


SdFat SD;

const int xpin = A0;                  // x-axis of the accelerometer
const int ypin = A1;                  // y-axis
const int zpin = A2;                  // z-axis
int x, y, z, total;

void setup()  {
  Serial.begin(9600);
  Serial.flush();

  gps_port.begin( 9600 );
  gps.send_P( &gps_port, F("PMTK251,115200") );  // set baud rate
  gps_port.flush();                              // wait for the command to go out
  delay( 100 );                                  // wait for the GPS device to change speeds
  gps_port.end();                                // empty the input buffer, too

  gps_port.begin( 115200 );                      // use the new baud rate
  gps.send_P( &gps_port, F("PMTK220,100") );     // set 10Hz update rate
  pinMode(37, INPUT_PULLUP);
  if (!SD.begin(4)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
  Serial.println("Code Running");

}

void doSomeWork( const gps_fix & fix ) {

  if (fix.valid.date )
  {
    Serial.println("Co-ordinates Achived");
    dataFile = SD.open(filename , FILE_WRITE);
    Serial.println(filename);
    if (dataFile) {
      Serial.println("File created");
      Serial.println("LOGGING DATA!");
      dataFile.println(F("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
      dataFile.println(F("<TrainingCenterDatabase xmlns=\"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2\">"));
      dataFile.println(F("<Activities>"));
      dataFile.println(F("<Activity Sport=\"Other\">"));
      dataFile.println("<Id>");
      dataFile.print(fix.dateTime.full_year());
      dataFile.print("-");
      dataFile.print(fix.dateTime.month);
      dataFile.print("-");
      dataFile.print(fix.dateTime.date);
      dataFile.print("T");
      dataFile.print(fix.dateTime.hours);
      dataFile.print(":");
      dataFile.print(fix.dateTime.minutes);
      dataFile.print(":");
      dataFile.print(fix.dateTime.seconds);
      dataFile.print(":");
      dataFile.print(fix.dateTime_cs);
      dataFile.print(".000Z");
      dataFile.println("</Id>");
      dataFile.println("<Lap StartTime=\"");
      // dataFile.print(String(ddate));
      dataFile.print("T");
      //dataFile.print(String(ttime));
      dataFile.print(".000Z\">");
      dataFile.println("<Track>");
    }
    while (1)
    {
      if (digitalRead(37) == LOW) {
        endtask();
      }
      dataFile.println("<Trackpoint>");
      dataFile.println("<Time>");
      dataFile.print(fix.dateTime.full_year());
      dataFile.print("-");
      dataFile.print(fix.dateTime.month);
      dataFile.print("-");
      dataFile.print(fix.dateTime.date);
      dataFile.print("T");
      dataFile.print(fix.dateTime.hours);
      dataFile.print(":");
      dataFile.print(fix.dateTime.minutes);
      dataFile.print(":");
      dataFile.print(fix.dateTime.seconds);
      dataFile.print(":");
      dataFile.print(fix.dateTime_cs);
      dataFile.print(".000Z");
      dataFile.print("</Time>");
      dataFile.println("<Position>");
      dataFile.print("<LatitudeDegrees>");
      dataFile.print(fix.latitude(), 5 );
      dataFile.println("</LatitudeDegrees>");
      dataFile.print("<LongitudeDegrees>");
      dataFile.print(fix.longitude(), 5);
      dataFile.println("</LongitudeDegrees>");
      dataFile.println("</Position>");
      dataFile.println("<HeartRateBpm>");
      dataFile.print("<Value>");
      dataFile.print(String("0"));
      dataFile.println("</Value>");
      dataFile.println("</HeartRateBpm>");
      dataFile.print("<SensorState>");
      dataFile.print("Present");
      dataFile.println("</SensorState>");
      analogReference(EXTERNAL);
      x = analogRead(xpin);
      y = analogRead(ypin);
      z = analogRead(zpin);
      total = sqrt(x * x + y * y + z * z);
      dataFile.print("<impact>");
      dataFile.print("<gforce>");
      dataFile.print(total);
      dataFile.println("</gforce>");
      dataFile.print("<xaxis>");
      dataFile.print(x);
      dataFile.println("</xaxis>");
      dataFile.print("<yaxis>");
      dataFile.print(y);
      dataFile.println("</yaxis>");
      dataFile.print("<zaxis>");
      dataFile.print(z);
      dataFile.println("</zaxis>");
      dataFile.println("</impact>");
      dataFile.println("</Trackpoint>");
      //Serial.println();
    }
  }
  else {
    // No valid location data yet!
    Serial.print( '?' );
  }

  Serial.println();
}
void GPSloop()
{
  while (gps.available( gps_port) )
    doSomeWork( gps.read() );

} // GPSloop
void loop()
{
  GPSloop();
}

void endtask()
{
  dataFile.println("</Track>");
  dataFile.println("</Lap>");
  dataFile.println("</Activity>");
  dataFile.println("</Activities>");
  dataFile.println("</TrainingCenterDatabase>");
  dataFile.close();
  Serial.print("file close");
}

there is an error with in the logged data, The timings are same in every field below is the logged SD data (I have attached the logged 000.txt file with this message

Please look for
2017-2-19T9:31:19:60.000Z

I was expecting time change something like this:

2017-2-19T9:31:19:00.000Z 2017-2-19T9:31:19:01.000Z 2017-2-19T9:31:19:02.000Z 2017-2-19T9:31:19:03.000Z 2017-2-19T9:31:19:04.000Z 2017-2-19T9:31:19:05.000Z 2017-2-19T9:31:19:06.000Z 2017-2-19T9:31:19:07.000Z 2017-2-19T9:31:19:08.000Z 2017-2-19T9:31:19:09.000Z 2017-2-19T9:31:20:00.000Z

can you spot my mistake please
Thank you

000.txt (325 KB)