envia Cord responde con link
Dependencies: DebouncedIn GPS7 mbed
Fork of send by
main.cpp
- Committer:
- asjgrupo4
- Date:
- 2015-06-23
- Revision:
- 3:75c530fb1140
- Parent:
- 2:ffcd0494ec92
File content as of revision 3:75c530fb1140:
#include "mbed.h" #include "DebouncedIn.h" #include "stdio.h" #include "string.h" #include "math.h" #include "gprs.h" #include "GPS.h" Timer t; int readBuffer(char *buffer,int count); void enviar(int LENIN1,char *DS,char *numero);//longitud de mensaje, cadena del mensaje, cadena del celular DigitalOut on_off(PTC17); //señal que inicia el envio del mensaje Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z GPS gps(PTE0,PTE1); Serial GSM(PTE22, PTE23);//Configura puerto USB a la consola serial del PC conectado. char celular[10]; char buffer[100]; char DE1[255]={"http://maps.google.com/maps?q="}; char DE[255]; char DS[255]; char coorden[50]={NULL}; char coorden_org[50]={NULL}; char msg[4]; int z=0,j=0,i=0,p=0,LENIN=0,LENIN1=0,count=0,flag=0,K=0,C=0,LENOUT=0; int ent_long,ent_lat; int negativo=0; int frac_long, frac_lat,bandera=0; int main(void) { GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600 GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART wait(1); pc.printf("Conectado\r\n"); while(1) { if (GSM.readable()) { readBuffer(buffer,100); pc.printf(buffer); } if((buffer[10]=='S')&& (buffer[11]=='M')) { pc.printf("Llego mensaje\r\n "); buffer[10]=' '; buffer[11]=' '; GSM.printf("AT+CMGR=%c\r\n",buffer[14]); pc.printf("AT+CMGR=%c\r\n",buffer[14]); } //va funcion de mensaje recibido if(buffer[85]=='4'&& buffer[86]=='F'&&buffer[87]=='3'&& buffer[88]=='7')//recibe mensaje On { for(i=55;i<65;i++) { celular[i-55]=buffer[i]; } on_off=1; pc.printf("El mensaje es On\r\n"); buffer[85]=' '; buffer[86]=' '; buffer[87]=' '; buffer[88]=' '; GSM.printf("AT\r\n");//proto0colo envio de mensaje 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); GSM.printf("at+cmgs=%d\r\n",21); pc.printf("at+cmgs=%d\r\n",21); wait(0.5); GSM.printf("0011000A91"); pc.printf("0011000A91"); for(p=0;p<10;p++) { GSM.printf("%c",celular[p]); pc.printf("%c",celular[p]); } GSM.printf("0000AA0945F7B8EC26A7C96F"); //12 octetos + los octetos del mensaje---devuelve mensaje encendido enciende un led que esta en PTC17 pc.printf("0000AA0945F7B8EC26A7C96F"); wait(0.5); GSM.putc(0x1A); } if(buffer[85]=='4'&& buffer[86]=='F'&&buffer[87]=='B'&& buffer[88]=='3'&&buffer[89]=='1'&& buffer[90]=='9')//recibe mensaje Off { for(i=55;i<65;i++) { celular[i-55]=buffer[i]; } on_off=0; pc.printf("El mensaje es Off\r\n");// se borra el mensaje buffer[85]=' '; buffer[86]=' '; buffer[87]=' '; buffer[88]=' '; buffer[89]=' '; buffer[90]=' '; GSM.printf("AT\r\n");//protocolo de envio de mensaje 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); GSM.printf("at+cmgs=%d\r\n",20); pc.printf("at+cmgs=%d\r\n",20); wait(0.5); GSM.printf("0011000A91"); pc.printf("0011000A91"); for(p=0;p<10;p++) { GSM.printf("%c",celular[p]); pc.printf("%c",celular[p]); } GSM.printf("0000AA074178F81C26BF01"); //12 octetos + los octetos del mensaje----devuelve mensaje apagado--apaga el led de PTC17 pc.printf("0000AA074178F81C26BF01"); wait(0.5); GSM.putc(0x1A); } //celular comienza en posicion 48 //longitud del mensaje en posicion 83,84 //mensaje en posicion 85 if((buffer[83]=='0')&&(buffer[84]=='4')) { buffer[83]=' '; buffer[84]=' '; count=0; LENIN1=4; //numero de caracteres de abajo son los octetos for(i=0;i<8;i++) { if(i%2==0) { if(buffer[85+i]>57) { DE[count]=(buffer[85+i]-55)<<4; } else { DE[count]=(buffer[85+i]-48)<<4; } } else { if(buffer[85+i]>57) { DE[count]=(buffer[85+i]-55)+DE[count]; } else { DE[count]=(buffer[85+i]-48)+DE[count]; } count++; } } LENOUT= LENIN1*8/7; K=7; C=0; DS[0]=DE[0] & 0x7F; // la primera sola pc.printf("%2X",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",DS[i]); if (K==0) {K=8;C++;} K--; } for (i=0;i < LENOUT;i++){ pc.printf("%c",DS[i]); msg[i]=DS[i]; } pc.printf("\r\n"); pc.printf("Mensaje en el celular\r\n"); pc.printf(buffer); if((msg[0]=='C')&&(msg[1]=='o')&&(msg[2]=='r')&&(msg[3]=='d')) { //obtener coordenadas pc.printf("Coordenadas GPS\r\n"); if(gps.sample()) { ent_long=(int)gps.longitude; ent_lat=(int)gps.latitude; frac_long=abs((gps.longitude-(int)gps.longitude)*1000000); frac_lat=abs((gps.latitude-(int)gps.latitude)*1000000); pc.printf("http://maps.google.com/maps?q=%f,%f\r\n", gps.latitude,gps.longitude); //coordenada longitud a cadena while(frac_long>0) { coorden[j]=(frac_long%10)+48; frac_long=frac_long/10; pc.printf("%c",coorden[j]); j++; } coorden[j]='.'; pc.printf("%c",coorden[j]); j++; if(ent_long<0) { negativo=1; ent_long=ent_long*-1; } while(ent_long>0) { coorden[j]=(ent_long%10)+48; ent_long=ent_long/10; pc.printf("%c",coorden[j]); j++; } if(negativo==1) { coorden[j]='-'; pc.printf("%c",coorden[j]); j++; } negativo=0; coorden[j]=','; pc.printf("%c",coorden[j]); j++; while(frac_lat>0) { coorden[j]=(frac_lat%10)+48; frac_lat=frac_lat/10; pc.printf("%c",coorden[j]); j++; } coorden[j]='.'; pc.printf("%c",coorden[j]); j++; if(ent_lat<0) { negativo=1; ent_lat=ent_lat*-1; } while(ent_lat>0) { coorden[j]=(ent_lat%10)+48; ent_lat=ent_lat/10; pc.printf("%c",coorden[j]); j++; } if(negativo==1) { coorden[j]='-'; pc.printf("%c",coorden[j]); j++; } pc.printf("\r\n"); j--; z=strlen(DE1); for(i=j;i>=0;i--) { DE1[z]=coorden[i]; z++; } pc.printf(DE1); pc.printf("\r\n"); //strlen(DE); LENIN1=strlen(DE1); K=0;C=0; for (i=0;i < LENIN1;i++){ DS[i]=DE1[i+C]>>K | DE1[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: //Tomamos el numero de celular for(i=55;i<65;i++) { celular[i-55]=buffer[i]; } enviar(LENIN1,DS,celular); } } } }} void enviar(int LENIN1,char *DS,char *numero){ GSM.printf("AT\r\n");//envia link con coordenadas pc.printf("AT\r\n");//envia link con coordenadas wait(0.5); GSM.printf("AT+CNMI=1,1\r\n"); pc.printf("AT+CNMI=1,1\r\n"); wait(0.5); GSM.printf("AT+CMGF=0\r\n"); pc.printf("AT+CMGF=0\r\n"); wait(0.5); GSM.printf("ATE\r\n"); pc.printf("ATE\r\n"); wait(0.5); GSM.printf("CBST=0,0,1\r\n"); pc.printf("CBST=0,0,1\r\n"); wait(0.5); GSM.printf("at+cmgs=%d\r\n",13+LENIN1); pc.printf("at+cmgs=%d\r\n",13+LENIN1); wait(0.5); GSM.printf("0011000A91"); pc.printf("0011000A91"); for(p=0;p<10;p++) { GSM.printf("%c",celular[p]); pc.printf("%c",celular[p]); } GSM.printf("0000AA"); pc.printf("0000AA"); if(LENIN1<=15) { pc.printf("0"); GSM.printf("0"); pc.printf("%X",LENIN1); GSM.printf("%X",LENIN1); } else{ pc.printf("%2X",LENIN1); GSM.printf("%2X",LENIN1); } for (p=0;p < LENIN1;p++){ if(DS[p]<=15) { pc.printf("0"); GSM.printf("0"); pc.printf("%X",DS[p]); GSM.printf("%X",DS[p]); } else{ pc.printf("%2X",DS[p]&0x000000FF); GSM.printf("%2X",DS[p]&0x000000FF); } } wait(0.5); GSM.putc(0x1A); pc.putc(0x1A); } int readBuffer(char *buffer,int count){ 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; if(t.read() > 3) { t.stop(); t.reset(); break; } } wait(0.5); while(GSM.readable()) { char c = GSM.getc(); } return 0; }