Fabio Andres Ibañez Diaz
/
FUNCIONACORONRDY
GPS NUEVO
main.cpp
- Committer:
- obifandres
- Date:
- 2015-06-19
- Revision:
- 0:b11acb885c4c
File content as of revision 0:b11acb885c4c:
#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