Go Down

Topic: almacenar datos de gps en variable arduino  (Read 396 times) previous topic - next topic

agupala

Hola, estoy tratando de almacenar en variables la longitud y latitud que me da Arduino al ordenarselo mediante el comando at:

"at+cgpsinf=0"

me da como resultado algo asi:

at+cgpsinf=0
+CGPSINF: 0,-99.092100,-99.026810,33.300000,20170719180837.000,0,8,0.259280,117.660004

OK

me gustaria almacenar longitud=-99.092100 y latitud=-99.026810 en el tipo de dato que fuere y mandarlo mediante mensaje HTTP a un servidor web.


uso estos códigos:

  void read_GPS(){
    gprsSerial.println("at+cgpsinf=0"); //AT command
    read_String();
    strtok(inData, ",");
    strcpy(longitude,strtok(NULL, ",")); // Gets longitude
    strcpy(latitude,strtok(NULL, ",")); // Gets latitude

 }

void read_String() {
      index=0;
      while(gprsSerial.available() > 0) // Don't read unless there you know there is data
   {
       if(index < 199) // One less than the size of the array
       {
           inChar = gprsSerial.read(); // Read a character
           inData[index] = inChar; // Store it
           index++; // Increment where to write next
           inData[index] = '\0'; // Null terminate the string
       }
   }
 }

cuando imprimo por el puerto serial veo que funcionan, ahora bien cuando trato de guardarlo en variables no almacena nada (creo que esto es debido a que los datos se almacenan en una variable de punteros).
¿alguna idea? ¿tienen alguna otra forma de mandar estas variables?
Slds!

Agus

msoffredi

Los datos (segun el codigo que compartiste), se guardan en un array de char, que es como un string, llamado inData, y que no veo declarado porque solo compartiste una parte del código pero preumo que es una variable global/publica. La misma funcion read_String() se encarga de terminar la lectura con un caracter \0 que es la marca de fin de string.

Para extraer lo que necesitas de ese string, deberás hacer una función que haga lo que se conoce como parsing del string, es decir recorrerlo caracter por caracter y reconocioendo las comas (,) podés extraer los disttintos datos y almacenarlo donde necesites.

Deberías considerar el uso del objeto String que tiene metodos muy utiles para estos casos como indexOf() y substring()
--------------------
Marcelo
arduinohobby.com

agupala

En la funcion read_GPS() consigo las variables que busco, el tema es que cuando las quiero mandar por internet a traves de la placa sim que tengo, las manda vacias. Esto es, creo yo, porque la función de Arduino strtok() y strcpy() no me dan los valores per se, sino que me dan los punteros a esos valores. Creo que es asi, puedo estar equivocado.

La variable que mencionas es global

char inData[200];

Slds!

Go Up