procesadores FAC
/
Tarea_6_GPS
Tarea GPS
main.cpp
- Committer:
- procesadores_FAC
- Date:
- 2015-06-19
- Revision:
- 0:b2a6aa7c0c8c
File content as of revision 0:b2a6aa7c0c8c:
//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; } } } }