Programa para establecer la comunicación con un módem Siemens A56 y un modulo FRDMKL25Z opera como rastreador satelital para Geolocalizacion. Por la UART (1) se conecta el MODEM y por la uart (2) el GPS (se lee en modo NEMEA) Este sistema genera una cadena de geolocalizacion para GoogleMaps con las coordenadas locales Si previamente se envia el mensaje (Coordenadas o coordenadas) El sistema ademas recibe ordenes de tipo mensaje GSM PDU para accionar cargas
Diff: main.cpp
- Revision:
- 1:e2bd083802c0
- Parent:
- 0:b2a6aa7c0c8c
- Child:
- 2:ea6275d1222f
--- a/main.cpp Fri Jun 19 17:45:34 2015 +0000 +++ b/main.cpp Fri Jun 03 01:03:02 2016 +0000 @@ -1,44 +1,35 @@ -//programa para celular siemens que recibe un mensaje de texto t activa una salida en formato +///Tarea de comunicación celular y módulo GPS +//programa para celular siemens que recibe un mensaje de texto y activa una salida en formato //pdu hex #include "mbed.h" #include "DebouncedIn.h" #include "stdio.h" #include "string.h" #include "GPS.h" - - - - +//Salidas digitales Timer t; DigitalOut LedVerde(LED2); DigitalOut LedRojo(LED1); DigitalOut LedAzul(LED3); -/////////////////////////////////////////// +//Declaración de los puertos de la FRDm, modem y GPS 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 -//////////////////////////////// +//Declaración de variables - +//Cadenas de caracteres con las que se va a trabajar short DE[255]; short DS[255]; - char buffer[512]; char buffermsg[100]; char buffer1[13]; char mensaje[100]; +//Variables enteras y caracteres 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; @@ -46,28 +37,24 @@ char r[]=""; char msg[256]; char char1; - int index; +//Adquisición de números de teléfono, emisor - receptor +char Tel[15]; +char cel[15]; +char ojala[15]; // OJO -////// -//longitud y latitud -//// - +//El GPS entregará al celular coordenadas expresadas en latitud y longitud según la ubicación que encuentre +// por tanto se declaran estas variables: float lo,la; -char clo[255], cla[255]; // +char clo[255], cla[255]; //Cadenas a capturar para latitud y longitud int LENINlo,LENINla,LENINla_lo; char la_lo[255]; - +//Cadena de google maps char http2[255]; char http[] = "http://maps.google.com/maps?q="; - - -////////////// -// convercion oct sept -//////////// - +//Conversión octetos septetos int iht,Kht,ChtLENOUTht,LENINht; int ioct,Koct,LENOUToct,LENINoct,Coct; @@ -75,17 +62,13 @@ char DSoct[255]; char buf[100]; -///////////////////////// -//cocanteo rellenos y numero -////////////////////////// +//Relleno de datos - con el fin de que tengan el mismo número de caracteres char relle1[]= "0011000A91"; char relle2[]= "10000AA"; char relle3[]= "68"; -///////////////////////////////////////////// -// funciones -//////////////////////////////////////////// +//Funciones del programa int readBuffer(char *buffer,int count) { @@ -113,21 +96,18 @@ return 0; } -/////////////////////////////////////////////// -//Programass -/////////////////////////////////////////////// +//Programas a ejecutar int main(void) { - +//LED´S en alto LedVerde=1; LedRojo=1; LedAzul=1; - - +//Tasa de baudios GSM.baud(9600); GSM.format(8,Serial::None,1); - +//Lectura del modem GSM.printf("AT\r\n"); wait(0.5); GSM.printf("AT+CNMI=1,1\r\n"); @@ -138,10 +118,9 @@ wait(0.5); GSM.printf("CBST=0,0,1\r\n"); wait(0.5); - - + while(1){ - +//Lectura del buffer if (GSM.readable()) { readBuffer(buffer,100); pc.printf("buffer= %s\n\r ",buffer); @@ -151,7 +130,7 @@ pc.printf("mensaje= %s\n\r ",buffermsg); pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]); buffer[67]='c'; - + //Si llegan estos tres tipos de mensajes... if (buffermsg[69] == '2'){ // PARA CUANDO LA CLAVE ES On LENIN=2; //numero de caracteres de abajo son los octetos DE[0]=0x47; @@ -163,6 +142,7 @@ DE[1]=0xB3; DE[2]=0x19; } +//Recepción de las coordenadas otorgadas por el GPS 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; @@ -188,11 +168,10 @@ { Tel[i] = buffermsg[40+i]; } +//Lectura del número de teléfono 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]); - - } - + 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];} @@ -204,9 +183,7 @@ 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"); @@ -214,37 +191,26 @@ DS[0] = '\0'; DS[1] = '\0'; - +//Entrega los datos de longitud y latitud if(gps.sample()) { lo =gps.longitude; la =gps.latitude; pc.printf("longitud_entera=%f, Latitud entera=%f\n", lo, la); - - wait(0.5); + wait(0.5); + //LONGITUD/ sprintf (clo, "%f", lo); pc.printf ( "\nlongitud = %s\n",clo); LENINlo=strlen(clo); + wait(0.5); - /* 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 - /////////////////////////////////////////////////// + + //Concatenando las cadenas de Latitud y Longitud... strcpy(la_lo,cla); strcat(la_lo,","); @@ -254,22 +220,14 @@ 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//: - //////////////////////////////////////////////////////// + //Ahora se juntan las cadenas obtenidas y se agrega el protocolo de transferencia de hipertextos http strcpy(http2,http); strcat(http2,la_lo); pc.printf ( "%s\n",http2); pc.printf ( "\n" ); - ////////////////////////////////////////////////////////////////////// - // convierto http2 de oct a sep - //////////////////////////////////////////////////////////////////////// + //Conversión de la cadena de http2 de octetos a septetos LENINht=strlen(http2); pc.printf("%d\n",LENINht); @@ -277,8 +235,6 @@ pc.printf("%2X",http2[iht]); } pc.printf ( "\n" ); - - ///////////////////////////////////// LENINoct=strlen(http2); pc.printf("%d\n",LENINoct); @@ -287,8 +243,7 @@ DEoct[ioct]=http2[ioct]; pc.printf("%2X,%d\n",DEoct[ioct],ioct); } - //////////////////////////////////////// - + Koct=0; Coct=0; @@ -304,9 +259,7 @@ 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) { @@ -314,13 +267,7 @@ } // se chequea que ya se acabaron los bits en un ciclo de conversion. } - ///////////////////////////////////////////////////////// - // CONCATENO LOS RELLENOS Y EL NUMERO DEL CELULAR - //////////////////////////////////////////////////////// - - - - + //Concatenación de los datos relleno y el número de celular wait(5); index=56; GSM.printf("AT+CMGS=%d\r\n",index); @@ -351,25 +298,24 @@ pc.printf(">%s\n",buf); pc.printf("\n"); - } // if - - - + } } - +//Si el mensaje recibido fue OFF... if(DS[0]-79==0 && DS[1]-102==0) // Off en octetos es 4F6666 { - LedAzul=1; //apaga con Lgeverde + //Secuencia de apagado + LedAzul=1; LedVerde = 0; LedRojo=1; } - +//Si el mensaje recibido fue ON... if(DS[0]-71==0 && DS[1]-110==0) // On en octetos es 476E { - LedAzul=1; //apaga con Lgeverde + //Secuencia de apagado + LedAzul=1; LedRojo =0; LedVerde = 1; } } } -} +} \ No newline at end of file