ENVIA MENSAJE Y RESPONDE CON LINK DE GOOGLE MAPS, ENVIA ON PRENDE UN LED Y RESPONDE AL CELULAR Q SE ENCENDIO EL CARRO, ENVIA OFF APAGA LED Y RESPONDE ALCELULKAR QUE SE APAGO ELO CARRO

Dependencies:   DebouncedIn GPS7 mbed

Fork of CLASEDELGSM by Gustavo Ramirez

main.cpp

Committer:
asjgrupo4
Date:
2015-05-27
Revision:
2:ffcd0494ec92
Parent:
1:6b506dde0a6e
Child:
3:75c530fb1140

File content as of revision 2:ffcd0494ec92:

//  Programa para enviar desde la FRDMKL25Z un mensaje de texto en formatp PDU
//   Como modem usa un celular SIEMENS a56i
//   ENVIAR -----la palabra "ALARMA 1"
//

//   OJO CON ESTO
//   conector del siemens cable verde es RX conectelo a PTE0  cable blanco es TX conectelo a PTE1
#include "mbed.h"
#include "DebouncedIn.h"
#include "stdio.h"
#include "string.h"
#include  "math.h"
#include  "gprs.h"
#include "GPS.h"
Timer t;
DigitalOut on_off(PTC17);  //señal que inicia el envio del mensaje
Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z
GPS gps(PTE22, PTE23);
//Serial GSM(USBTX,USBRX);
//serial (PTA2,PTA1);/////////////////USBTX,USBRX  PTE0,PTE1
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 r[]=""; //Cadena de recepcion de la trama PDU si se usa!!
char msg[256];
int z=0,g=0;
char char1;
char DE[255]={"http://maps.google.com/maps?q="};

char DS[255];
int K,C,LENOUT,LENIN;
int frac_long, frac_lat,ent_long,ent_lat;



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)
{

    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
   
    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]);
             }
             
             if(buffer[68]=='C'&& buffer[69]=='3'&&buffer[70]=='B'&& buffer[71]=='7'&&buffer[72]=='1'&& buffer[73]=='C')//recibe mensaje Cor
             {
                 
             pc.printf("El mensaje es Cor\n");
             buffer[68]=' ';
             buffer[69]=' ';
             buffer[70]=' ';
             buffer[71]=' ';
             buffer[72]=' ';
             buffer[73]=' ';
             
                
                     if(gps.sample()) {
            frac_long=(int)abs(1000000*gps.longitude-(int)gps.longitude);
            ent_long=(int)gps.longitude;
            frac_lat=(int)abs(1000000*gps.latitude-(int)gps.latitude);
            ent_lat=(int)gps.latitude;
           // pc.printf("%d.%d,%d.%d\n",ent_long,frac_long,ent_lat,frac_lat);
            
            lat1[0]=ent_lat+48;
            lat1[1]='.';
            
            for(z=6;z>=0;z--)
            {
            g= pow(10,0.0+z);   
            lat1[8-z]=(frac_lat/g)+48;
            frac_lat=frac_lat%g;
            }
            
            
            lon1[0]='-';
            ent_long=ent_long*-1;
            lon1[1]=(ent_long/10)+48;
            lon1[2]=(ent_long%10)+48;
            lon1[3]='.';
            for(z=7;z>=0;z--)
            {
            g= pow(10,0.0+z); 
            lon1[11-z]=(frac_long/g)+48;
            frac_long=frac_long%g;
            }
            
       
            
            
        }
         
         
         LENIN=30;
         
              for(i=LENIN;i<(LENIN+9);i++)
                {
                    DE[i]=lat1[i-LENIN];
                }
             
         LENIN=LENIN+9;
         
             DE[i]=',';
             
             LENIN=LENIN+1;
             
             for(i=LENIN;i<(LENIN+12);i++)
         {
             DE[i]=lon1[i-LENIN];
         }
         LENIN=LENIN+12;
          
         
         
         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: 
        
                   GSM.printf("AT\r\n");//envia link con coordenadas
       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",13+LENIN);
        pc.printf("at+cmgs=%d\r\n",13+LENIN);
             wait(0.5);
           GSM.printf("0011000A9113315442760000AA"); //12 octetos + los octetos del mensaje
           pc.printf("0011000A9113315442760000AA"); //12 octetos + los octetos del mensaje
           //3113452467
           if(LENIN<=15)
           {
                pc.printf("0");
                GSM.printf("0");
                 pc.printf("%X",LENIN);
                GSM.printf("%X",LENIN);
               }
               else{    
         pc.printf("%2X",LENIN);
         GSM.printf("%2X",LENIN);
         }
           
           for (i=0;i < LENIN;i++){
           if(DS[i]<=15)
           {
                pc.printf("0");
                GSM.printf("0");
                 pc.printf("%X",DS[i]);
                GSM.printf("%X",DS[i]);
               }
               else{    
         pc.printf("%2X",DS[i]&0x000000FF);
         GSM.printf("%2X",DS[i]&0x000000FF);
         }
         }
           //GSM.printf("%X",68); //12 octetos + los octetos del mensaje
           //GSM.printf("9");//GSM.printf("%u",30);
             wait(0.5);
           GSM.putc(0x1A);  
  
                  }
             
             
        }
    
     if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='3'&& buffer[71]=='7')//recibe mensaje On
             {
             on_off=1;
             pc.printf("El mensaje es On\n");
             buffer[68]=' ';
             buffer[69]=' ';
             buffer[70]=' ';
             buffer[71]=' ';
             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("0011000A9113315442760000AA0945F7B8EC26A7C96F"); //12 octetos + los octetos del mensaje---devuelve mensaje encendido enciende un led que esta en PTC17
           pc.printf("0011000A9113315442760000AA0945F7B8EC26A7C96F"); 
             wait(0.5);
           GSM.putc(0x1A); 
             
             }
             
              if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='B'&& buffer[71]=='3'&&buffer[72]=='1'&& buffer[73]=='9')//recibe mensaje Off
             {
             on_off=0;
             pc.printf("El mensaje es Off\n");// se borra el mensaje
             buffer[68]=' ';
             buffer[69]=' ';
             buffer[70]=' ';
             buffer[71]=' ';
             buffer[72]=' ';
             buffer[73]=' ';
             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("0011000A9113315442760000AA074178F81C26BF01"); //12 octetos + los octetos del mensaje----devuelve mensaje apagado--apaga el led  de PTC17
           pc.printf("0011000A9113315442760000AA074178F81C26BF01"); 
             wait(0.5);
           GSM.putc(0x1A); 
           
             }
             

}


}
// buffer[i] contiene lo que regresa