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

main.cpp

Committer:
Equipo2_2015_1
Date:
2015-05-27
Revision:
3:62590e5c0ca1
Parent:
2:5abd8a794703

File content as of revision 3:62590e5c0ca1:

#include "mbed.h"
#include "string.h"
#include "GPS.h"


//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) {
     
     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);
            
           }
           
       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);
       
    }  
 }
}