Santiago Gil
/
mbed_blinkydasdas
TareaGSMcorrecta
main.cpp
- Committer:
- sagilar
- Date:
- 2015-06-17
- Revision:
- 0:349755ee209f
File content as of revision 0:349755ee209f:
#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); } } } } }