envia Cord responde con link

Dependencies:   DebouncedIn GPS7 mbed

Fork of send by andres felipe londoño lopera

main.cpp

Committer:
asjgrupo4
Date:
2015-06-23
Revision:
3:75c530fb1140
Parent:
2:ffcd0494ec92

File content as of revision 3:75c530fb1140:

#include "mbed.h"
#include "DebouncedIn.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "gprs.h"
#include "GPS.h"

Timer t;
int readBuffer(char *buffer,int count);
void enviar(int LENIN1,char *DS,char *numero);//longitud de mensaje, cadena del mensaje, cadena del celular
DigitalOut on_off(PTC17);  //señal que inicia el envio del mensaje
Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z
GPS gps(PTE0,PTE1);
Serial GSM(PTE22, PTE23);//Configura puerto USB a la consola serial del PC conectado.
char celular[10];
char buffer[100];
char DE1[255]={"http://maps.google.com/maps?q="};
char DE[255];
char DS[255];
char coorden[50]={NULL};
char coorden_org[50]={NULL};

char msg[4];
int z=0,j=0,i=0,p=0,LENIN=0,LENIN1=0,count=0,flag=0,K=0,C=0,LENOUT=0; 
int ent_long,ent_lat;
int negativo=0;
int frac_long, frac_lat,bandera=0;         



int main(void)
{

    GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600
    GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART
    wait(1);
    pc.printf("Conectado\r\n");
    
    while(1) {
            
                       
            
            if (GSM.readable()) 
            {
                
                readBuffer(buffer,100);
                pc.printf(buffer);
            }                
                
                if((buffer[10]=='S')&& (buffer[11]=='M'))
                    {
                    pc.printf("Llego mensaje\r\n ");         
                    buffer[10]=' ';
                    buffer[11]=' ';
                    GSM.printf("AT+CMGR=%c\r\n",buffer[14]);
                    pc.printf("AT+CMGR=%c\r\n",buffer[14]);
                    }
            
          
                
                //va funcion de mensaje recibido           
           
           
                        
             
                
                
     if(buffer[85]=='4'&& buffer[86]=='F'&&buffer[87]=='3'&& buffer[88]=='7')//recibe mensaje On
             {
                 
                 for(i=55;i<65;i++)
            {
                celular[i-55]=buffer[i];
            }
           
             on_off=1;
             pc.printf("El mensaje es On\r\n");
             buffer[85]=' ';
             buffer[86]=' ';
             buffer[87]=' ';
             buffer[88]=' ';
             GSM.printf("AT\r\n");//proto0colo  envio de mensaje
       wait(0.5);
       GSM.printf("AT+CNMI=1,1\r\n");
       wait(0.5);
       GSM.printf("AT+CMGF=0\r\n");
       wait(0.5);
       GSM.printf("ATE\r\n");
       wait(0.5);
       GSM.printf("CBST=0,0,1\r\n");
       wait(0.5);  
       GSM.printf("at+cmgs=%d\r\n",21);
        pc.printf("at+cmgs=%d\r\n",21);
             wait(0.5);
       
       GSM.printf("0011000A91"); 
       pc.printf("0011000A91"); 
       for(p=0;p<10;p++)
       {
        GSM.printf("%c",celular[p]);
        pc.printf("%c",celular[p]);
        }
       
       GSM.printf("0000AA0945F7B8EC26A7C96F"); //12 octetos + los octetos del mensaje---devuelve mensaje encendido enciende un led que esta en PTC17
       pc.printf("0000AA0945F7B8EC26A7C96F"); 
       
         wait(0.5);
           GSM.putc(0x1A); 
           
             }
             
             
             
             
             
             
              if(buffer[85]=='4'&& buffer[86]=='F'&&buffer[87]=='B'&& buffer[88]=='3'&&buffer[89]=='1'&& buffer[90]=='9')//recibe mensaje Off
             {
                 
                 for(i=55;i<65;i++)
            {
                celular[i-55]=buffer[i];
            }
           
             on_off=0;
             pc.printf("El mensaje es Off\r\n");// se borra el mensaje
             buffer[85]=' ';
             buffer[86]=' ';
             buffer[87]=' ';
             buffer[88]=' ';
             buffer[89]=' ';
             buffer[90]=' ';
             GSM.printf("AT\r\n");//protocolo de envio de mensaje  
       wait(0.5);
       GSM.printf("AT+CNMI=1,1\r\n");
       wait(0.5);
       GSM.printf("AT+CMGF=0\r\n");
       wait(0.5);
       GSM.printf("ATE\r\n");
       wait(0.5);
       GSM.printf("CBST=0,0,1\r\n");
       wait(0.5);  
       GSM.printf("at+cmgs=%d\r\n",20);
        pc.printf("at+cmgs=%d\r\n",20);
             wait(0.5);
           
        GSM.printf("0011000A91"); 
        pc.printf("0011000A91"); 
        for(p=0;p<10;p++)
        {
        GSM.printf("%c",celular[p]);
        pc.printf("%c",celular[p]);
        }
           
           GSM.printf("0000AA074178F81C26BF01"); //12 octetos + los octetos del mensaje----devuelve mensaje apagado--apaga el led  de PTC17
           pc.printf("0000AA074178F81C26BF01"); 
             wait(0.5);
           GSM.putc(0x1A); 
            
             }
             
                
                
                
                
             
             
                
                
                
                //celular comienza en posicion 48
                //longitud del mensaje en posicion 83,84
                //mensaje en posicion 85
         if((buffer[83]=='0')&&(buffer[84]=='4'))
         {
             buffer[83]=' ';
             buffer[84]=' ';
             
         count=0;
         LENIN1=4; //numero de caracteres de abajo son los octetos
         for(i=0;i<8;i++)
         {
         
         if(i%2==0)
         {
            if(buffer[85+i]>57)
            {
                DE[count]=(buffer[85+i]-55)<<4;
            }
            else
            {
                DE[count]=(buffer[85+i]-48)<<4;
            }        
          }
          else
          {     
                if(buffer[85+i]>57)
            {
                DE[count]=(buffer[85+i]-55)+DE[count];
            }
            else
            {
                DE[count]=(buffer[85+i]-48)+DE[count];
            } 
            count++;
          }  
         
         }
         
         
         
         
         LENOUT= LENIN1*8/7;
         K=7;
         C=0;
         DS[0]=DE[0] & 0x7F;  // la primera sola
         pc.printf("%2X",DS[0]);
         for (i=1;i < LENOUT;i++){  // inicia el algoritmo
         DS[i]=(DE[i-1-C]>>K | DE[i-C]<<(8-K))& 0x7F;  //valido para todos
         pc.printf("%2X",DS[i]);
         if (K==0) {K=8;C++;}
         K--;
         }
         for (i=0;i < LENOUT;i++){
         pc.printf("%c",DS[i]);
         msg[i]=DS[i];
         }
         pc.printf("\r\n");
         pc.printf("Mensaje en el celular\r\n"); 
         pc.printf(buffer);
         
            if((msg[0]=='C')&&(msg[1]=='o')&&(msg[2]=='r')&&(msg[3]=='d'))
            {
                //obtener coordenadas
                pc.printf("Coordenadas GPS\r\n");

                if(gps.sample()) { 
                    ent_long=(int)gps.longitude;
                    ent_lat=(int)gps.latitude;
                    
                    frac_long=abs((gps.longitude-(int)gps.longitude)*1000000);
                    frac_lat=abs((gps.latitude-(int)gps.latitude)*1000000);
                    
                pc.printf("http://maps.google.com/maps?q=%f,%f\r\n", gps.latitude,gps.longitude);
                            //coordenada longitud a cadena
            
           
            while(frac_long>0)
            {
                coorden[j]=(frac_long%10)+48;
                frac_long=frac_long/10;
                pc.printf("%c",coorden[j]);
                j++;
            }
            coorden[j]='.';
            pc.printf("%c",coorden[j]);
            j++;
            if(ent_long<0)
            {
                negativo=1;
                ent_long=ent_long*-1;
            }
            while(ent_long>0)
            {
                coorden[j]=(ent_long%10)+48;
                ent_long=ent_long/10;
                pc.printf("%c",coorden[j]);
                j++;
            }
            
            if(negativo==1)
            {
                coorden[j]='-';
                pc.printf("%c",coorden[j]);
                j++;
            }
            negativo=0;
            
            coorden[j]=',';
                pc.printf("%c",coorden[j]);
                j++;
            
            
            while(frac_lat>0)
            {
                coorden[j]=(frac_lat%10)+48;
                frac_lat=frac_lat/10;
                pc.printf("%c",coorden[j]);
                j++;
            }
            coorden[j]='.';
            pc.printf("%c",coorden[j]);
            j++;
            if(ent_lat<0)
            {
                negativo=1;
                ent_lat=ent_lat*-1;
            }
            while(ent_lat>0)
            {
                coorden[j]=(ent_lat%10)+48;
                ent_lat=ent_lat/10;
                pc.printf("%c",coorden[j]);
                j++;
            }
            if(negativo==1)
            {
                coorden[j]='-';
                pc.printf("%c",coorden[j]);
                j++;
            }
            pc.printf("\r\n");
            j--;
            z=strlen(DE1);
            
            for(i=j;i>=0;i--)
            {
                DE1[z]=coorden[i];
                z++;
            }
                
                pc.printf(DE1);
                pc.printf("\r\n");
            
                //strlen(DE);
                
                LENIN1=strlen(DE1);
               K=0;C=0;
         for (i=0;i < LENIN1;i++){
         DS[i]=DE1[i+C]>>K | DE1[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:  
            
           //Tomamos el numero de celular
            for(i=55;i<65;i++)
            {
                celular[i-55]=buffer[i];
            }
           enviar(LENIN1,DS,celular);     
                
                
                
                
                }              
            }
         
         
         
         
         }       
                 
         
            
            
}}














void enviar(int LENIN1,char *DS,char *numero){
       
       GSM.printf("AT\r\n");//envia link con coordenadas
       pc.printf("AT\r\n");//envia link con coordenadas
       wait(0.5);
       GSM.printf("AT+CNMI=1,1\r\n");
       pc.printf("AT+CNMI=1,1\r\n");
       wait(0.5);
       GSM.printf("AT+CMGF=0\r\n");
       pc.printf("AT+CMGF=0\r\n");
       wait(0.5);
       GSM.printf("ATE\r\n");
       pc.printf("ATE\r\n");
       wait(0.5);
       GSM.printf("CBST=0,0,1\r\n");
       pc.printf("CBST=0,0,1\r\n");
       wait(0.5);  
       GSM.printf("at+cmgs=%d\r\n",13+LENIN1);
       pc.printf("at+cmgs=%d\r\n",13+LENIN1);
       wait(0.5);
       GSM.printf("0011000A91"); 
       pc.printf("0011000A91"); 
       for(p=0;p<10;p++)
       {
        GSM.printf("%c",celular[p]);
        pc.printf("%c",celular[p]);
        }
       
       GSM.printf("0000AA"); 
       pc.printf("0000AA"); 
       
           if(LENIN1<=15)
           {
                pc.printf("0");
                GSM.printf("0");
                pc.printf("%X",LENIN1);
                GSM.printf("%X",LENIN1);
               }
               else{    
         pc.printf("%2X",LENIN1);
         GSM.printf("%2X",LENIN1);
         }
           
           for (p=0;p < LENIN1;p++){
           if(DS[p]<=15)
           {
                pc.printf("0");
                GSM.printf("0");
                pc.printf("%X",DS[p]);
                GSM.printf("%X",DS[p]);
               }
               else{    
         pc.printf("%2X",DS[p]&0x000000FF);
         GSM.printf("%2X",DS[p]&0x000000FF);
         }
         }
           wait(0.5);
           GSM.putc(0x1A);  
           pc.putc(0x1A);
           
}

int readBuffer(char *buffer,int count){
    
    t.start(); 
    while(1) {
        while (GSM.readable()) {
            char c = GSM.getc();
            if (c == '\r' || c == '\n') c = '$';
            buffer[i++] = c;
            if(i > count)break;
        }
        if(i > count)break;
        if(t.read() > 3) {
            t.stop();
            t.reset();
            break;
        }
    }
    wait(0.5);
    while(GSM.readable()) {  
        char c = GSM.getc();
    }
    return 0;
}