![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Enviar coordenadas GPS a smartphone vía GSM y simular encendido y apagado del vehículo
Fork of GPS_7 by
Revision 3:62590e5c0ca1, committed 2015-05-27
- Comitter:
- Equipo2_2015_1
- Date:
- Wed May 27 08:18:21 2015 +0000
- Parent:
- 2:5abd8a794703
- Commit message:
- Tarea GPS a trav?s de GSM
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Apr 27 02:09:46 2015 +0000 +++ b/main.cpp Wed May 27 08:18:21 2015 +0000 @@ -1,20 +1,223 @@ #include "mbed.h" +#include "string.h" #include "GPS.h" -Serial pc(USBTX, USBRX); -GPS gps(PTE22, PTE23); -float frac_long, frac_lat; + +//Juan Esteban Botero Holguin +//Juan Felipe Vanegas +//Danie Barrios + +Serial gsm(PTA1,PTA2); // Puertos de comunicación serial GSM +Serial pc(USBTX,USBRX); // Puerto de comunicación serial para el envío de datos (por termite 3.1) +GPS gps(PTC12, PTC13); //Puertos de comunicación serial para el GPS (Dongle) + +DigitalOut myled(LED3); //LED para simular encendido y apagado del auto vía red GSM + +char buf[100], bufm[18], tam[2], pdu[]=""; // Variables para almacenar las cadenas de caracteres +char vect1[]=""; +char vect2[]=""; +char DE[255]; +char DS[255]; +int i,K,C,LENOUT,LENIN, w; +float lo,la; +char LINK[]={"http://maps.google.com/?q="}; // Link que será enviado al smartphone para acceder a la ubicación presisa + + int main() { + + + gsm.baud(9600); // Configuracion de los baudios + gsm.format(8,Serial::None,1); //parámetros de comunicación + + pc.printf("Enviamos AT \n"); + gsm.printf("AT\r\n"); + gsm.scanf("%s",buf); + pc.printf(">%s\n",buf); + wait(1); + + + gsm.printf("AT+CNMI=1,1\r\n"); + pc.printf("AT+CNMI=1,1\r\n"); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + pc.printf(">%s\n",buf); + wait(1); + + + gsm.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\r\n"); + pc.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\n"); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + pc.printf(">%s\n",buf); + wait(1); + + + gsm.printf("AT+CMGF=0\r\n"); + pc.printf("AT+CMGF=0\r\n"); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + pc.printf(">%s\n",buf); + + gsm.printf("CBST=0,0,1\r\n"); + + while(1) { - if(gps.sample()) { - pc.printf("longitud_entera=%d, Latitud entera=%d\n", (int)gps.longitude, (int)gps.latitude); - frac_long=gps.longitude-(int)gps.longitude; - pc.printf("Longitud Fraccionaria=%d\n", (int)abs(1000000*frac_long)); - frac_lat=gps.latitude-(int)gps.latitude; - pc.printf("Latitud fraccionaria=%d\n", (int)abs(1000000*frac_lat)); - } else { + + pc.printf("\n Esperando Mensaje \n"); + gsm.scanf("%s",buf); + pc.printf("%s",buf); + i = strlen(buf); + + if(i>3){ + pc.printf("Llego un Mensaje \n"); + gsm.printf("AT+CMGR=1 \r\n"); // Se lee el menjsae que ente en el indice 1. + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + pc.printf(">%s",buf); //Mostrar la cadena en PDU del mensaje leido. + + + i = strlen(buf); + pc.printf("\n El tamaño del mensaje es %d \n",i); + + if(i==56){ + pc.printf("\n LLego on"); + myled = 0; + gsm.printf("AT+CMGD=1\r\n"); + gsm.scanf("%s",buf); + pc.printf("\n%s\n",buf); + + } + + if(i==58){ + pc.printf("\n LLego off"); + myled = 1; + gsm.printf("AT+CMGD=1\r\n"); + gsm.scanf("%s",buf); + pc.printf("\n%s\n",buf); - pc.printf("Oh Dear! No lock :(\n"); - } + } + + if(i==62){ + + + gsm.baud(9600); + pc.printf("gsm.baud(9600)\n"); + + + gsm.format(8,Serial::None,1); + pc.printf("gsm.format(8,Serial::None,1)\n"); + + pc.printf("Enviamos AT\n"); + gsm.printf("AT\r\n"); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + pc.printf(">%s\n",buf); + + gsm.printf("AT+CMGR=1\r\n"); // Se lee el mensaje que entre en el indice 1. + pc.printf("AT+CMGR=1\r\n"); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + pc.printf(">%s\n",buf); + + + pc.printf("Esperando GPS \n"); + + while(1) { + i=0; + if(gps.sample()& i==0) { + + pc.printf("Comienza el gps \n"); + //Toma de datos del gps (SatGen vía Dongle) y concatenacion para armar los datos. + + la=gps.longitude; + lo=gps.latitude; + sprintf(vect1, "%f", lo); + strcat(LINK,vect1); + strcat(LINK,","); + + wait(3); + sprintf(vect2, "%f", la); + strcat(LINK,vect2); + strcat(DE,LINK); + pc.printf("%s\n",LINK); + + + //Conversion de los datos "LINK" a formatdo PDU + + LENIN=strlen(DE); + + K=0;C=0; + for (i=0;i < LENIN;i++){ + DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K); + if (DS[i]==0x00) {LENOUT=i; goto salir;} + K++; + if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. + } + + //-------------------------------------------------------------- +salir: pc.printf("DE\n"); + for (i=0;i < LENIN;i++){ + pc.printf("%X",DE[i]); + } + pc.printf("\n DS \n"); + for (i=0;i<LENOUT;i++){ + pc.printf("%02X",DS[i]&0x000000FF); + } + + pc.printf("\n LENOUT:%d,LENIN:%d\r\n",LENOUT,strlen(DE)); + + + + // Enviamos el mensaje + + pc.printf("Comienza SMS \n"); + + + gsm.printf("AT+CMGS=53\r\n"); + pc.printf("\n AT+CMGS=53\r\n"); + wait(0.5); + + gsm.printf("0011000A9103444386860000AA"); + pc.printf("0011000A9103444386860000AA"); + wait(0.5); + gsm.printf("%2X",LENOUT); + pc.printf("%2X",LENOUT); + + + for (i=0;i < LENOUT;i++){ + gsm.printf("%02X",DS[i]&0x000000FF); + pc.printf("%02X",DS[i]&0x000000FF); + wait(0.3); + } + gsm.putc((char)0x1A); + + gsm.scanf("%s",buf); + gsm.scanf("%s",buf); + + pc.printf("\n lo que devuelve el cel %s \n",buf); + i=1; + gsm.printf("AT+CMGD=1\r\n"); + pc.printf("\n Se sale de while para la lectura de gps \n "); + gsm.scanf("%s",buf); + pc.printf(">%s",buf); + goto s; + } + + + + } + } -} + + s: + gsm.scanf("%s",buf); + pc.printf("%s",buf); + + } + } +} \ No newline at end of file