Programa donde se interactúa con un celular como Modem para la telecomunicación con el microcontrolador KL25Z

Dependencies:   GPS7 mbed

Revision:
0:08bd67a21cc4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 28 01:43:30 2015 +0000
@@ -0,0 +1,225 @@
+#include "mbed.h"
+#include "GPS.h"
+#include<stdio.h>
+#include<string.h>
+#include<math.h>
+Serial pc(USBTX,USBRX); 
+GPS gps(PTE0,PTE1);
+Serial CEL(PTE22,PTE23); //Puertos de FRDM para el celular o modem
+char buf[100], bufn[18], celr[18], cel[18];
+char DS[255];
+char DE[255];
+char DS1[255];
+char DE1[255];
+char DENOUT[255];
+char DENIN[255];
+float longitud,lat;
+char hex[101];
+int i,K,C,LENIN,LENOUT,LENIN1,LENOUT1,LENIN2,LENOUT2,LENIN3,LENOUT3,den;
+DigitalOut Rojo(LED1);
+DigitalOut Verde(LED2);
+
+
+int main(){
+       pc.printf("OK"); 
+    Rojo=1;
+    Verde=0;
+while(1){
+     CEL.baud(9600);
+CEL.format(8,Serial::None,1);
+    CEL.printf("AT\r\n");
+       
+       wait(0.5);
+       CEL.printf("AT+CNMI=1,1\r\n");
+       wait(0.5);
+       CEL.printf("AT+CMGF=0\r\n");
+       wait(0.5);
+       CEL.printf("ATE\r\n");
+       wait(0.5);
+       CEL.printf("CBST=0,0,1\r\n");
+       wait(0.5);  
+
+     
+
+
+
+
+
+
+CEL.printf("AT\r\n");
+CEL.scanf("%s",buf);
+pc.printf("Modem %s\n",buf);
+CEL.printf("AT+CMGR=1  \r\n");
+CEL.scanf("%s",buf);
+CEL.scanf("%s",buf);
+CEL.scanf("%s",buf);
+CEL.scanf("%s",buf);
+pc.printf(">%s",buf);
+
+for(i=0;i<100;i++){
+    if((i>=22)&&(i<32)){
+     celr[i-21]=buf[i];
+     }    
+    if((i>=52)&&(i<58)){
+     bufn[i-51]=buf[i];
+     }
+ }
+  
+     for (i=1;i<12;i++){
+         if (i%2!=0){
+         cel[i]=celr[i+1];
+         }
+          if (i%2==0){
+         cel[i]=celr[i-1];
+         }
+      }
+pc.printf(">%c%c%c%c%c%c",bufn[1],bufn[2],bufn[3],bufn[4],bufn[5],bufn[6]);
+
+  if((bufn[1]-69==0)&&(bufn[2]-51==0)&&(bufn[3]-66==0)&&(bufn[4]-55==0)&&(bufn[5]-49==0)&&(bufn[6]-67==0)){
+
+             pc.printf("Si cogio COR\n");
+             if(gps.sample()) {
+                 pc.printf("Si cogio GPS\n");
+       //    float d = GPS.getc();
+           // pc.printf("longitud_entera=%d, Latitud entera=%d\n", (int)gps.longitude, (int)gps.latitude);
+            //pc.printf("Longitud Fraccionaria=%d\n", (int)abs(1000000*frac_long)); 
+           // pc.printf("Latitud fraccionaria=%d\n", (int)abs(1000000*frac_lat)); 
+       //lcd.printf("%01.6f", gps.longitude, gps.latitude);
+          //  pc.printf("%d\n", gps.longitude, gps.latitude);
+        longitud=gps.longitude;
+        lat=gps.latitude;
+        
+
+       //Código para convertir de float a char
+   // float n=lat;
+       char vector2[20];
+    char vector1[20];
+    sprintf(vector1,"%f",lat);
+    sprintf(vector2,"%f",longitud);
+   // ftoa(n, vector1, 6);
+  //  n=longitud;
+ //      char cToStr3[2];
+ 
+  //  if (n<0){
+ //n=n*(-1);
+  //n=n-50.431859;
+   // ftoa(n,vector2,6);
+//cToStr3[1] = '\0';
+//char currentChar = '-';
+//cToStr3[0] = currentChar;
+//strcat (cToStr3,vector2);
+//}
+
+     pc.printf("Lat:%s %f\n",vector1,lat);
+          pc.printf("Lon:%s   %f\n",vector2,longitud);
+    
+    //termina el código de convertir de float a char
+      
+
+         
+      char DEN[100]={"http://maps.google.com/maps?q="};//&vector1[]","&vector2[];//se concatenan los vectores a la cadena que se va a enviar
+    strcat(DEN,vector1);
+   char cToStr[2];
+cToStr[1] = '\0';
+
+char currentChar = ',';
+//cToStr will assume the string "B":
+cToStr[0] = currentChar;
+//And strcat will work!
+
+strcat (DEN,cToStr );
+strcat(DEN,vector2);
+        
+pc.printf("%s \n",DEN);
+for (i=1;i<7;i++){
+pc.printf("%c",bufn[i]);
+}
+pc.printf("\n");
+for (i=1;i<11;i++){
+pc.printf("%c",cel[i]);
+}
+pc.printf("\n");
+
+
+         
+    LENIN3=strlen(DEN);
+  pc.printf("\n DENIN: ");
+   for (i=0;i<(LENIN3);i=i+1){
+
+         DENIN[i]=DEN[i];
+           pc.printf("%x",DENIN[i]);
+  
+         }
+       pc.printf("\n");
+ pc.printf("\n %i \n",LENIN3);
+         //Y CONTINUA HASTA EL ÚLTIMO DATO
+//----------------------------------- ---------------------------
+
+int LENIN=LENIN3; 
+         K=0;C=0;
+         for (i=0;i < LENIN;i++){
+         DS[i]=DEN[i+C]>>K | DEN[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:        
+          for (i=0;i < LENIN;i++){
+         pc.printf("%X",DEN[i]);
+         }
+         pc.printf(":\r");
+         for (i=0;i<LENOUT;i++){
+         pc.printf("%2X,%d",DS[i]&0x000000FF,i);
+         }
+            pc.printf("\n");
+         
+         
+         wait(0.5);
+         pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA%2X",celr[1],celr[2],celr[3],celr[4],celr[5],celr[6],celr[7],celr[8],celr[9],celr[10],LENIN);
+ CEL.printf("AT+CMGS=56\r\n");
+ 
+     wait(0.5);
+  
+  CEL.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA%2X",celr[1],celr[2],celr[3],celr[4],celr[5],celr[6],celr[7],celr[8],celr[9],celr[10],LENIN);
+  wait(0.5);
+   for (i=0;i < LENOUT;i++){
+    CEL.printf("%02x",DS[i]); 
+    pc.printf("%02x",DS[i]); 
+    }
+    wait(0.5);
+CEL.putc((char)0x1A);
+ wait(1);
+CEL.printf("AT+CMGD=1\r\n");
+wait(30);
+
+}
+
+}
+else{
+    if((bufn[1]-54==0)&&(bufn[2]-70==0)&&(bufn[3]-51==0)&&(bufn[4]-55==0)){
+        Rojo=!Rojo;
+         wait(1);
+      CEL.printf("AT+CMGD=1\r\n");
+       wait(60);
+        
+    }
+
+        else{
+    if((bufn[1]-54==0)&&(bufn[2]-70==0)&&(bufn[3]-66==0)&&(bufn[4]-51==0)&&(bufn[5]-49==0)&&(bufn[6]-57==0)){
+        
+        Verde=!Verde;
+         wait(1);
+         CEL.printf("AT+CMGD=1\r\n");
+         wait(60);
+    }
+}
+
+}
+
+
+
+}
+
+}
\ No newline at end of file