Programa para establecer la comunicación con un módem Siemens A56 y un modulo FRDMKL25Z opera como rastreador satelital para Geolocalizacion. Por la UART (1) se conecta el MODEM y por la uart (2) el GPS (se lee en modo NEMEA) Este sistema genera una cadena de geolocalizacion para GoogleMaps con las coordenadas locales Si previamente se envia el mensaje (Coordenadas o coordenadas) El sistema ademas recibe ordenes de tipo mensaje GSM PDU para accionar cargas

Dependencies:   mbed GPS_G

Conexion propuesta de celular siemens A56i y La FRDMKL25Z /media/uploads/tony63/imgb.jpg Se puede emular un GPS usando una aplicación de Proteus /media/uploads/tony63/imgc.jpg

Revision:
1:e2bd083802c0
Parent:
0:b2a6aa7c0c8c
Child:
2:ea6275d1222f
--- a/main.cpp	Fri Jun 19 17:45:34 2015 +0000
+++ b/main.cpp	Fri Jun 03 01:03:02 2016 +0000
@@ -1,44 +1,35 @@
-//programa para celular siemens que recibe un mensaje de texto t activa una salida en formato
+///Tarea de comunicación celular y módulo GPS 
+//programa para celular siemens que recibe un mensaje de texto y activa una salida en formato
 //pdu hex
 #include "mbed.h"
 #include "DebouncedIn.h"
 #include "stdio.h"
 #include "string.h"
 #include "GPS.h"
-
-
-
-
+//Salidas digitales
 Timer t;
 DigitalOut LedVerde(LED2);
 DigitalOut LedRojo(LED1);
 DigitalOut LedAzul(LED3);
 
-///////////////////////////////////////////
+//Declaración de los puertos de la FRDm, modem y GPS
  
 Serial GSM(PTE0,PTE1);  //puertos del FRDM para el modem
 Serial pc(USBTX,USBRX);
 GPS gps(PTE22, PTE23);   // Puerto del FDRM para el gps 
 
-////////////////////////////
-//PARAMETROS
-////////////////////////////////
+//Declaración de variables
 
-
+//Cadenas de caracteres con las que se va a trabajar
 short DE[255];
 short DS[255];
-
 char buffer[512];
 char buffermsg[100];
 char buffer1[13];
 char mensaje[100];
+//Variables enteras y caracteres
 int count;
 int i,K,LENOUT,LENIN,C;
-
-char Tel[15];
-char cel[15];
-char ojala[15]; // OJO
-
 int c=0;
 int cont=0;
 unsigned char CtrlZ = 0x1A; 
@@ -46,28 +37,24 @@
 char r[]=""; 
 char msg[256];
 char char1;
-
 int index;
+//Adquisición de números de teléfono, emisor - receptor
+char Tel[15];
+char cel[15];
+char ojala[15]; // OJO
 
-//////
-//longitud  y latitud 
-////
-
+//El GPS entregará al celular coordenadas expresadas en latitud y longitud según la ubicación que encuentre
+// por tanto se declaran estas variables:
 
 float lo,la;
-char clo[255], cla[255];   //
+char clo[255], cla[255];   //Cadenas a capturar para latitud y longitud
 int LENINlo,LENINla,LENINla_lo;
 char la_lo[255];
-
+//Cadena de google maps
 char http2[255];
 char http[] = "http://maps.google.com/maps?q=";
 
-
-
-//////////////
-// convercion oct sept 
-////////////
-
+//Conversión octetos septetos
 
 int iht,Kht,ChtLENOUTht,LENINht;
 int ioct,Koct,LENOUToct,LENINoct,Coct;
@@ -75,17 +62,13 @@
 char DSoct[255];
 char buf[100];
 
-/////////////////////////
-//cocanteo rellenos y numero 
-//////////////////////////
+//Relleno de datos - con el fin de que tengan el mismo número de caracteres
 
 char relle1[]=  "0011000A91";
 char relle2[]=  "10000AA";
 char relle3[]=     "68";
 
-/////////////////////////////////////////////
-// funciones  
-////////////////////////////////////////////
+//Funciones del programa
  
 int readBuffer(char *buffer,int count)
 {
@@ -113,21 +96,18 @@
     return 0;
 }
 
-///////////////////////////////////////////////
-//Programass
-///////////////////////////////////////////////
+//Programas a ejecutar
     
 int main(void)
        { 
-       
+//LED´S en alto
        LedVerde=1;
        LedRojo=1;
        LedAzul=1;
- 
-   
+//Tasa de baudios 
        GSM.baud(9600);
        GSM.format(8,Serial::None,1); 
-
+//Lectura del modem
        GSM.printf("AT\r\n");
        wait(0.5);
        GSM.printf("AT+CNMI=1,1\r\n");
@@ -138,10 +118,9 @@
        wait(0.5);
        GSM.printf("CBST=0,0,1\r\n");
        wait(0.5);  
-             
-     
+                
      while(1){ 
-          
+//Lectura del buffer          
        if (GSM.readable()) {
             readBuffer(buffer,100);
             pc.printf("buffer= %s\n\r ",buffer);
@@ -151,7 +130,7 @@
                  pc.printf("mensaje= %s\n\r ",buffermsg); 
                  pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]);        
                  buffer[67]='c';
-                 
+ //Si llegan estos tres tipos de mensajes...                
                  if (buffermsg[69] == '2'){    // PARA CUANDO LA CLAVE ES On
                         LENIN=2; //numero de caracteres de abajo son los octetos
                         DE[0]=0x47;
@@ -163,6 +142,7 @@
                         DE[1]=0xB3;
                         DE[2]=0x19;
                     }
+//Recepción de las coordenadas otorgadas por el GPS
                   if (buffermsg[69] == '3'&& buffermsg[70] == 'C'){  // PARA CUANDO LA CLAVE ES Cor
                         LENIN=3; //numero de caracteres de abajo son los octetos
                         DE[0]=0xC3;
@@ -188,11 +168,10 @@
                     {
                      Tel[i] = buffermsg[40+i];
                     }   
+//Lectura del número de teléfono
                     pc.printf("\n");
-                    pc.printf("%c%c%c%c%c%c%c%c%c%c",Tel[1],Tel[0],Tel[3],Tel[2],Tel[5],Tel[4],Tel[7],Tel[6],Tel[9],Tel[8]);
-            
-                 }
-                      
+                    pc.printf("%c%c%c%c%c%c%c%c%c%c",Tel[1],Tel[0],Tel[3],Tel[2],Tel[5],Tel[4],Tel[7],Tel[6],Tel[9],Tel[8]);          
+                 }                     
         if(buffer[10]=='S'&& buffer[11]=='M'){
              for(i=0;i<5;i++)
              {buffer1[i]=buffer[2+i];}
@@ -204,9 +183,7 @@
             wait(0.5);
             GSM.printf("AT+CMGL=0\r\n");
             buffer1[3]='p';
-            }
-            
-       
+            }     
         if(DS[0]-67 == 0&& DS[1]-111==0)   // Cor en octetos es 436f72
         {
         pc.printf("\n");
@@ -214,37 +191,26 @@
         
         DS[0] = '\0';
         DS[1] = '\0';
-           
+//Entrega los datos de longitud y latitud
            if(gps.sample())
             {
                lo =gps.longitude;
                la =gps.latitude;
                pc.printf("longitud_entera=%f, Latitud entera=%f\n", lo, la);
-         
-                  wait(0.5);         
+                  wait(0.5);   
+                        
             //LONGITUD/        
             sprintf (clo, "%f", lo); 
             pc.printf ( "\nlongitud = %s\n",clo);
             LENINlo=strlen(clo);  
+            wait(0.5);
             
-            /*  for (ilo=0;ilo<LENINlo;ilo++){
-                pc.printf("%c,",clo[ilo]);       
-            } */        
-            
-           wait(0.5);
            //LATITUD/
            sprintf (cla, "%f", la); 
            pc.printf ( "\nlatitud = %s\n",cla);
            LENINla=strlen(cla); 
-            
-           /*for (ila1=0;ila1<LENINla1;ila1++){
-                pc.printf("%c,",cla[ila1]);       
-           }*/
-
-          
-        ///////////////////////////////////////////////////            
-        // CONCATENO LONGITUD Y LATITUD
-        ///////////////////////////////////////////////////
+         
+        //Concatenando las cadenas de Latitud y Longitud...
 
            strcpy(la_lo,cla);
            strcat(la_lo,",");
@@ -254,22 +220,14 @@
            
            LENINla_lo=strlen(la_lo);
 
-           /*for (j=0;j<LENINla_lo;j++){
-                pc.printf("%c\n",la_lo[j]);       
-           }*/    
-           
-         ////////////////////////////////////////////////////////      
-        // CONCATENO LONGITUD, LATITUD Y EL http//:
-        ////////////////////////////////////////////////////////
+         //Ahora se juntan las cadenas obtenidas y se agrega el protocolo de transferencia de hipertextos http
             strcpy(http2,http);
             strcat(http2,la_lo);         
             pc.printf ( "%s\n",http2);
             pc.printf ( "\n" );
            
            
-        //////////////////////////////////////////////////////////////////////
-        // convierto http2 de oct a sep
-        ////////////////////////////////////////////////////////////////////////       
+        //Conversión de la cadena de http2 de octetos a septetos 
        
         LENINht=strlen(http2);
         pc.printf("%d\n",LENINht); 
@@ -277,8 +235,6 @@
              pc.printf("%2X",http2[iht]);       
             } 
         pc.printf ( "\n" );
-      
-        /////////////////////////////////////
 
         LENINoct=strlen(http2);
         pc.printf("%d\n",LENINoct);
@@ -287,8 +243,7 @@
                 DEoct[ioct]=http2[ioct];
                 pc.printf("%2X,%d\n",DEoct[ioct],ioct);       
            }
-        ////////////////////////////////////////        
-       
+
          Koct=0;
          Coct=0;
         
@@ -304,9 +259,7 @@
                             pc.printf("%2X,%d\r\n",DSoct[ioct]&0x000000FF,ioct);
                         }
                   }
-       //             pc.printf("LENOUT:%d,LENIN:%d\r\n",LENOUToct,strlen(DEoct));
                   
-                  //}
                  Koct++;
                 if (Koct==7)
                 {
@@ -314,13 +267,7 @@
                 } // se chequea que ya se acabaron los bits en un ciclo de conversion.
          }  
         
-        /////////////////////////////////////////////////////////
-        // CONCATENO LOS RELLENOS Y EL NUMERO DEL CELULAR 
-        ////////////////////////////////////////////////////////
-        
-        
-        
-        
+        //Concatenación de los datos relleno y el número de celular
         wait(5);
         index=56;
         GSM.printf("AT+CMGS=%d\r\n",index);
@@ -351,25 +298,24 @@
             pc.printf(">%s\n",buf);
           pc.printf("\n");
           
-           }  // if 
-            
-            
-    
+           }
         }
-
+//Si el mensaje recibido fue OFF...
         if(DS[0]-79==0 && DS[1]-102==0)     // Off en octetos es 4F6666
         {
-               LedAzul=1; //apaga con Lgeverde
+            //Secuencia de apagado
+               LedAzul=1;
                LedVerde = 0;
                LedRojo=1;
         }   
-        
+//Si el mensaje recibido fue ON...       
         if(DS[0]-71==0 && DS[1]-110==0)  // On en octetos es 476E
         {
-               LedAzul=1;  //apaga con Lgeverde
+                //Secuencia de apagado
+               LedAzul=1;
                LedRojo =0;
                LedVerde = 1;
         } 
      }           
 }
-}
+}
\ No newline at end of file