// Librerias a utilizar
// variables utilizadas
byte byteGPS = 0; // Aqui se guardan los bytes del GPS que van al array
int i=0; //Acumulador
int Estado=0; // Estado de la conexion
char TramaGPG[100]; // Array para guardar los bytes leidos
char *pch; // puntero tipo char
char *GGA[15]; // Array de punteros tipo char
int sat = 0; // numero de satelites
// Setup del programa
void setup(){
Serial.begin(9600);
Serial2.begin(9600);
}
// loop del programa
void loop(){
Serial.println("Capturando Tramas GPGGA...");
delay(2000);
// Lectura del puerto serie
memset(TramaGPG,0,sizeof(TramaGPG)); // Inicializa a cero la cadena eliminando
//restos anteriores
byteGPS = 0;
byteGPS = Serial2.read(); // leemos el byte del puerto serie
// buscamos la cadena adecuada para empezar a guardar la trama
while(byteGPS != '$'){
byteGPS = Serial2.read();
}
// Una vez localizada la cadena empezamos a guardar en el array
i = 1;
TramaGPG[0]='$';
// Llenamos el array hasta el fin de cadena que es '*'
while(byteGPS != '*'){
byteGPS = Serial2.read();
TramaGPG[i] = byteGPS;
i++;
}
TramaGPG[i] = '\0'; // Caracter de fin de linea
// Llamamos a la funcion cadena() para manipularla
cadena();
}
// Funcion que identifica a la trama para sacar los datos de la
// latitud,longitud, etc.
void cadena(){
i = 0;
memset(GGA,0,sizeof(GGA)); // limpiamos el array GGA introduciendo ceros
pch=strtok(TramaGPG,","); // Troceamos la cadena en el array TramaGPG
// por las comas y el primer intervalo lo guardamos en pch que es
// un puntero a char.
// Analizamos el intervalo para ver si es la que necesitamos. Si es
// la correcta continuamos.
if(strcmp(pch,"$GPGGA")==0);
{
while(pch != NULL){
pch = strtok(NULL,","); // pasamos al siguiente intervalo cortado
// de la cadena
GGA[i]=pch; // Guardamos el valor de pch en el array GGA
i++;
}
representa(GGA,"$GPGGA");
}
}
// Funcion para mostrar los datos por serial o por LCD.
// Se le pasan dos parámetros, el array de chars y la cadena
// a comparar.
void representa(char **GGAPrint,char *trama){
Estado = atoi(GGAPrint[5]);
sat = atoi(GGAPrint[6]);
if(trama=="$GPGGA && Estado==1"){
Serial.println("");
Serial.println("---------------------------------------------------");
Serial.print("Hora UTC ->");
Serial.println(GGAPrint[0]);
}
}