Hi, my name is Leonardo and Im trying to make a gps logger but I have a little problem. The gps data comes ok from the serial port, I got position and time, but at the time to log data to the sd card it only logs the first line, here is the sketch, I think the problem is in the part of the logfile commands but I can
t figer out the problem.
Sd shield and gps works just fine, the problem is in the sketch.
#include <SD.h>
#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(6, 5); // RX, TX (TX not used)
const int sentenceSize = 80;
char sentence[sentenceSize];
#define LOG_INTERVAL 100
const int chipSelect = 10;
File logfile;
long idd = 0;
long ids = 0;
long idm = 0;
long idh = 0;
void error(char *str)
{
Serial.print("error: ");
Serial.println(str);
while(1);
}
void setup()
{
Serial.begin(9600);
gpsSerial.begin(9600);
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card Failed or not present");
return;
}
Serial.println("card initialized.");
// create a new file
char filename[] = "LOGGER00.CSV";
for (uint8_t i = 0; i < 100; i++) {
filename[6] = i/10 + '0';
filename[7] = i%10 + '0';
if (! SD.exists(filename)) {
// only open a new file if it doesn't exist
logfile = SD.open(filename, FILE_WRITE);
break; // leave the loop!
}
}
if (! logfile) {
error("couldnt create file");
}
Serial.print("Logging to: ");
Serial.println(filename);
}
void loop()
{
static int i = 0;
if (gpsSerial.available())
{
char ch = gpsSerial.read();
if (ch != '\n' && i < sentenceSize)
{
sentence = ch;
- i++;*
- }*
- else*
- {*
_ sentence = '\0';_
* i = 0;*
* displayGPS();*
* }*
* }*
}
void displayGPS()
{
* char field[20];*
* getField(field, 0);*
* if (strcmp(field, "$GPRMC") == 0)*
* {*
* Serial.print("Tiempo: ");*
* getField(field, 1);*
* logfile.print(field);*
* logfile.print("\t");*
* Serial.println(field);*
* Serial.print("Lat: ");*
* getField(field, 3); // number*
* logfile.print(field);*
* logfile.print("\t");*
* Serial.print(field);*
* getField(field, 4); // N/S*
* logfile.print(field);*
* logfile.print("\t");*
* Serial.println(field);*
* Serial.print("Long: ");*
* getField(field, 5); // number*
* logfile.print(field);*
* logfile.print("\t");*
* Serial.print(field);*
* getField(field, 6); // E/W*
* logfile.print(field);*
* logfile.print("\t");*
* Serial.println(field);*
* Serial.print("Velocidad: ");*
* getField(field, 7);*
* logfile.println(field);*
* logfile.close();*
_ Serial.println(field) * 1.854;_
* }*
}
void getField(char* buffer, int index)
{
* int sentencePos = 0;*
* int fieldPos = 0;*
* int commaCount = 0;*
* while (sentencePos < sentenceSize)*
* {*
* if (sentence[sentencePos] == ',')*
* {*
* commaCount ++;*
* sentencePos ++;*
* }*
* if (commaCount == index)*
* {*
* buffer[fieldPos] = sentence[sentencePos];*
* fieldPos ++;*
* }*
* sentencePos ++;*
* }*
* buffer[fieldPos] = '\0';*
}