GPS NUEVO

Dependencies:   GPS7 mbed

main.cpp

Committer:
obifandres
Date:
2015-06-19
Revision:
0:b11acb885c4c

File content as of revision 0:b11acb885c4c:

#include "mbed.h"
#include "DebouncedIn.h"
#include "stdio.h"
#include "string.h"
#include  "math.h"
#include  "gprs.h"
#include "GPS.h"
Timer t;
char ES[255];
int Y,P,Q,LoutON,LinON;
DigitalOut LedRojo(LED1);
int Y2,P2,Q2,LoutON2,LinON2;

Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z
GPS gps(PTE22, PTE23);

Serial GSM(PTE0,PTE1);//Configura puerto USB a la consola serial del PC conectado.
//void leer(void);
void Rx_interrupt();
int position=0;
int lenpack=6;
int longi=0;
char lat1[9];
char lon1[12];
char tel[11];
char buffer[100];
char buffer1[13];
char datos[100];
char NUMBER[13];
int index;
char buffermsg[100];
int count1=0;
int i = 0;
int j = 0;
char c;
unsigned char CtrlZ = 0x1A;  // comodin de emision controlZ
bool Flag = false; // bandera
char v1[]=""; //Cadena de recepcion de la trama PDU si se usa!!
char v2[]="";
char msg[256];
int z=0,g=0;
char char1;
char de[255];
char Link[]={"maps.google.com/?q="};
char ds[255];
int k,Lout,Lin,LL;
float frac_long, frac_lat,frac_long2,frac_lat2,frac_long3,frac_lat3,la,lo,L2,lat4,long4,L3,Lat,Long,Lmens;
short DS[255];
int K,LENOUT,C;
char hexbyte[3]={0};
int d;
int msglen[0];
int lng; 
 
 
int readBuffer(char *buffer,int count)
{
    int i=0; 
    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;
}
 

 
int main(void)
{
 LedRojo=0;

 
    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
    
    //configuracion del modem 
  
       pc.printf("Enviamos AT\n");  //chekeo del modem
    GSM.printf("AT\r\n");
    GSM.scanf("%s",buffer);
    pc.printf("ATrdy>:D %s\r\n",buffer);
  
   GSM.printf("AT+CNMI=1,1\r\n"); //Habilitado para recibir SMS
     pc.printf("AT+CNMI=1,1\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:D %s\r\n",buffer);

   GSM.printf("AT+CMGF=0\r\n"); // modo PDU
     pc.printf("AT+CMGF=0\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:3 %s\r\n",buffer);  
     
      GSM.printf("ATE\r\n"); // sin eco
     pc.printf("ATE\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:x %s\r\n",buffer); 
     
      GSM.printf("AT+CBST=0,0,1\r\n"); // AUTOBAUDIOS,ASINCRONICO
     pc.printf("AT+CBST=0,0,1\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:) %s\r\n",buffer); 
     
      GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO
     pc.printf("AT+CMGD=1\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:) %s\r\n",buffer); 
// termina configuraicon del modem

    
   while(1) {
        //wait(2);
        
        
        
            if (GSM.readable()) {
            readBuffer(buffer,100);
            
            
           
            if(buffer[10]=='S'&& buffer[11]=='M'){
             pc.printf("Llego mensaje\n\r ");         
             buffer[10]=' ';
             buffer[11]=' ';
             GSM.printf("AT+CMGR=%c\r\n",buffer[14]);
             pc.printf("AT+CMGR=%c\r\n",buffer[14]);
             }
             for(d=66;d<68;d+=2){
                hexbyte[0]=buffer[d];
                hexbyte[1]=buffer[d+1];
                sscanf(hexbyte,"%X",&msglen[(d-66)/2]);
               printf("%2X\n",msglen[(d-66)/2]);
            }
            lng=msglen[0];
            int msg[lng-1];
            for(d=68;d<(68+((lng)*2));d+=2){
                hexbyte[0]=buffer[d];
                hexbyte[1]=buffer[d+1];
                sscanf(hexbyte,"%X",&msg[(d-68)/2]);
               printf("%2X\n",msg[(d-68)/2]);
            }
            LENOUT= lng*8/7;
            K=7;
            C=0;
            DS[0]=msg[0] & 0x7F;  // la primera sola
            printf("%2X,%d,%d\r\n",DS[0],i,K);
            for (i=1;i < LENOUT;i++){  // inicia el algoritmo
                DS[i]=(msg[i-1-C]>>K | msg[i-C]<<(8-K))& 0x7F;  //valido para todos
                printf("%2X,%d,%d\r\n",DS[i],i,K);
            if (K==0) {K=8;C++;}
                K--;
            }
            for (i=0;i < LENOUT;i++){
                printf("%c",DS[i]);
            }
                printf("\n");
 
             
//if(buffer[68]=='C'&& buffer[69]=='3'&&buffer[70]=='B'&& buffer[71]=='7'&&buffer[72]=='1'&& buffer[73]=='C')//recibe mensaje Cor
if(DS[0]=='C'&&DS[1]=='o'&&DS[2]=='r')
             {
              pc.printf(":$ %c%c%c%c%c%c%c%c%c%c\r\n",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
              pc.printf(":) %c%c%c%c%c%c\r\n",buffer[68],buffer[69],buffer[70],buffer[71],buffer[72],buffer[73]);   
             pc.printf("El mensaje es Cor\n");
             /*buffer[66]=' ';
             buffer[67]=' ';*/
             buffer[68]=' ';
             buffer[69]=' ';
             buffer[70]=' ';
             buffer[71]=' ';
             buffer[72]=' ';
             buffer[73]=' ';
         //GPS
         // INTENTARE LEER EL PUTO GPS//
   while(1) {
       
        if(gps.sample()) {

            lo=(int)gps.longitude;
            la=(int)gps.latitude;
            frac_long=gps.longitude-(int)gps.longitude;
            
        frac_lat=gps.latitude-(int)gps.latitude;
          
          
      
            frac_lat2=frac_lat/1000000;
            frac_long2=frac_long/100000;
 
            lat4=(int)abs(1000000*frac_lat);
            long4=(int)abs(1000000*frac_long);

            frac_lat3=frac_lat+frac_lat2;
            frac_long3=frac_long+frac_long2;
            
              
               Long=gps.longitude;
              Lat=gps.latitude;    
              sprintf(v1, "%f", Lat);
              strcat(Link,v1);
              strcat(Link,",");
          
             
              sprintf(v2, "%f", Long);
              strcat(Link,v2);
              strcat(de,Link);
              pc.printf("%s\n",Link);
               pc.printf("esperando again \n");
              
           // pasar coordenadas a formato PDU
       Lin=strlen(de);
         
         j=0;k=0;i=0;
         for (i=0;i < Lin;i++){
         ds[i]=de[i+k]>>j | de[i+k+1]<<(7-j);
         if (ds[i]==0x00) {Lout=i; goto salir;}
         j++;
         if (j==7) {j=0;k++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
         }
         }
         }
         salir:   pc.printf("de\n");
         for (i=0;i < Lin;i++){
         pc.printf("%X",de[i]);
         }
         pc.printf("\n ds \n");
         for (i=0;i<Lout;i++){
         pc.printf("%2X",ds[i]&0x000000FF,i);
         }
         
       // comienza el envio de coordenadas  
         pc.printf("\n Lout:%d,Lin:%d\r\n",Lout,strlen(de));
         
            pc.printf("Comienza SMS \n");
           
           
           GSM.printf("AT+CMGS=%d\r\n",Lout+13);
            pc.printf("\n AT+CMGS=%d\r\n",Lout+13);
            wait(0.3);
           
        GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
        pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
           //wait(0.5);
           GSM.printf("%2X",Lin);
           pc.printf("%2X",Lin);    
          
              
            for (i=0;i < Lout;i++){
             GSM.printf("%02X",ds[i]&0x000000FF);  
             pc.printf("%02X",ds[i]&0x000000FF);
            // wait(0.3);      
        } 
  
  
  
       GSM.putc((char)0x1A);  //no tengo idea de ke hace esto
         GSM.scanf("%s",buffer);
      pc.printf("%s",buffer);
      pc.printf("\n rdy ");
                
                    
                //link desde 18
                
                 for (i=0;i < 256;i++){
             ds[i]=NULL;
             de[i]=NULL;}  
        LL=strlen(Link);
            for (i=19;i < LL+1 ;i++){
             Link[i]=NULL;}  
            
              
          
         
             }// fin if del cor
       
 //aki deberia ir lo del on o off
 for(d=66;d<68;d+=2){
                hexbyte[0]=buffer[d];
                hexbyte[1]=buffer[d+1];
                sscanf(hexbyte,"%X",&msglen[(d-66)/2]);
                printf("%2X\n",msglen[(d-66)/2]);
            }
            lng=msglen[0];
            int msg1[lng-1];
            for(d=68;d<(68+((lng)*2));d+=2){
                hexbyte[0]=buffer[d];
                hexbyte[1]=buffer[d+1];
                sscanf(hexbyte,"%X",&msg1[(d-68)/2]);
                printf("%2X\n",msg1[(d-68)/2]);
            }
            LENOUT= lng*8/7;
            K=7;
            C=0;
            DS[0]=msg1[0] & 0x7F;  // la primera sola
            printf("%2X,%d,%d\r\n",DS[0],i,K);
            for (i=1;i < LENOUT;i++){  // inicia el algoritmo
                DS[i]=(msg1[i-1-C]>>K | msg1[i-C]<<(8-K))& 0x7F;  //valido para todos
                printf("%2X,%d,%d\r\n",DS[i],i,K);
            if (K==0) {K=8;C++;}
                K--;
            }
            for (i=0;i < LENOUT;i++){
                printf("%c",DS[i]);
            }
                printf("\n");
 
 //if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='3'&& buffer[71]=='7')//recibe mensaje On
 if(DS[0]=='O'&&DS[1]=='n')
             {
             
             pc.printf("El mensaje es On\n");
             /*buffer[66]=' ';
             buffer[67]=' ';*/
             buffer[68]=' ';
             buffer[69]=' ';
             buffer[70]=' ';
             buffer[71]=' ';
             if (LedRojo==1){
             LedRojo=0;
             pc.printf("Modo Encendido\n");//AT+CMGS=21 0011000A9113735689900000AA09 45F7B8EC26A7C96F
             
             // pasar a PDU Encendido
             
            // char EE[255];



          //numero de caracteres de abajo
    char EE[]="Carro Encendido";
         LinON=strlen(EE);
        
        //----------------------------------- ---------------------------
         P=0;Q=0;Y=0;
         for (Y=0;Y < LinON;Y++){
         ES[Y]=EE[Y+Q]>>P | EE[Y+Q+1]<<(7-P);
         if (ES[Y]==0x00) {LoutON=Y; goto salir1;}
         P++;
         if (P==7) {P=0;Q++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
         }

         //--------------------------------------------------------------
salir1:   for (Y=0;Y < LinON;Y++){
         pc.printf("%X",EE[Y]);
         }
         pc.printf(":\r\n");
         for (Y=0;Y<LoutON;Y++){
         pc.printf("%2X,%d\r\n",ES[Y]&0x000000FF,Y);
         }
         pc.printf("LoutON:%d,LinON:%d\r\n",LoutON,strlen(EE));
         
             // fin pdu encendido 
            
             // envio mensaje de encendido 
             // comienza el envio de coordenadas  

         
            pc.printf("Comienza SMS \n");
           
           
           GSM.printf("AT+CMGS=%d\r\n",LoutON+13);
            pc.printf("\n AT+CMGS=%d\r\n",LoutON+13);
            wait(0.5);
           
        GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
        pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
           //wait(0.5);
           GSM.printf("%02X",LinON);
           pc.printf("%02X",LinON);    
        
              
            for (Y=0;Y < LoutON;Y++){
             GSM.printf("%02X",ES[Y]&0x000000FF);  
             pc.printf("%02X",ES[Y]&0x000000FF);}
             
             
               GSM.putc((char)0x1A);  
     GSM.scanf("%s",buffer);
       pc.printf("%s",buffer);
       pc.printf("\n rdy ");
                
            wait(1);
        GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO
     pc.printf("AT+CMGD=1\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:) %s\r\n",buffer);  
             
             
             // termina envio de mensaje de encendido
             
             }  //fin if de "modo encendido"
         
             
             } // fin if del on
             for(d=66;d<68;d+=2){
                hexbyte[0]=buffer[d];
                hexbyte[1]=buffer[d+1];
                sscanf(hexbyte,"%X",&msglen[(d-66)/2]);
                printf("%2X\n",msglen[(d-66)/2]);
            }
            lng=msglen[0];
            int msg2[lng-1];
            for(d=68;d<(68+((lng)*2));d+=2){
                hexbyte[0]=buffer[d];
                hexbyte[1]=buffer[d+1];
                sscanf(hexbyte,"%X",&msg2[(d-68)/2]);
                printf("%2X\n",msg2[(d-68)/2]);
            }
            LENOUT= lng*8/7;
            K=7;
            C=0;
            DS[0]=msg2[0] & 0x7F;  // la primera sola
            printf("%2X,%d,%d\r\n",DS[0],i,K);
            for (i=1;i < LENOUT;i++){  // inicia el algoritmo
                DS[i]=(msg2[i-1-C]>>K | msg2[i-C]<<(8-K))& 0x7F;  //valido para todos
                printf("%2X,%d,%d\r\n",DS[i],i,K);
            if (K==0) {K=8;C++;}
                K--;
            }
            for (i=0;i < LENOUT;i++){
                printf("%c",DS[i]);
            }
                printf("\n");
  //if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='B'&& buffer[71]=='3'&&buffer[72]=='1'&& buffer[73]=='9')//recibe mensaje Off
  if(DS[0]=='O'&&DS[1]=='f'&&DS[2]=='f')
             {
            
             pc.printf("El mensaje es Off\n");// se borra el mensaje
             /*buffer[66]=' ';
             buffer[67]=' ';*/
             buffer[68]=' ';
             buffer[69]=' ';
             buffer[70]=' ';
             buffer[71]=' ';
             buffer[72]=' ';
             buffer[73]=' ';
               if (LedRojo==0){
             LedRojo=1;
        pc.printf("Modo Apagado\n"); // AT+CMGS=20  0011000A9113735689900000AA07 4178F81C26BF01
        
        char ES2[255];

          //numero de caracteres de abajo
    char EE2[]="Carro Apagado";
         LinON2=strlen(EE2);
        
        //----------------------------------- ---------------------------
         P2=0;Q2=0;Y2=0;
         for (Y2=0;Y2 < LinON2;Y2++){
         ES2[Y2]=EE2[Y2+Q2]>>P2 | EE2[Y2+Q2+1]<<(7-P2);
         if (ES2[Y2]==0x00) {LoutON2=Y2; goto salir12;}
         P2++;
         if (P2==7) {P2=0;Q2++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
         }

         //--------------------------------------------------------------
salir12:   for (Y2=0;Y2 < LinON2;Y2++){
         pc.printf("%X",EE2[Y2]);
         }
         pc.printf(":\r\n");
         for (Y2=0;Y2<LoutON2;Y2++){
         pc.printf("%2X,%d\r\n",ES2[Y2]&0x000000FF,Y2);
         }
         pc.printf("LoutON2:%d,LinON2:%d\r\n",LoutON2,strlen(EE2));
         
             // fin pdu Apagado 
            
             // envio mensaje de Apagado 
             

         
            pc.printf("Comienza SMS \n");
           
           
           GSM.printf("AT+CMGS=%d\r\n",LoutON2+13);
            pc.printf("\n AT+CMGS=%d\r\n",LoutON2+13);
            wait(0.5);
           
        GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
        pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]);
           //wait(0.5);
           GSM.printf("%02X",LinON2);
           pc.printf("%02X",LinON2);    
        
              
            for (Y2=0;Y2 < LoutON2;Y2++){
             GSM.printf("%02X",ES2[Y2]&0x000000FF);  
             pc.printf("%02X",ES2[Y2]&0x000000FF);}
             
             
               GSM.putc((char)0x1A);  
     GSM.scanf("%s",buffer);
       pc.printf("%s",buffer);
       pc.printf("\n rdy ");
          wait(1);
           GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO
     pc.printf("AT+CMGD=1\r\n");
     GSM.scanf("%s",buffer);
     pc.printf(">:) %s\r\n",buffer); 
           
             }// fin de modo "apagado"
                         

    
            
             }// fin if del off
      
             
} //fin del if principal
 
 }//fin del while
}// fin del main
// buffer[i] contiene lo que regresa