Fabio Andres Ibañez Diaz
/
FUNCIONACORONRDY
GPS NUEVO
Diff: main.cpp
- Revision:
- 0:b11acb885c4c
diff -r 000000000000 -r b11acb885c4c main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jun 19 10:44:48 2015 +0000 @@ -0,0 +1,526 @@ +#include "mbed.h" +#include "DebouncedIn.h" +#include "stdio.h" +#include "string.h" +#include "math.h" +#include "gprs.h" +#include "GPS.h" +Timer t; +char ES[255]; +int Y,P,Q,LoutON,LinON; +DigitalOut LedRojo(LED1); +int Y2,P2,Q2,LoutON2,LinON2; + +Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z +GPS gps(PTE22, PTE23); + +Serial GSM(PTE0,PTE1);//Configura puerto USB a la consola serial del PC conectado. +//void leer(void); +void Rx_interrupt(); +int position=0; +int lenpack=6; +int longi=0; +char lat1[9]; +char lon1[12]; +char tel[11]; +char buffer[100]; +char buffer1[13]; +char datos[100]; +char NUMBER[13]; +int index; +char buffermsg[100]; +int count1=0; +int i = 0; +int j = 0; +char c; +unsigned char CtrlZ = 0x1A; // comodin de emision controlZ +bool Flag = false; // bandera +char v1[]=""; //Cadena de recepcion de la trama PDU si se usa!! +char v2[]=""; +char msg[256]; +int z=0,g=0; +char char1; +char de[255]; +char Link[]={"maps.google.com/?q="}; +char ds[255]; +int k,Lout,Lin,LL; +float frac_long, frac_lat,frac_long2,frac_lat2,frac_long3,frac_lat3,la,lo,L2,lat4,long4,L3,Lat,Long,Lmens; +short DS[255]; +int K,LENOUT,C; +char hexbyte[3]={0}; +int d; +int msglen[0]; +int lng; + + +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; + if(t.read() > 3) { + t.stop(); + t.reset(); + break; + } + } + wait(0.5); + while(GSM.readable()) { + char c = GSM.getc(); + } + return 0; +} + + + +int main(void) +{ + LedRojo=0; + + + 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 + + //configuracion del modem + + pc.printf("Enviamos AT\n"); //chekeo del modem + GSM.printf("AT\r\n"); + GSM.scanf("%s",buffer); + pc.printf("ATrdy>:D %s\r\n",buffer); + + GSM.printf("AT+CNMI=1,1\r\n"); //Habilitado para recibir SMS + pc.printf("AT+CNMI=1,1\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:D %s\r\n",buffer); + + GSM.printf("AT+CMGF=0\r\n"); // modo PDU + pc.printf("AT+CMGF=0\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:3 %s\r\n",buffer); + + GSM.printf("ATE\r\n"); // sin eco + pc.printf("ATE\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:x %s\r\n",buffer); + + GSM.printf("AT+CBST=0,0,1\r\n"); // AUTOBAUDIOS,ASINCRONICO + pc.printf("AT+CBST=0,0,1\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:) %s\r\n",buffer); + + GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO + pc.printf("AT+CMGD=1\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:) %s\r\n",buffer); +// termina configuraicon del modem + + + while(1) { + //wait(2); + + + + if (GSM.readable()) { + readBuffer(buffer,100); + + + + if(buffer[10]=='S'&& buffer[11]=='M'){ + pc.printf("Llego mensaje\n\r "); + buffer[10]=' '; + buffer[11]=' '; + GSM.printf("AT+CMGR=%c\r\n",buffer[14]); + pc.printf("AT+CMGR=%c\r\n",buffer[14]); + } + for(d=66;d<68;d+=2){ + hexbyte[0]=buffer[d]; + hexbyte[1]=buffer[d+1]; + sscanf(hexbyte,"%X",&msglen[(d-66)/2]); + printf("%2X\n",msglen[(d-66)/2]); + } + lng=msglen[0]; + int msg[lng-1]; + for(d=68;d<(68+((lng)*2));d+=2){ + hexbyte[0]=buffer[d]; + hexbyte[1]=buffer[d+1]; + sscanf(hexbyte,"%X",&msg[(d-68)/2]); + printf("%2X\n",msg[(d-68)/2]); + } + LENOUT= lng*8/7; + K=7; + C=0; + DS[0]=msg[0] & 0x7F; // la primera sola + printf("%2X,%d,%d\r\n",DS[0],i,K); + for (i=1;i < LENOUT;i++){ // inicia el algoritmo + DS[i]=(msg[i-1-C]>>K | msg[i-C]<<(8-K))& 0x7F; //valido para todos + printf("%2X,%d,%d\r\n",DS[i],i,K); + if (K==0) {K=8;C++;} + K--; + } + for (i=0;i < LENOUT;i++){ + printf("%c",DS[i]); + } + printf("\n"); + + +//if(buffer[68]=='C'&& buffer[69]=='3'&&buffer[70]=='B'&& buffer[71]=='7'&&buffer[72]=='1'&& buffer[73]=='C')//recibe mensaje Cor +if(DS[0]=='C'&&DS[1]=='o'&&DS[2]=='r') + { + pc.printf(":$ %c%c%c%c%c%c%c%c%c%c\r\n",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + pc.printf(":) %c%c%c%c%c%c\r\n",buffer[68],buffer[69],buffer[70],buffer[71],buffer[72],buffer[73]); + pc.printf("El mensaje es Cor\n"); + /*buffer[66]=' '; + buffer[67]=' ';*/ + buffer[68]=' '; + buffer[69]=' '; + buffer[70]=' '; + buffer[71]=' '; + buffer[72]=' '; + buffer[73]=' '; + //GPS + // INTENTARE LEER EL PUTO GPS// + while(1) { + + if(gps.sample()) { + + lo=(int)gps.longitude; + la=(int)gps.latitude; + frac_long=gps.longitude-(int)gps.longitude; + + frac_lat=gps.latitude-(int)gps.latitude; + + + + frac_lat2=frac_lat/1000000; + frac_long2=frac_long/100000; + + lat4=(int)abs(1000000*frac_lat); + long4=(int)abs(1000000*frac_long); + + frac_lat3=frac_lat+frac_lat2; + frac_long3=frac_long+frac_long2; + + + Long=gps.longitude; + Lat=gps.latitude; + sprintf(v1, "%f", Lat); + strcat(Link,v1); + strcat(Link,","); + + + sprintf(v2, "%f", Long); + strcat(Link,v2); + strcat(de,Link); + pc.printf("%s\n",Link); + pc.printf("esperando again \n"); + + // pasar coordenadas a formato PDU + Lin=strlen(de); + + j=0;k=0;i=0; + for (i=0;i < Lin;i++){ + ds[i]=de[i+k]>>j | de[i+k+1]<<(7-j); + if (ds[i]==0x00) {Lout=i; goto salir;} + j++; + if (j==7) {j=0;k++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. + } + } + } + salir: pc.printf("de\n"); + for (i=0;i < Lin;i++){ + pc.printf("%X",de[i]); + } + pc.printf("\n ds \n"); + for (i=0;i<Lout;i++){ + pc.printf("%2X",ds[i]&0x000000FF,i); + } + + // comienza el envio de coordenadas + pc.printf("\n Lout:%d,Lin:%d\r\n",Lout,strlen(de)); + + pc.printf("Comienza SMS \n"); + + + GSM.printf("AT+CMGS=%d\r\n",Lout+13); + pc.printf("\n AT+CMGS=%d\r\n",Lout+13); + wait(0.3); + + GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + //wait(0.5); + GSM.printf("%2X",Lin); + pc.printf("%2X",Lin); + + + for (i=0;i < Lout;i++){ + GSM.printf("%02X",ds[i]&0x000000FF); + pc.printf("%02X",ds[i]&0x000000FF); + // wait(0.3); + } + + + + GSM.putc((char)0x1A); //no tengo idea de ke hace esto + GSM.scanf("%s",buffer); + pc.printf("%s",buffer); + pc.printf("\n rdy "); + + + //link desde 18 + + for (i=0;i < 256;i++){ + ds[i]=NULL; + de[i]=NULL;} + LL=strlen(Link); + for (i=19;i < LL+1 ;i++){ + Link[i]=NULL;} + + + + + }// fin if del cor + + //aki deberia ir lo del on o off + for(d=66;d<68;d+=2){ + hexbyte[0]=buffer[d]; + hexbyte[1]=buffer[d+1]; + sscanf(hexbyte,"%X",&msglen[(d-66)/2]); + printf("%2X\n",msglen[(d-66)/2]); + } + lng=msglen[0]; + int msg1[lng-1]; + for(d=68;d<(68+((lng)*2));d+=2){ + hexbyte[0]=buffer[d]; + hexbyte[1]=buffer[d+1]; + sscanf(hexbyte,"%X",&msg1[(d-68)/2]); + printf("%2X\n",msg1[(d-68)/2]); + } + LENOUT= lng*8/7; + K=7; + C=0; + DS[0]=msg1[0] & 0x7F; // la primera sola + printf("%2X,%d,%d\r\n",DS[0],i,K); + for (i=1;i < LENOUT;i++){ // inicia el algoritmo + DS[i]=(msg1[i-1-C]>>K | msg1[i-C]<<(8-K))& 0x7F; //valido para todos + printf("%2X,%d,%d\r\n",DS[i],i,K); + if (K==0) {K=8;C++;} + K--; + } + for (i=0;i < LENOUT;i++){ + printf("%c",DS[i]); + } + printf("\n"); + + //if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='3'&& buffer[71]=='7')//recibe mensaje On + if(DS[0]=='O'&&DS[1]=='n') + { + + pc.printf("El mensaje es On\n"); + /*buffer[66]=' '; + buffer[67]=' ';*/ + buffer[68]=' '; + buffer[69]=' '; + buffer[70]=' '; + buffer[71]=' '; + if (LedRojo==1){ + LedRojo=0; + pc.printf("Modo Encendido\n");//AT+CMGS=21 0011000A9113735689900000AA09 45F7B8EC26A7C96F + + // pasar a PDU Encendido + + // char EE[255]; + + + + //numero de caracteres de abajo + char EE[]="Carro Encendido"; + LinON=strlen(EE); + + //----------------------------------- --------------------------- + P=0;Q=0;Y=0; + for (Y=0;Y < LinON;Y++){ + ES[Y]=EE[Y+Q]>>P | EE[Y+Q+1]<<(7-P); + if (ES[Y]==0x00) {LoutON=Y; goto salir1;} + P++; + if (P==7) {P=0;Q++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. + } + + //-------------------------------------------------------------- +salir1: for (Y=0;Y < LinON;Y++){ + pc.printf("%X",EE[Y]); + } + pc.printf(":\r\n"); + for (Y=0;Y<LoutON;Y++){ + pc.printf("%2X,%d\r\n",ES[Y]&0x000000FF,Y); + } + pc.printf("LoutON:%d,LinON:%d\r\n",LoutON,strlen(EE)); + + // fin pdu encendido + + // envio mensaje de encendido + // comienza el envio de coordenadas + + + pc.printf("Comienza SMS \n"); + + + GSM.printf("AT+CMGS=%d\r\n",LoutON+13); + pc.printf("\n AT+CMGS=%d\r\n",LoutON+13); + wait(0.5); + + GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + //wait(0.5); + GSM.printf("%02X",LinON); + pc.printf("%02X",LinON); + + + for (Y=0;Y < LoutON;Y++){ + GSM.printf("%02X",ES[Y]&0x000000FF); + pc.printf("%02X",ES[Y]&0x000000FF);} + + + GSM.putc((char)0x1A); + GSM.scanf("%s",buffer); + pc.printf("%s",buffer); + pc.printf("\n rdy "); + + wait(1); + GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO + pc.printf("AT+CMGD=1\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:) %s\r\n",buffer); + + + // termina envio de mensaje de encendido + + } //fin if de "modo encendido" + + + } // fin if del on + for(d=66;d<68;d+=2){ + hexbyte[0]=buffer[d]; + hexbyte[1]=buffer[d+1]; + sscanf(hexbyte,"%X",&msglen[(d-66)/2]); + printf("%2X\n",msglen[(d-66)/2]); + } + lng=msglen[0]; + int msg2[lng-1]; + for(d=68;d<(68+((lng)*2));d+=2){ + hexbyte[0]=buffer[d]; + hexbyte[1]=buffer[d+1]; + sscanf(hexbyte,"%X",&msg2[(d-68)/2]); + printf("%2X\n",msg2[(d-68)/2]); + } + LENOUT= lng*8/7; + K=7; + C=0; + DS[0]=msg2[0] & 0x7F; // la primera sola + printf("%2X,%d,%d\r\n",DS[0],i,K); + for (i=1;i < LENOUT;i++){ // inicia el algoritmo + DS[i]=(msg2[i-1-C]>>K | msg2[i-C]<<(8-K))& 0x7F; //valido para todos + printf("%2X,%d,%d\r\n",DS[i],i,K); + if (K==0) {K=8;C++;} + K--; + } + for (i=0;i < LENOUT;i++){ + printf("%c",DS[i]); + } + printf("\n"); + //if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='B'&& buffer[71]=='3'&&buffer[72]=='1'&& buffer[73]=='9')//recibe mensaje Off + if(DS[0]=='O'&&DS[1]=='f'&&DS[2]=='f') + { + + pc.printf("El mensaje es Off\n");// se borra el mensaje + /*buffer[66]=' '; + buffer[67]=' ';*/ + buffer[68]=' '; + buffer[69]=' '; + buffer[70]=' '; + buffer[71]=' '; + buffer[72]=' '; + buffer[73]=' '; + if (LedRojo==0){ + LedRojo=1; + pc.printf("Modo Apagado\n"); // AT+CMGS=20 0011000A9113735689900000AA07 4178F81C26BF01 + + char ES2[255]; + + //numero de caracteres de abajo + char EE2[]="Carro Apagado"; + LinON2=strlen(EE2); + + //----------------------------------- --------------------------- + P2=0;Q2=0;Y2=0; + for (Y2=0;Y2 < LinON2;Y2++){ + ES2[Y2]=EE2[Y2+Q2]>>P2 | EE2[Y2+Q2+1]<<(7-P2); + if (ES2[Y2]==0x00) {LoutON2=Y2; goto salir12;} + P2++; + if (P2==7) {P2=0;Q2++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. + } + + //-------------------------------------------------------------- +salir12: for (Y2=0;Y2 < LinON2;Y2++){ + pc.printf("%X",EE2[Y2]); + } + pc.printf(":\r\n"); + for (Y2=0;Y2<LoutON2;Y2++){ + pc.printf("%2X,%d\r\n",ES2[Y2]&0x000000FF,Y2); + } + pc.printf("LoutON2:%d,LinON2:%d\r\n",LoutON2,strlen(EE2)); + + // fin pdu Apagado + + // envio mensaje de Apagado + + + + pc.printf("Comienza SMS \n"); + + + GSM.printf("AT+CMGS=%d\r\n",LoutON2+13); + pc.printf("\n AT+CMGS=%d\r\n",LoutON2+13); + wait(0.5); + + GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); + //wait(0.5); + GSM.printf("%02X",LinON2); + pc.printf("%02X",LinON2); + + + for (Y2=0;Y2 < LoutON2;Y2++){ + GSM.printf("%02X",ES2[Y2]&0x000000FF); + pc.printf("%02X",ES2[Y2]&0x000000FF);} + + + GSM.putc((char)0x1A); + GSM.scanf("%s",buffer); + pc.printf("%s",buffer); + pc.printf("\n rdy "); + wait(1); + GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO + pc.printf("AT+CMGD=1\r\n"); + GSM.scanf("%s",buffer); + pc.printf(">:) %s\r\n",buffer); + + }// fin de modo "apagado" + + + + + }// fin if del off + + +} //fin del if principal + + }//fin del while +}// fin del main +// buffer[i] contiene lo que regresa \ No newline at end of file