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)