gps_celular

Dependencies:   GPS7 mbed

main.cpp

Committer:
Rudyedisonlealgarces
Date:
2015-06-26
Revision:
1:df85900c7dc4
Parent:
0:5332dcc305cd

File content as of revision 1:df85900c7dc4:

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

Serial gsm(PTE0,PTE1);   // Se declaran puertos para la comunicacíón GSM
Serial pc(USBTX,USBRX);  // Puerto seríal de la Freescale para el envio de datos
GPS gps(PTD7, PTD6);

DigitalOut myled(LED1);

char buf[100], bufm[18], tam[2], pdu[]=""; 
// Variables para almacenar las cadenas de caracteres
int i,K,C,LENOUT,LENIN;
char ME[]="ME";
char DE[255];
char DS[255];
char vector_1[]="";
char vector_2[]="";



float lo,la;

char trama[100]={"0691136249209211000A9103700479590000AA03C3B71C"}; // codigo de mi celular en pdu
char LINK[]={"http://maps.google.com/?q="};                 // GOOGLE MAPS
char ENV[]="0011000A9113382624970000AA";

int main() {
    // Configuración para la comunicacion con el celular
    //haciendo pruebas con el programa Termite con el codigo AT
   
    gsm.baud(9600);                // Configuracion de la velocidad de comunicación 
    gsm.format(8,Serial::None,1);    
    
    pc.printf("Enviamos AT \n");  //imprima en la pantalla del computador 
    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");
     
     //ingreso al while para esperar el mensaje 
    while(1) {
     
     pc.printf("\n Esperar_Mensaje \n");     
     gsm.scanf("%s",buf);
     pc.printf("%s",buf);
     i = strlen(buf);
     //entro en el while hasta que se cumpla alguna de estas 3 condiciones 
     if(i>3){ 
       pc.printf("Llego un Mensaje \n"); 
        gsm.printf("AT+CMGR=1 \r\n");  // lee el mensaje que esta entrando 
        gsm.scanf("%s",buf);            //borro primer mensaje acumulado 
        gsm.scanf("%s",buf);            //borro segundo  mensaje acumulado
        gsm.scanf("%s",buf);            //borro tercer mensaje osea que limpio la memoria del celular 
        gsm.scanf("%s",buf);            //para que pueda leer el primero y no los acumulados
        pc.printf(">%s",buf);        //Mostrar en PDU del mensaje leido.
        

        i = strlen(buf);  // compara la cadena de Pdu que ha llegado 
        
       if(i==56){
           pc.printf("\n LLego on");
           myled = 0;                   //encienda el led 
           gsm.printf("AT+CMGD=1\r\n"); 
           gsm.scanf("%s",buf);
           pc.printf("\n%s\n",buf);
             
           }//if de on
           
       if(i==58){
            pc.printf("\n LLego off");
             myled = 1;                 //apague  el led 
             gsm.printf("AT+CMGD=1\r\n"); 
             gsm.scanf("%s",buf); //escaneo el mensaje 
             pc.printf("\n%s\n",buf);// aquí certifico que he boorado el mensaje 
            
           }//if de off
           
       if(i==62){
        //llegó elmensaje  "cord" 
        

    
    gsm.format(8,Serial::None,1); // 8 bit sin paaridad 
    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 menjsae que ente 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("gps \n");
           
           while(1) {
        i=0;
        if(gps.sample()& i==0) {
             // ingresa sí recibe datos del sagem si no quedarse
             pc.printf("Comienza el gps \n");
            //Toma de datos del gps y concatenacion para armar los datos.
        
              la=gps.longitude;
              lo=gps.latitude;    
              sprintf(vector_1, "%f", lo);//cojo variable "lo" la guardo en vector1  con propiedad flotante
              strcat(LINK,vector_1);// utilizo para concatenar , en link (GOOGLE MAPS)pego lo q esta en vector1 
              strcat(LINK,","); // concateno una coma para separar los datos mostrados 
          
              sprintf(vector_2, "%f", la);
              strcat(LINK,vector_2);
              strcat(DE,LINK); // variable del profesor que pasa de caracteres a pdu 
              pc.printf("%s\n",LINK);
           
         LENIN=strlen(DE); // combierto los datos a Pdu 
         
         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;}// cambia de sextetos a octetos 
         K++;
         if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits 
         }
salir:   pc.printf("DE\n");
         for (i=0;i < LENIN;i++){
         pc.printf("%X",DE[i]);
         }
         pc.printf("\n DS \n");// guardo la i esima posición en pantalla 
         for (i=0;i<LENOUT;i++){
         pc.printf("%02X",DS[i]&0x000000FF);// imprimo con el comando %02X
         }
         
         pc.printf("\n LENOUT:%d,LENIN:%d\r\n",LENOUT,strlen(DE));// longitud de la trama Pdu 
                   
                 
          
            // el mensaje
           
            pc.printf("Comienza SMS \n");
           
             
            gsm.printf("AT+CMGS=53\r\n");
            pc.printf("\n AT+CMGS=53\r\n");
            wait(1);
           
           gsm.printf("0011000A9113382624970000AA");
            pc.printf("0011000A9113382624970000AA");
           wait(1);
           gsm.printf("%2X",LENOUT);// imprima el valor hexagesima en celular 
           pc.printf("%2X",LENOUT);   //imprima el valor hex en computador  
          
              
            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);// compruebo que ha llegado el mensaje 
            i=1;
            gsm.printf("AT+CMGD=1\r\n"); //borro mensaje  para que quede limpio memoria del celular 
            pc.printf("\n Se sale de while  para la lectura de gps \n ");
            gsm.scanf("%s",buf);
            pc.printf(">%s",buf);
            goto esp;
        } 
        
    
    
           }//if de coord
       
    }// if de llegada de SMS
    
    esp: 
       gsm.scanf("%s",buf);
       pc.printf("%s",buf);
       
    }//devuelvo al while   
 }// lleva al menú principal 
}