Santiago Gil
/
mbed_blinkydasdas
TareaGSMcorrecta
Diff: main.cpp
- Revision:
- 0:349755ee209f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jun 17 16:55:03 2015 +0000 @@ -0,0 +1,350 @@ +#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 Compcor[6]; +char Compon[6]; +char Compoff[6]; +char DS[255]; +char DScor[255]; +char DSon[255]; +char DSoff[255]; +char DEcor[255]; +char DEon[255]; +char DEoff[255]; +char DS1[255]; +char DS2[255]; +char DS3[255]; +char DS4[255]; +char Comp[3]; +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,LENINcor,LENINon,LENINoff,LENOUTcor,LENOUTon,LENOUToff; +DigitalOut Rojo(LED1); +DigitalOut Verde(LED2); +DigitalOut Azul(LED3); + +int main(){ + pc.printf("OK"); + + Rojo=1; + Verde=0; + Azul=1; +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]); + +int nume1cor=16*(int)bufn[1]+(int)bufn[2]+96;//+96 para cor +96+105 para off y on +int nume2cor=16*(int)bufn[3]+(int)bufn[4]+96;//+96 para cor +96 para off +80 para on +int nume3cor=16*(int)bufn[5]+(int)bufn[6]-55;//-55 para cor +80 para off +DEcor[0]=("%x",nume1cor); +DEcor[1]=("%x",nume2cor); +DEcor[2]=("%x",nume3cor); + +LENINcor=strlen(DEcor); +pc.printf("LENIN:%d\n",LENINcor); + LENOUTcor= LENINcor*8/7; + K=7; + C=0; + DScor[0]=DEcor[0] & 0x7F; // la primera sola + pc.printf("%2X,%d,%d\r\n",DScor[0],i,K); + for (i=1;i < LENOUTcor;i++){ // inicia el algoritmo + DScor[i]=(DEcor[i-1-C]>>K | DEcor[i-C]<<(8-K))& 0x7F; //valido para todos + pc.printf("%2X,%d,%d\r\n",DScor[i],i,K); + if (K==0) {K=8;C++;} + K--; + } + pc.printf("DS:"); + for (i=0;i < LENOUTcor;i++){ + pc.printf("%c",DScor[i]); + } + pc.printf(" ---"); + +int nume1on=16*(int)bufn[1]+(int)bufn[2]+96+105;//+96 para cor +96+105 para off y on +int nume2on=16*(int)bufn[3]+(int)bufn[4]+80;//+96 para cor +96 para off +80 para on +//int nume3on=16*(int)bufn[5]+(int)bufn[6]-55;//-55 para cor +80 para off +DEon[0]=("%x",nume1on); +DEon[1]=("%x",nume2on); +//DEcor[2]=("%x",nume3); + +LENINon=strlen(DEon); +pc.printf("LENIN:%d\n",LENINon); + LENOUTon= LENINon*8/7; + K=7; + C=0; + DSon[0]=DEon[0] & 0x7F; // la primera sola + pc.printf("%2X,%d,%d\r\n",DSon[0],i,K); + for (i=1;i < LENOUTon;i++){ // inicia el algoritmo + DSon[i]=(DEon[i-1-C]>>K | DEon[i-C]<<(8-K))& 0x7F; //valido para todos + pc.printf("%2X,%d,%d\r\n",DSon[i],i,K); + if (K==0) {K=8;C++;} + K--; + } + pc.printf("DS:"); + for (i=0;i < LENOUTon;i++){ + pc.printf("%c",DSon[i]); + } + pc.printf(" ---"); + + +sprintf(Compon,"%c%c",DSon[0],DSon[1]); + +int nume1off=16*(int)bufn[1]+(int)bufn[2]+96+105;//+96 para cor +96+105 para off y on +int nume2off=16*(int)bufn[3]+(int)bufn[4]+96;//+96 para cor +96 para off +80 para on +int nume3off=16*(int)bufn[5]+(int)bufn[6]+80;//-55 para cor +80 para off +DEoff[0]=("%x",nume1off); +DEoff[1]=("%x",nume2off); +DEoff[2]=("%x",nume3off); + +LENINoff=strlen(DEoff); +pc.printf("LENIN:%d\n",LENINoff); + LENOUToff= LENINoff*8/7; + K=7; + C=0; + DSoff[0]=DEoff[0] & 0x7F; // la primera sola + pc.printf("%2X,%d,%d\r\n",DSoff[0],i,K); + for (i=1;i < LENOUToff;i++){ // inicia el algoritmo + DSoff[i]=(DEoff[i-1-C]>>K | DEoff[i-C]<<(8-K))& 0x7F; //valido para todos + pc.printf("%2X,%d,%d\r\n",DSoff[i],i,K); + if (K==0) {K=8;C++;} + K--; + } + pc.printf("DS:"); + for (i=0;i < LENOUToff;i++){ + pc.printf("%c",DSoff[i]); + } + pc.printf(" ---"); + + +char cadenaon[5]="on"; +char cadenaoff[5]="off"; +char cadenacor[5]="cor"; + pc.printf("\n"); + + +for (i=1;i<11;i++){ +pc.printf("%c",cel[i]); +} +pc.printf("\n"); + +sprintf(Compoff,"%c%c%c",DSoff[0],DSoff[1],DSoff[2]); +sprintf(Compcor,"%c%c%c",DScor[0],DScor[1],DScor[2]); +pc.printf("\n%s\n",Compcor); + + if(strcmp(Compcor,cadenacor)==0){ +fflush(stdin); + 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); +//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=%d\r\n",32+LENIN/2); + pc.printf("AT+CMGS=%d\r\n",32+LENIN/2); + + wait(0.5); + //CEL.scanf("%s",DS1); + //pc.printf("%s",DS1); + 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); + char DE1[10]={"ERROR"}; + //char DE2[10]={"1K"}; +CEL.putc((char)0x1A); +CEL.scanf("%s",DS2); +pc.printf("\nEstimado del envio:%s\n",DS2); +if(strcmp(DS2,DE1)==0){ + Azul=!Azul; + + } +CEL.scanf("%s",DS3); +pc.printf("\nDS3:%s\n",DS3); + +wait(0.2); +wait(1); +CEL.printf("AT+CMGD=1\r\n"); +fflush(stdin); +wait(3); + } + } + +else{ + if(strcmp(Compon,cadenaon)==0){ + fflush(stdin); + Rojo=!Rojo; + wait(1); + CEL.printf("AT+CMGD=1\r\n"); + fflush(stdin); + wait(3); + + } + + else{ + if(strcmp(Compoff,cadenaoff)==0){ + fflush(stdin); + Verde=!Verde; + wait(1); + CEL.printf("AT+CMGD=1\r\n"); + fflush(stdin); + wait(3); + } +} +} +} + +}