ENVIA MENSAJE Y RESPONDE CON LINK DE GOOGLE MAPS, ENVIA ON PRENDE UN LED Y RESPONDE AL CELULAR Q SE ENCENDIO EL CARRO, ENVIA OFF APAGA LED Y RESPONDE ALCELULKAR QUE SE APAGO ELO CARRO
Dependencies: DebouncedIn GPS7 mbed
Fork of CLASEDELGSM by
main.cpp
- Committer:
- asjgrupo4
- Date:
- 2015-05-27
- Revision:
- 2:ffcd0494ec92
- Parent:
- 1:6b506dde0a6e
- Child:
- 3:75c530fb1140
File content as of revision 2:ffcd0494ec92:
// Programa para enviar desde la FRDMKL25Z un mensaje de texto en formatp PDU // Como modem usa un celular SIEMENS a56i // ENVIAR -----la palabra "ALARMA 1" // // OJO CON ESTO // conector del siemens cable verde es RX conectelo a PTE0 cable blanco es TX conectelo a PTE1 #include "mbed.h" #include "DebouncedIn.h" #include "stdio.h" #include "string.h" #include "math.h" #include "gprs.h" #include "GPS.h" Timer t; DigitalOut on_off(PTC17); //señal que inicia el envio del mensaje Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z GPS gps(PTE22, PTE23); //Serial GSM(USBTX,USBRX); //serial (PTA2,PTA1);/////////////////USBTX,USBRX PTE0,PTE1 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 r[]=""; //Cadena de recepcion de la trama PDU si se usa!! char msg[256]; int z=0,g=0; char char1; char DE[255]={"http://maps.google.com/maps?q="}; char DS[255]; int K,C,LENOUT,LENIN; int frac_long, frac_lat,ent_long,ent_lat; 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) { 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 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]); } if(buffer[68]=='C'&& buffer[69]=='3'&&buffer[70]=='B'&& buffer[71]=='7'&&buffer[72]=='1'&& buffer[73]=='C')//recibe mensaje Cor { pc.printf("El mensaje es Cor\n"); buffer[68]=' '; buffer[69]=' '; buffer[70]=' '; buffer[71]=' '; buffer[72]=' '; buffer[73]=' '; if(gps.sample()) { frac_long=(int)abs(1000000*gps.longitude-(int)gps.longitude); ent_long=(int)gps.longitude; frac_lat=(int)abs(1000000*gps.latitude-(int)gps.latitude); ent_lat=(int)gps.latitude; // pc.printf("%d.%d,%d.%d\n",ent_long,frac_long,ent_lat,frac_lat); lat1[0]=ent_lat+48; lat1[1]='.'; for(z=6;z>=0;z--) { g= pow(10,0.0+z); lat1[8-z]=(frac_lat/g)+48; frac_lat=frac_lat%g; } lon1[0]='-'; ent_long=ent_long*-1; lon1[1]=(ent_long/10)+48; lon1[2]=(ent_long%10)+48; lon1[3]='.'; for(z=7;z>=0;z--) { g= pow(10,0.0+z); lon1[11-z]=(frac_long/g)+48; frac_long=frac_long%g; } } LENIN=30; for(i=LENIN;i<(LENIN+9);i++) { DE[i]=lat1[i-LENIN]; } LENIN=LENIN+9; DE[i]=','; LENIN=LENIN+1; for(i=LENIN;i<(LENIN+12);i++) { DE[i]=lon1[i-LENIN]; } LENIN=LENIN+12; K=0;C=0; for (i=0;i < LENIN;i++){ DS[i]=DE[i+C]>>K | DE[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: GSM.printf("AT\r\n");//envia link con coordenadas 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",13+LENIN); pc.printf("at+cmgs=%d\r\n",13+LENIN); wait(0.5); GSM.printf("0011000A9113315442760000AA"); //12 octetos + los octetos del mensaje pc.printf("0011000A9113315442760000AA"); //12 octetos + los octetos del mensaje //3113452467 if(LENIN<=15) { pc.printf("0"); GSM.printf("0"); pc.printf("%X",LENIN); GSM.printf("%X",LENIN); } else{ pc.printf("%2X",LENIN); GSM.printf("%2X",LENIN); } for (i=0;i < LENIN;i++){ if(DS[i]<=15) { pc.printf("0"); GSM.printf("0"); pc.printf("%X",DS[i]); GSM.printf("%X",DS[i]); } else{ pc.printf("%2X",DS[i]&0x000000FF); GSM.printf("%2X",DS[i]&0x000000FF); } } //GSM.printf("%X",68); //12 octetos + los octetos del mensaje //GSM.printf("9");//GSM.printf("%u",30); wait(0.5); GSM.putc(0x1A); } } if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='3'&& buffer[71]=='7')//recibe mensaje On { on_off=1; pc.printf("El mensaje es On\n"); buffer[68]=' '; buffer[69]=' '; buffer[70]=' '; buffer[71]=' '; 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("0011000A9113315442760000AA0945F7B8EC26A7C96F"); //12 octetos + los octetos del mensaje---devuelve mensaje encendido enciende un led que esta en PTC17 pc.printf("0011000A9113315442760000AA0945F7B8EC26A7C96F"); wait(0.5); GSM.putc(0x1A); } if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='B'&& buffer[71]=='3'&&buffer[72]=='1'&& buffer[73]=='9')//recibe mensaje Off { on_off=0; pc.printf("El mensaje es Off\n");// se borra el mensaje buffer[68]=' '; buffer[69]=' '; buffer[70]=' '; buffer[71]=' '; buffer[72]=' '; buffer[73]=' '; 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("0011000A9113315442760000AA074178F81C26BF01"); //12 octetos + los octetos del mensaje----devuelve mensaje apagado--apaga el led de PTC17 pc.printf("0011000A9113315442760000AA074178F81C26BF01"); wait(0.5); GSM.putc(0x1A); } } } // buffer[i] contiene lo que regresa