COMUNICACIÓN MODEM SIEMENS Y GPS PARA RASTREO SATELITAL CON ACCIONAMIENTO REMOTO
Fork of TareaGPS_Siemens by
Diff: main.cpp
- Revision:
- 0:b2a6aa7c0c8c
- Child:
- 1:e2bd083802c0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jun 19 17:45:34 2015 +0000 @@ -0,0 +1,375 @@ +//programa para celular siemens que recibe un mensaje de texto t activa una salida en formato +//pdu hex +#include "mbed.h" +#include "DebouncedIn.h" +#include "stdio.h" +#include "string.h" +#include "GPS.h" + + + + +Timer t; +DigitalOut LedVerde(LED2); +DigitalOut LedRojo(LED1); +DigitalOut LedAzul(LED3); + +/////////////////////////////////////////// + +Serial GSM(PTE0,PTE1); //puertos del FRDM para el modem +Serial pc(USBTX,USBRX); +GPS gps(PTE22, PTE23); // Puerto del FDRM para el gps + +//////////////////////////// +//PARAMETROS +//////////////////////////////// + + +short DE[255]; +short DS[255]; + +char buffer[512]; +char buffermsg[100]; +char buffer1[13]; +char mensaje[100]; +int count; +int i,K,LENOUT,LENIN,C; + +char Tel[15]; +char cel[15]; +char ojala[15]; // OJO + +int c=0; +int cont=0; +unsigned char CtrlZ = 0x1A; +bool Flag = false; +char r[]=""; +char msg[256]; +char char1; + +int index; + +////// +//longitud y latitud +//// + + +float lo,la; +char clo[255], cla[255]; // +int LENINlo,LENINla,LENINla_lo; +char la_lo[255]; + +char http2[255]; +char http[] = "http://maps.google.com/maps?q="; + + + +////////////// +// convercion oct sept +//////////// + + +int iht,Kht,ChtLENOUTht,LENINht; +int ioct,Koct,LENOUToct,LENINoct,Coct; +char DEoct[255]; +char DSoct[255]; +char buf[100]; + +///////////////////////// +//cocanteo rellenos y numero +////////////////////////// + +char relle1[]= "0011000A91"; +char relle2[]= "10000AA"; +char relle3[]= "68"; + +///////////////////////////////////////////// +// funciones +//////////////////////////////////////////// + +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; // ojooo + if(t.read() > 3) { + t.stop(); + t.reset(); + break; + } + } + + wait(0.5); + while(GSM.readable()) { + char c = GSM.getc(); + } + return 0; +} + +/////////////////////////////////////////////// +//Programass +/////////////////////////////////////////////// + +int main(void) + { + + LedVerde=1; + LedRojo=1; + LedAzul=1; + + + GSM.baud(9600); + GSM.format(8,Serial::None,1); + + GSM.printf("AT\r\n"); + 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); + + + while(1){ + + if (GSM.readable()) { + readBuffer(buffer,100); + pc.printf("buffer= %s\n\r ",buffer); + pc.printf("buffer= %c %c\n\r ",buffer[10],buffer[11]); + if(buffer[67]=='A'){for(i=0;i<86;i++) + {buffermsg[i]=buffer[i];} + pc.printf("mensaje= %s\n\r ",buffermsg); + pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]); + buffer[67]='c'; + + if (buffermsg[69] == '2'){ // PARA CUANDO LA CLAVE ES On + LENIN=2; //numero de caracteres de abajo son los octetos + DE[0]=0x47; + DE[1]=0x37; + } + if (buffermsg[69] == '3'&& buffermsg[70] == '4'){ // PARA CUANDO LA CLAVE ES Off + LENIN=3; //numero de caracteres de abajo son los octetos + DE[0]=0x4F; + DE[1]=0xB3; + DE[2]=0x19; + } + if (buffermsg[69] == '3'&& buffermsg[70] == 'C'){ // PARA CUANDO LA CLAVE ES Cor + LENIN=3; //numero de caracteres de abajo son los octetos + DE[0]=0xC3; + DE[1]=0xB7; + DE[2]=0x1C; + } + + LENOUT= LENIN*8/7; + K=7; + C=0; + DS[0]=DE[0] & 0x7F; // la primera sola + pc.printf("%2X\n",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\n",DS[i]); + + if (K==0) {K=8;C++;} + K--; + } + + for (i=0 ;i<=9;i++) + { + Tel[i] = buffermsg[40+i]; + } + pc.printf("\n"); + pc.printf("%c%c%c%c%c%c%c%c%c%c",Tel[1],Tel[0],Tel[3],Tel[2],Tel[5],Tel[4],Tel[7],Tel[6],Tel[9],Tel[8]); + + } + + if(buffer[10]=='S'&& buffer[11]=='M'){ + for(i=0;i<5;i++) + {buffer1[i]=buffer[2+i];} + pc.printf("buffer1= %s\n\r ",buffer1); + buffer[10]='c'; + buffer[11]='c'; + } + if(buffer1[3]=='T'){pc.printf("AT+CMGL=0\n\r"); + wait(0.5); + GSM.printf("AT+CMGL=0\r\n"); + buffer1[3]='p'; + } + + + if(DS[0]-67 == 0&& DS[1]-111==0) // Cor en octetos es 436f72 + { + pc.printf("\n"); + LedAzul=0; + + DS[0] = '\0'; + DS[1] = '\0'; + + if(gps.sample()) + { + lo =gps.longitude; + la =gps.latitude; + pc.printf("longitud_entera=%f, Latitud entera=%f\n", lo, la); + + wait(0.5); + //LONGITUD/ + sprintf (clo, "%f", lo); + pc.printf ( "\nlongitud = %s\n",clo); + LENINlo=strlen(clo); + + /* for (ilo=0;ilo<LENINlo;ilo++){ + pc.printf("%c,",clo[ilo]); + } */ + + wait(0.5); + //LATITUD/ + sprintf (cla, "%f", la); + pc.printf ( "\nlatitud = %s\n",cla); + LENINla=strlen(cla); + + /*for (ila1=0;ila1<LENINla1;ila1++){ + pc.printf("%c,",cla[ila1]); + }*/ + + + /////////////////////////////////////////////////// + // CONCATENO LONGITUD Y LATITUD + /////////////////////////////////////////////////// + + strcpy(la_lo,cla); + strcat(la_lo,","); + strcat(la_lo,clo); + + pc.printf ( "\nla_lo: %s\n",la_lo); + + LENINla_lo=strlen(la_lo); + + /*for (j=0;j<LENINla_lo;j++){ + pc.printf("%c\n",la_lo[j]); + }*/ + + //////////////////////////////////////////////////////// + // CONCATENO LONGITUD, LATITUD Y EL http//: + //////////////////////////////////////////////////////// + strcpy(http2,http); + strcat(http2,la_lo); + pc.printf ( "%s\n",http2); + pc.printf ( "\n" ); + + + ////////////////////////////////////////////////////////////////////// + // convierto http2 de oct a sep + //////////////////////////////////////////////////////////////////////// + + LENINht=strlen(http2); + pc.printf("%d\n",LENINht); + for (iht=0;iht<LENINht;iht++){ + pc.printf("%2X",http2[iht]); + } + pc.printf ( "\n" ); + + ///////////////////////////////////// + + LENINoct=strlen(http2); + pc.printf("%d\n",LENINoct); + for (ioct=0;ioct<LENINoct;ioct++) + { + DEoct[ioct]=http2[ioct]; + pc.printf("%2X,%d\n",DEoct[ioct],ioct); + } + //////////////////////////////////////// + + Koct=0; + Coct=0; + + for (ioct=0;ioct < LENINoct;ioct++) + { + DSoct[ioct]=DEoct[ioct+Coct]>>Koct | DEoct[ioct+Coct+1]<<(7-Koct); + if (DSoct[ioct]==0x00){ + LENOUToct=ioct; + pc.printf("\n"); + pc.printf("%s",DEoct); + pc.printf("out =%d",LENOUToct); + for (ioct=0;ioct<LENOUToct;ioct++){ + pc.printf("%2X,%d\r\n",DSoct[ioct]&0x000000FF,ioct); + } + } + // pc.printf("LENOUT:%d,LENIN:%d\r\n",LENOUToct,strlen(DEoct)); + + //} + Koct++; + if (Koct==7) + { + Koct=0;Coct++; + } // se chequea que ya se acabaron los bits en un ciclo de conversion. + } + + ///////////////////////////////////////////////////////// + // CONCATENO LOS RELLENOS Y EL NUMERO DEL CELULAR + //////////////////////////////////////////////////////// + + + + + wait(5); + index=56; + GSM.printf("AT+CMGS=%d\r\n",index); + pc.printf("AT+CMGS=%d\r\n",index); + pc.printf("0011000A91"); + GSM.printf("0011000A91"); + for (i=0 ;i<=9;i++) + { + pc.printf("%c",Tel[i]); + GSM.printf("%c",Tel[i]); + } + pc.printf("10000AA"); + GSM.printf("0000AA"); + pc.printf("31"); + GSM.printf("31"); + + for (ioct=0;ioct<=((LENOUToct*7)/8);ioct++) + { + pc.printf("%02X",DSoct[ioct]); + GSM.printf("%02X",DSoct[ioct]); + } + wait(0.5); + GSM.putc((char)0x1A); + GSM.scanf("%s",buf); + GSM.scanf("%s",buf); + GSM.scanf("%s",buf); + //GSM.scanf("%s",buf); + pc.printf(">%s\n",buf); + pc.printf("\n"); + + } // if + + + + } + + if(DS[0]-79==0 && DS[1]-102==0) // Off en octetos es 4F6666 + { + LedAzul=1; //apaga con Lgeverde + LedVerde = 0; + LedRojo=1; + } + + if(DS[0]-71==0 && DS[1]-110==0) // On en octetos es 476E + { + LedAzul=1; //apaga con Lgeverde + LedRojo =0; + LedVerde = 1; + } + } +} +}