COMUNICACIÓN MODEM SIEMENS Y GPS PARA RASTREO SATELITAL CON ACCIONAMIENTO REMOTO

Dependencies:   GPS7 mbed

Fork of TareaGPS_Siemens by Aarón González Benaissa

Revision:
0:b2a6aa7c0c8c
Child:
1:e2bd083802c0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jun 19 17:45:34 2015 +0000
@@ -0,0 +1,375 @@
+//programa para celular siemens que recibe un mensaje de texto t activa una salida en formato
+//pdu hex
+#include "mbed.h"
+#include "DebouncedIn.h"
+#include "stdio.h"
+#include "string.h"
+#include "GPS.h"
+
+
+
+
+Timer t;
+DigitalOut LedVerde(LED2);
+DigitalOut LedRojo(LED1);
+DigitalOut LedAzul(LED3);
+
+///////////////////////////////////////////
+ 
+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
+////////////////////////////////
+
+
+short DE[255];
+short DS[255];
+
+char buffer[512];
+char buffermsg[100];
+char buffer1[13];
+char mensaje[100];
+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; 
+bool Flag = false; 
+char r[]=""; 
+char msg[256];
+char char1;
+
+int index;
+
+//////
+//longitud  y latitud 
+////
+
+
+float lo,la;
+char clo[255], cla[255];   //
+int LENINlo,LENINla,LENINla_lo;
+char la_lo[255];
+
+char http2[255];
+char http[] = "http://maps.google.com/maps?q=";
+
+
+
+//////////////
+// convercion oct sept 
+////////////
+
+
+int iht,Kht,ChtLENOUTht,LENINht;
+int ioct,Koct,LENOUToct,LENINoct,Coct;
+char DEoct[255];
+char DSoct[255];
+char buf[100];
+
+/////////////////////////
+//cocanteo rellenos y numero 
+//////////////////////////
+
+char relle1[]=  "0011000A91";
+char relle2[]=  "10000AA";
+char relle3[]=     "68";
+
+/////////////////////////////////////////////
+// funciones  
+////////////////////////////////////////////
+ 
+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;     // ojooo
+        if(t.read() > 3) {
+            t.stop();
+            t.reset();
+            break;
+        }
+    }
+    
+    wait(0.5);
+    while(GSM.readable()) {  
+        char c = GSM.getc();
+    }
+    return 0;
+}
+
+///////////////////////////////////////////////
+//Programass
+///////////////////////////////////////////////
+    
+int main(void)
+       { 
+       
+       LedVerde=1;
+       LedRojo=1;
+       LedAzul=1;
+ 
+   
+       GSM.baud(9600);
+       GSM.format(8,Serial::None,1); 
+
+       GSM.printf("AT\r\n");
+       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);  
+             
+     
+     while(1){ 
+          
+       if (GSM.readable()) {
+            readBuffer(buffer,100);
+            pc.printf("buffer= %s\n\r ",buffer);
+            pc.printf("buffer= %c  %c\n\r ",buffer[10],buffer[11]);
+                if(buffer[67]=='A'){for(i=0;i<86;i++)
+                 {buffermsg[i]=buffer[i];}
+                 pc.printf("mensaje= %s\n\r ",buffermsg); 
+                 pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]);        
+                 buffer[67]='c';
+                 
+                 if (buffermsg[69] == '2'){    // PARA CUANDO LA CLAVE ES On
+                        LENIN=2; //numero de caracteres de abajo son los octetos
+                        DE[0]=0x47;
+                        DE[1]=0x37;
+                     }
+                 if (buffermsg[69] == '3'&& buffermsg[70] == '4'){  // PARA CUANDO LA CLAVE ES Off
+                        LENIN=3; //numero de caracteres de abajo son los octetos
+                        DE[0]=0x4F;
+                        DE[1]=0xB3;
+                        DE[2]=0x19;
+                    }
+                  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;
+                        DE[1]=0xB7;
+                        DE[2]=0x1C;
+                    }
+                 
+                    LENOUT= LENIN*8/7;
+                    K=7;
+                    C=0;
+                    DS[0]=DE[0] & 0x7F;  // la primera sola
+                    pc.printf("%2X\n",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\n",DS[i]);
+                        
+                        if (K==0) {K=8;C++;}
+                    K--;
+                    }
+                    
+                    for (i=0 ;i<=9;i++)  
+                    {
+                     Tel[i] = buffermsg[40+i];
+                    }   
+                    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]);
+            
+                 }
+                      
+        if(buffer[10]=='S'&& buffer[11]=='M'){
+             for(i=0;i<5;i++)
+             {buffer1[i]=buffer[2+i];}
+             pc.printf("buffer1= %s\n\r ",buffer1);         
+             buffer[10]='c';
+             buffer[11]='c';
+             }
+        if(buffer1[3]=='T'){pc.printf("AT+CMGL=0\n\r");
+            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");
+        LedAzul=0;
+        
+        DS[0] = '\0';
+        DS[1] = '\0';
+           
+           if(gps.sample())
+            {
+               lo =gps.longitude;
+               la =gps.latitude;
+               pc.printf("longitud_entera=%f, Latitud entera=%f\n", lo, la);
+         
+                  wait(0.5);         
+            //LONGITUD/        
+            sprintf (clo, "%f", lo); 
+            pc.printf ( "\nlongitud = %s\n",clo);
+            LENINlo=strlen(clo);  
+            
+            /*  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
+        ///////////////////////////////////////////////////
+
+           strcpy(la_lo,cla);
+           strcat(la_lo,",");
+           strcat(la_lo,clo);
+               
+           pc.printf ( "\nla_lo: %s\n",la_lo);
+           
+           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//:
+        ////////////////////////////////////////////////////////
+            strcpy(http2,http);
+            strcat(http2,la_lo);         
+            pc.printf ( "%s\n",http2);
+            pc.printf ( "\n" );
+           
+           
+        //////////////////////////////////////////////////////////////////////
+        // convierto http2 de oct a sep
+        ////////////////////////////////////////////////////////////////////////       
+       
+        LENINht=strlen(http2);
+        pc.printf("%d\n",LENINht); 
+        for (iht=0;iht<LENINht;iht++){
+             pc.printf("%2X",http2[iht]);       
+            } 
+        pc.printf ( "\n" );
+      
+        /////////////////////////////////////
+
+        LENINoct=strlen(http2);
+        pc.printf("%d\n",LENINoct);
+            for (ioct=0;ioct<LENINoct;ioct++)
+          {
+                DEoct[ioct]=http2[ioct];
+                pc.printf("%2X,%d\n",DEoct[ioct],ioct);       
+           }
+        ////////////////////////////////////////        
+       
+         Koct=0;
+         Coct=0;
+        
+         for (ioct=0;ioct < LENINoct;ioct++)
+         {
+                DSoct[ioct]=DEoct[ioct+Coct]>>Koct | DEoct[ioct+Coct+1]<<(7-Koct);
+                if (DSoct[ioct]==0x00){
+                    LENOUToct=ioct; 
+                    pc.printf("\n");
+                    pc.printf("%s",DEoct);
+                    pc.printf("out =%d",LENOUToct);
+                        for (ioct=0;ioct<LENOUToct;ioct++){
+                            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)
+                {
+                Koct=0;Coct++;
+                } // se chequea que ya se acabaron los bits en un ciclo de conversion.
+         }  
+        
+        /////////////////////////////////////////////////////////
+        // CONCATENO LOS RELLENOS Y EL NUMERO DEL CELULAR 
+        ////////////////////////////////////////////////////////
+        
+        
+        
+        
+        wait(5);
+        index=56;
+        GSM.printf("AT+CMGS=%d\r\n",index);
+        pc.printf("AT+CMGS=%d\r\n",index);
+        pc.printf("0011000A91");
+         GSM.printf("0011000A91");
+             for (i=0 ;i<=9;i++)  
+                    {
+                    pc.printf("%c",Tel[i]);
+                    GSM.printf("%c",Tel[i]);
+                    }  
+        pc.printf("10000AA");
+        GSM.printf("0000AA");
+         pc.printf("31");
+        GSM.printf("31");
+                 
+           for (ioct=0;ioct<=((LENOUToct*7)/8);ioct++)
+         {
+           pc.printf("%02X",DSoct[ioct]);
+           GSM.printf("%02X",DSoct[ioct]);
+         }
+         wait(0.5);
+         GSM.putc((char)0x1A);
+          GSM.scanf("%s",buf);
+            GSM.scanf("%s",buf);
+            GSM.scanf("%s",buf);
+            //GSM.scanf("%s",buf);
+            pc.printf(">%s\n",buf);
+          pc.printf("\n");
+          
+           }  // if 
+            
+            
+    
+        }
+
+        if(DS[0]-79==0 && DS[1]-102==0)     // Off en octetos es 4F6666
+        {
+               LedAzul=1; //apaga con Lgeverde
+               LedVerde = 0;
+               LedRojo=1;
+        }   
+        
+        if(DS[0]-71==0 && DS[1]-110==0)  // On en octetos es 476E
+        {
+               LedAzul=1;  //apaga con Lgeverde
+               LedRojo =0;
+               LedVerde = 1;
+        } 
+     }           
+}
+}