Enviar coordenadas GPS a smartphone vía GSM y simular encendido y apagado del vehículo
Fork of GPS_7 by
main.cpp@3:62590e5c0ca1, 2015-05-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |