Enviar coordenadas GPS a smartphone vía GSM y simular encendido y apagado del vehículo

Dependencies:   GPS7 mbed

Fork of GPS_7 by Gustavo Ramirez

Committer:
Equipo2_2015_1
Date:
Wed May 27 08:18:21 2015 +0000
Revision:
3:62590e5c0ca1
Parent:
2:5abd8a794703
Tarea GPS a trav?s de GSM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:6b7345059afe 1 #include "mbed.h"
Equipo2_2015_1 3:62590e5c0ca1 2 #include "string.h"
simon 0:6b7345059afe 3 #include "GPS.h"
simon 0:6b7345059afe 4
Equipo2_2015_1 3:62590e5c0ca1 5
Equipo2_2015_1 3:62590e5c0ca1 6 //Juan Esteban Botero Holguin
Equipo2_2015_1 3:62590e5c0ca1 7 //Juan Felipe Vanegas
Equipo2_2015_1 3:62590e5c0ca1 8 //Danie Barrios
Equipo2_2015_1 3:62590e5c0ca1 9
Equipo2_2015_1 3:62590e5c0ca1 10 Serial gsm(PTA1,PTA2); // Puertos de comunicación serial GSM
Equipo2_2015_1 3:62590e5c0ca1 11 Serial pc(USBTX,USBRX); // Puerto de comunicación serial para el envío de datos (por termite 3.1)
Equipo2_2015_1 3:62590e5c0ca1 12 GPS gps(PTC12, PTC13); //Puertos de comunicación serial para el GPS (Dongle)
Equipo2_2015_1 3:62590e5c0ca1 13
Equipo2_2015_1 3:62590e5c0ca1 14 DigitalOut myled(LED3); //LED para simular encendido y apagado del auto vía red GSM
Equipo2_2015_1 3:62590e5c0ca1 15
Equipo2_2015_1 3:62590e5c0ca1 16 char buf[100], bufm[18], tam[2], pdu[]=""; // Variables para almacenar las cadenas de caracteres
Equipo2_2015_1 3:62590e5c0ca1 17 char vect1[]="";
Equipo2_2015_1 3:62590e5c0ca1 18 char vect2[]="";
Equipo2_2015_1 3:62590e5c0ca1 19 char DE[255];
Equipo2_2015_1 3:62590e5c0ca1 20 char DS[255];
Equipo2_2015_1 3:62590e5c0ca1 21 int i,K,C,LENOUT,LENIN, w;
Equipo2_2015_1 3:62590e5c0ca1 22 float lo,la;
Equipo2_2015_1 3:62590e5c0ca1 23 char LINK[]={"http://maps.google.com/?q="}; // Link que será enviado al smartphone para acceder a la ubicación presisa
Equipo2_2015_1 3:62590e5c0ca1 24
Equipo2_2015_1 3:62590e5c0ca1 25
simon 0:6b7345059afe 26 int main() {
Equipo2_2015_1 3:62590e5c0ca1 27
Equipo2_2015_1 3:62590e5c0ca1 28
Equipo2_2015_1 3:62590e5c0ca1 29 gsm.baud(9600); // Configuracion de los baudios
Equipo2_2015_1 3:62590e5c0ca1 30 gsm.format(8,Serial::None,1); //parámetros de comunicación
Equipo2_2015_1 3:62590e5c0ca1 31
Equipo2_2015_1 3:62590e5c0ca1 32 pc.printf("Enviamos AT \n");
Equipo2_2015_1 3:62590e5c0ca1 33 gsm.printf("AT\r\n");
Equipo2_2015_1 3:62590e5c0ca1 34 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 35 pc.printf(">%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 36 wait(1);
Equipo2_2015_1 3:62590e5c0ca1 37
Equipo2_2015_1 3:62590e5c0ca1 38
Equipo2_2015_1 3:62590e5c0ca1 39 gsm.printf("AT+CNMI=1,1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 40 pc.printf("AT+CNMI=1,1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 41 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 42 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 43 pc.printf(">%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 44 wait(1);
Equipo2_2015_1 3:62590e5c0ca1 45
Equipo2_2015_1 3:62590e5c0ca1 46
Equipo2_2015_1 3:62590e5c0ca1 47 gsm.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\r\n");
Equipo2_2015_1 3:62590e5c0ca1 48 pc.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\n");
Equipo2_2015_1 3:62590e5c0ca1 49 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 50 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 51 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 52 pc.printf(">%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 53 wait(1);
Equipo2_2015_1 3:62590e5c0ca1 54
Equipo2_2015_1 3:62590e5c0ca1 55
Equipo2_2015_1 3:62590e5c0ca1 56 gsm.printf("AT+CMGF=0\r\n");
Equipo2_2015_1 3:62590e5c0ca1 57 pc.printf("AT+CMGF=0\r\n");
Equipo2_2015_1 3:62590e5c0ca1 58 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 59 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 60 pc.printf(">%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 61
Equipo2_2015_1 3:62590e5c0ca1 62 gsm.printf("CBST=0,0,1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 63
Equipo2_2015_1 3:62590e5c0ca1 64
simon 0:6b7345059afe 65 while(1) {
Equipo2_2015_1 3:62590e5c0ca1 66
Equipo2_2015_1 3:62590e5c0ca1 67 pc.printf("\n Esperando Mensaje \n");
Equipo2_2015_1 3:62590e5c0ca1 68 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 69 pc.printf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 70 i = strlen(buf);
Equipo2_2015_1 3:62590e5c0ca1 71
Equipo2_2015_1 3:62590e5c0ca1 72 if(i>3){
Equipo2_2015_1 3:62590e5c0ca1 73 pc.printf("Llego un Mensaje \n");
Equipo2_2015_1 3:62590e5c0ca1 74 gsm.printf("AT+CMGR=1 \r\n"); // Se lee el menjsae que ente en el indice 1.
Equipo2_2015_1 3:62590e5c0ca1 75 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 76 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 77 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 78 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 79 pc.printf(">%s",buf); //Mostrar la cadena en PDU del mensaje leido.
Equipo2_2015_1 3:62590e5c0ca1 80
Equipo2_2015_1 3:62590e5c0ca1 81
Equipo2_2015_1 3:62590e5c0ca1 82 i = strlen(buf);
Equipo2_2015_1 3:62590e5c0ca1 83 pc.printf("\n El tamaño del mensaje es %d \n",i);
Equipo2_2015_1 3:62590e5c0ca1 84
Equipo2_2015_1 3:62590e5c0ca1 85 if(i==56){
Equipo2_2015_1 3:62590e5c0ca1 86 pc.printf("\n LLego on");
Equipo2_2015_1 3:62590e5c0ca1 87 myled = 0;
Equipo2_2015_1 3:62590e5c0ca1 88 gsm.printf("AT+CMGD=1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 89 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 90 pc.printf("\n%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 91
Equipo2_2015_1 3:62590e5c0ca1 92 }
Equipo2_2015_1 3:62590e5c0ca1 93
Equipo2_2015_1 3:62590e5c0ca1 94 if(i==58){
Equipo2_2015_1 3:62590e5c0ca1 95 pc.printf("\n LLego off");
Equipo2_2015_1 3:62590e5c0ca1 96 myled = 1;
Equipo2_2015_1 3:62590e5c0ca1 97 gsm.printf("AT+CMGD=1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 98 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 99 pc.printf("\n%s\n",buf);
tony63 1:99bb5d61015f 100
Equipo2_2015_1 3:62590e5c0ca1 101 }
Equipo2_2015_1 3:62590e5c0ca1 102
Equipo2_2015_1 3:62590e5c0ca1 103 if(i==62){
Equipo2_2015_1 3:62590e5c0ca1 104
Equipo2_2015_1 3:62590e5c0ca1 105
Equipo2_2015_1 3:62590e5c0ca1 106 gsm.baud(9600);
Equipo2_2015_1 3:62590e5c0ca1 107 pc.printf("gsm.baud(9600)\n");
Equipo2_2015_1 3:62590e5c0ca1 108
Equipo2_2015_1 3:62590e5c0ca1 109
Equipo2_2015_1 3:62590e5c0ca1 110 gsm.format(8,Serial::None,1);
Equipo2_2015_1 3:62590e5c0ca1 111 pc.printf("gsm.format(8,Serial::None,1)\n");
Equipo2_2015_1 3:62590e5c0ca1 112
Equipo2_2015_1 3:62590e5c0ca1 113 pc.printf("Enviamos AT\n");
Equipo2_2015_1 3:62590e5c0ca1 114 gsm.printf("AT\r\n");
Equipo2_2015_1 3:62590e5c0ca1 115 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 116 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 117 pc.printf(">%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 118
Equipo2_2015_1 3:62590e5c0ca1 119 gsm.printf("AT+CMGR=1\r\n"); // Se lee el mensaje que entre en el indice 1.
Equipo2_2015_1 3:62590e5c0ca1 120 pc.printf("AT+CMGR=1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 121 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 122 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 123 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 124 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 125 pc.printf(">%s\n",buf);
Equipo2_2015_1 3:62590e5c0ca1 126
Equipo2_2015_1 3:62590e5c0ca1 127
Equipo2_2015_1 3:62590e5c0ca1 128 pc.printf("Esperando GPS \n");
Equipo2_2015_1 3:62590e5c0ca1 129
Equipo2_2015_1 3:62590e5c0ca1 130 while(1) {
Equipo2_2015_1 3:62590e5c0ca1 131 i=0;
Equipo2_2015_1 3:62590e5c0ca1 132 if(gps.sample()& i==0) {
Equipo2_2015_1 3:62590e5c0ca1 133
Equipo2_2015_1 3:62590e5c0ca1 134 pc.printf("Comienza el gps \n");
Equipo2_2015_1 3:62590e5c0ca1 135 //Toma de datos del gps (SatGen vía Dongle) y concatenacion para armar los datos.
Equipo2_2015_1 3:62590e5c0ca1 136
Equipo2_2015_1 3:62590e5c0ca1 137 la=gps.longitude;
Equipo2_2015_1 3:62590e5c0ca1 138 lo=gps.latitude;
Equipo2_2015_1 3:62590e5c0ca1 139 sprintf(vect1, "%f", lo);
Equipo2_2015_1 3:62590e5c0ca1 140 strcat(LINK,vect1);
Equipo2_2015_1 3:62590e5c0ca1 141 strcat(LINK,",");
Equipo2_2015_1 3:62590e5c0ca1 142
Equipo2_2015_1 3:62590e5c0ca1 143 wait(3);
Equipo2_2015_1 3:62590e5c0ca1 144 sprintf(vect2, "%f", la);
Equipo2_2015_1 3:62590e5c0ca1 145 strcat(LINK,vect2);
Equipo2_2015_1 3:62590e5c0ca1 146 strcat(DE,LINK);
Equipo2_2015_1 3:62590e5c0ca1 147 pc.printf("%s\n",LINK);
Equipo2_2015_1 3:62590e5c0ca1 148
Equipo2_2015_1 3:62590e5c0ca1 149
Equipo2_2015_1 3:62590e5c0ca1 150 //Conversion de los datos "LINK" a formatdo PDU
Equipo2_2015_1 3:62590e5c0ca1 151
Equipo2_2015_1 3:62590e5c0ca1 152 LENIN=strlen(DE);
Equipo2_2015_1 3:62590e5c0ca1 153
Equipo2_2015_1 3:62590e5c0ca1 154 K=0;C=0;
Equipo2_2015_1 3:62590e5c0ca1 155 for (i=0;i < LENIN;i++){
Equipo2_2015_1 3:62590e5c0ca1 156 DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K);
Equipo2_2015_1 3:62590e5c0ca1 157 if (DS[i]==0x00) {LENOUT=i; goto salir;}
Equipo2_2015_1 3:62590e5c0ca1 158 K++;
Equipo2_2015_1 3:62590e5c0ca1 159 if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
Equipo2_2015_1 3:62590e5c0ca1 160 }
Equipo2_2015_1 3:62590e5c0ca1 161
Equipo2_2015_1 3:62590e5c0ca1 162 //--------------------------------------------------------------
Equipo2_2015_1 3:62590e5c0ca1 163 salir: pc.printf("DE\n");
Equipo2_2015_1 3:62590e5c0ca1 164 for (i=0;i < LENIN;i++){
Equipo2_2015_1 3:62590e5c0ca1 165 pc.printf("%X",DE[i]);
Equipo2_2015_1 3:62590e5c0ca1 166 }
Equipo2_2015_1 3:62590e5c0ca1 167 pc.printf("\n DS \n");
Equipo2_2015_1 3:62590e5c0ca1 168 for (i=0;i<LENOUT;i++){
Equipo2_2015_1 3:62590e5c0ca1 169 pc.printf("%02X",DS[i]&0x000000FF);
Equipo2_2015_1 3:62590e5c0ca1 170 }
Equipo2_2015_1 3:62590e5c0ca1 171
Equipo2_2015_1 3:62590e5c0ca1 172 pc.printf("\n LENOUT:%d,LENIN:%d\r\n",LENOUT,strlen(DE));
Equipo2_2015_1 3:62590e5c0ca1 173
Equipo2_2015_1 3:62590e5c0ca1 174
Equipo2_2015_1 3:62590e5c0ca1 175
Equipo2_2015_1 3:62590e5c0ca1 176 // Enviamos el mensaje
Equipo2_2015_1 3:62590e5c0ca1 177
Equipo2_2015_1 3:62590e5c0ca1 178 pc.printf("Comienza SMS \n");
Equipo2_2015_1 3:62590e5c0ca1 179
Equipo2_2015_1 3:62590e5c0ca1 180
Equipo2_2015_1 3:62590e5c0ca1 181 gsm.printf("AT+CMGS=53\r\n");
Equipo2_2015_1 3:62590e5c0ca1 182 pc.printf("\n AT+CMGS=53\r\n");
Equipo2_2015_1 3:62590e5c0ca1 183 wait(0.5);
Equipo2_2015_1 3:62590e5c0ca1 184
Equipo2_2015_1 3:62590e5c0ca1 185 gsm.printf("0011000A9103444386860000AA");
Equipo2_2015_1 3:62590e5c0ca1 186 pc.printf("0011000A9103444386860000AA");
Equipo2_2015_1 3:62590e5c0ca1 187 wait(0.5);
Equipo2_2015_1 3:62590e5c0ca1 188 gsm.printf("%2X",LENOUT);
Equipo2_2015_1 3:62590e5c0ca1 189 pc.printf("%2X",LENOUT);
Equipo2_2015_1 3:62590e5c0ca1 190
Equipo2_2015_1 3:62590e5c0ca1 191
Equipo2_2015_1 3:62590e5c0ca1 192 for (i=0;i < LENOUT;i++){
Equipo2_2015_1 3:62590e5c0ca1 193 gsm.printf("%02X",DS[i]&0x000000FF);
Equipo2_2015_1 3:62590e5c0ca1 194 pc.printf("%02X",DS[i]&0x000000FF);
Equipo2_2015_1 3:62590e5c0ca1 195 wait(0.3);
Equipo2_2015_1 3:62590e5c0ca1 196 }
Equipo2_2015_1 3:62590e5c0ca1 197 gsm.putc((char)0x1A);
Equipo2_2015_1 3:62590e5c0ca1 198
Equipo2_2015_1 3:62590e5c0ca1 199 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 200 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 201
Equipo2_2015_1 3:62590e5c0ca1 202 pc.printf("\n lo que devuelve el cel %s \n",buf);
Equipo2_2015_1 3:62590e5c0ca1 203 i=1;
Equipo2_2015_1 3:62590e5c0ca1 204 gsm.printf("AT+CMGD=1\r\n");
Equipo2_2015_1 3:62590e5c0ca1 205 pc.printf("\n Se sale de while para la lectura de gps \n ");
Equipo2_2015_1 3:62590e5c0ca1 206 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 207 pc.printf(">%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 208 goto s;
Equipo2_2015_1 3:62590e5c0ca1 209 }
Equipo2_2015_1 3:62590e5c0ca1 210
Equipo2_2015_1 3:62590e5c0ca1 211
Equipo2_2015_1 3:62590e5c0ca1 212
Equipo2_2015_1 3:62590e5c0ca1 213 }
Equipo2_2015_1 3:62590e5c0ca1 214
simon 0:6b7345059afe 215 }
Equipo2_2015_1 3:62590e5c0ca1 216
Equipo2_2015_1 3:62590e5c0ca1 217 s:
Equipo2_2015_1 3:62590e5c0ca1 218 gsm.scanf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 219 pc.printf("%s",buf);
Equipo2_2015_1 3:62590e5c0ca1 220
Equipo2_2015_1 3:62590e5c0ca1 221 }
Equipo2_2015_1 3:62590e5c0ca1 222 }
Equipo2_2015_1 3:62590e5c0ca1 223 }