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

Files at this revision

API Documentation at this revision

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
diff -r 5abd8a794703 -r 62590e5c0ca1 main.cpp
--- 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