//Datos Finales
struct DatosGPS {
float NumLatitud;
float NumLongitud;
char DireccionLatitud;
char DireccionLongitud;
};
struct DatosGPS DatosGPS;
char * strGPS = "0610.9689,N,07535.1974,W";
void main(void)
{
while(1)
{
ParserGPSData(strGPS,&DatosGPS);
}
}
void ParserGPSData(char * ptr, struct DatosGPS * Datos)
{
uint8_t i = 0;
struct Parserptrs Tmp;
char * ptrArray[4];
char NumLat[3];
char NumLong[4];
// Primer inicio de string
ptrArray[i] = ptr;
// Separo los string, cambio la coma por un caracter nulo y guardo los punteros de cada inicio de string
while(*ptr) {
if(*ptr == ',') {
*ptr++='\0';
ptrArray[++i] = ptr;
}
}
//Separo los primeros 2 digitos de Lat y Long y cierro el string. Adelanto los punteros para quitar esos caracteres.
memcpy(NumLong
,ptrArray
[2],3); ptrArray[0] += 2;
ptrArray[2] += 3;
NumLat[3] = '\0';
NumLong[4] = '\0';
//Es hora de la conversion y guardado de datos.
Datos
->NumLatitud
= atoi(NumLat
) + (atof(ptrArray
[0]) / 60); Datos
->NumLongitud
= atoi(NumLong
) + (atof(ptrArray
[2]) / 60); if(*ptrArray[1] == 'S') Datos->NumLatitud *= -1;
if(*ptrArray[3] == 'W') Datos->NumLongitud *= -1;
}