I have the below code. I am trying to alter it to read the full 80 character sentence every Loop. I have tried lots of ways, but just cant seem to get it.
Does anyone have any ideas please?
Its from here:
#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(10, 11); // RX, TX (TX not used)
const int sentenceSize = 80;
char sentence[sentenceSize];
void setup()
{
Serial.begin(115200);
gpsSerial.begin(9600);
}
void loop()
{
static int i = 0;
if (gpsSerial.available())
{
char ch = gpsSerial.read();
// Serial.print(ch);
if (ch != '\n' && i < sentenceSize)
{
sentence[i] = ch;
i++;
}
else
{
sentence[i] = '\0';
i = 0;
displayGPS();
}
}
}
void displayGPS()
{
char field[80];
getField(field, 0);
if (strcmp(field, "$GPRMC") == 0)
{
Serial.print("Time: ");
getField(field, 1); // number
Serial.print(field);
Serial.print(" Status: ");
getField(field, 2); // number
Serial.print(field);
Serial.print(" Lat: ");
getField(field, 3); // number
Serial.print(field);
Serial.print(" Lat Dir: ");
getField(field, 4); // number
Serial.print(field);
Serial.print(" Long: ");
getField(field, 5); // number
Serial.print(field);
Serial.print(" Long Dir: ");
getField(field, 6); // number
Serial.print(field);
Serial.print(" Speed in knots: ");
getField(field, 7); // number
Serial.print(field);
Serial.print(" Direction in Degrees: ");
getField(field, 8); // number
Serial.print(field);
Serial.print(" Date in UTC [DdMdAa]: ");
getField(field, 9); // number
Serial.print(field);
Serial.print(" Magnetic cariation: ");
getField(field, 11); // number
Serial.print(" Variation [E/W]: ");
getField(field, 12); // number
Serial.print(" Mode: ");
getField(field, 13); // number
Serial.print(field);
Serial.println();
}
}
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';
}