Autor Tema: No me captura las tramas GPGGA  (Leído 4537 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
No me captura las tramas GPGGA
« en: 16 de Junio de 2012, 12:15:49 »
Hola:

Este codigo lo encontré en internet. Lo he modificado un poco para capturar tramas GPGGA de un GPS SKM53 de Skylab. Lo que hago es leer desde Serial2 e imprimo las tramas atraves del COM interno del arduino.No consigo capturarlas. Pongo el codigo por si descubris algun fallo. Lo llevo revisando toda la tarde y nada.

Código: C++
  1. // Librerias a utilizar
  2. // variables utilizadas
  3. byte byteGPS = 0; // Aqui se guardan los bytes del GPS que van al array
  4. int i=0; //Acumulador
  5. int Estado=0; // Estado de la conexion
  6. char TramaGPG[100]; // Array para guardar los bytes leidos
  7. char *pch; // puntero tipo char
  8. char *GGA[15]; // Array de punteros tipo char
  9. int sat = 0; // numero de satelites
  10.  
  11. // Setup del programa
  12.  
  13. void setup(){
  14.   Serial.begin(9600);
  15.   Serial2.begin(9600);
  16. }
  17.  
  18. // loop del programa
  19.  
  20. void loop(){
  21. Serial.println("Capturando Tramas GPGGA...");
  22. delay(2000);
  23. // Lectura del puerto serie
  24. memset(TramaGPG,0,sizeof(TramaGPG)); // Inicializa a cero la cadena eliminando
  25. //restos anteriores
  26. byteGPS = 0;
  27. byteGPS = Serial2.read(); // leemos el byte del puerto serie
  28.  
  29. // buscamos la cadena adecuada para empezar a guardar la trama
  30. while(byteGPS != '$'){
  31.   byteGPS = Serial2.read();  
  32.   }
  33. // Una vez localizada la cadena empezamos a guardar en el array
  34. i = 1;
  35. TramaGPG[0]='$';
  36.  
  37. // Llenamos el array hasta el fin de cadena que es '*'
  38.  
  39. while(byteGPS != '*'){
  40.   byteGPS = Serial2.read();
  41.   TramaGPG[i] = byteGPS;
  42.   i++;
  43.   }
  44. TramaGPG[i] = '\0'; // Caracter de fin de linea
  45. // Llamamos a la funcion cadena() para manipularla
  46. cadena();
  47. }
  48.  
  49. // Funcion que identifica a la trama para sacar los datos de la
  50. // latitud,longitud, etc.
  51.  
  52. void cadena(){
  53. i = 0;
  54. memset(GGA,0,sizeof(GGA)); // limpiamos el array GGA introduciendo ceros
  55. pch=strtok(TramaGPG,","); // Troceamos la cadena en el array TramaGPG
  56. //  por las comas y el primer intervalo lo guardamos en pch que es
  57. // un puntero a char.
  58. // Analizamos el intervalo para ver si es la que necesitamos. Si es
  59. // la correcta continuamos.
  60. if(strcmp(pch,"$GPGGA")==0);
  61.   {
  62.     while(pch != NULL){
  63.       pch = strtok(NULL,","); // pasamos al siguiente intervalo cortado
  64.      // de la cadena
  65.      GGA[i]=pch; // Guardamos el valor de pch en el array GGA
  66.      i++;
  67.     }
  68. representa(GGA,"$GPGGA");
  69. }
  70. }
  71.  
  72. // Funcion para mostrar los datos por serial o por LCD.
  73. // Se le pasan dos parámetros, el array de chars y la cadena
  74. // a comparar.
  75.  
  76. void representa(char **GGAPrint,char *trama){
  77. Estado = atoi(GGAPrint[5]);
  78. sat = atoi(GGAPrint[6]);
  79. if(trama=="$GPGGA && Estado==1"){
  80.   Serial.println("");
  81.   Serial.println("---------------------------------------------------");
  82.   Serial.print("Hora UTC ->");
  83.   Serial.println(GGAPrint[0]);
  84. }
  85. }

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No me captura las tramas GPGGA
« Respuesta #1 en: 16 de Junio de 2012, 12:26:33 »
Tu GPS por defecto tiene el baud rate en 9600 ?
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: No me captura las tramas GPGGA
« Respuesta #2 en: 16 de Junio de 2012, 12:30:36 »
Tu GPS por defecto tiene el baud rate en 9600 ?

Ummm, si, el SKM53 funciona por defecto a 9600.

Estaba pensando que quizas no esté localizando satelites ya que vivo en una zona entre edificios. tendria que salir hasta campo abierto para probarlo del todo. Sin embargo donde lo he probado, el gps TOMTOM si que engancha bien la señal por lo que el Skylab tambien tendria que funcionar.
« Última modificación: 16 de Junio de 2012, 12:33:51 por aitorsp »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No me captura las tramas GPGGA
« Respuesta #3 en: 16 de Junio de 2012, 12:34:55 »
Igual las tramas te las manda, sin datos pero las envia.
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: No me captura las tramas GPGGA
« Respuesta #4 en: 16 de Junio de 2012, 12:36:24 »
Igual las tramas te las manda, sin datos pero las envia.

Si, efectivamente, tienes razon pero entonces al menos deberia visualizar algo en el serial monitor no?. No visualiza mas que el mensaje inicial.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No me captura las tramas GPGGA
« Respuesta #5 en: 16 de Junio de 2012, 13:23:23 »
No tienes manera de conectar el GPS a la PC? Para ver que funcione. Luego también podes debuggear y ver donde se queda clavado. Seguramente esperando un '$'  :tongue:
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: No me captura las tramas GPGGA
« Respuesta #6 en: 16 de Junio de 2012, 14:01:58 »
No tienes manera de conectar el GPS a la PC? Para ver que funcione. Luego también podes debuggear y ver donde se queda clavado. Seguramente esperando un '$'  :tongue:

He probado con un codigo mas simple, leyendo en bruto lo que llega por el Serial2 y si que llegan tramas pero incompletas, quizas porque no tengo cobertura.

Del codigo que he puesto arriba esta correcto?. Si es asi ya lo probare en campo abierto a ver que captura.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: No me captura las tramas GPGGA
« Respuesta #7 en: 17 de Junio de 2012, 06:14:35 »
He detectado en la linea 60 del codigo esto.

if(strcmp(pch,"$GPGGA")==0);
 {
   while(pch != NULL){
     pch = strtok(NULL,","); // pasamos al siguiente intervalo cortado
    // de la cadena
    GGA=pch; // Guardamos el valor de pch en el array GGA
    i++;
   }
representa(GGA,"$GPGGA");
}

Ese punto y coma en el if esta mal

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: No me captura las tramas GPGGA
« Respuesta #8 en: 18 de Junio de 2012, 15:31:37 »
Creo que hay algun problema con la lectura Serial en la version 023 de Arduino para el Mega, ahi puede estar el fallo con este codigo.