Juan David Londono Galeano
/
Celular_GPS_2_PWM_copy
listo
Fork of Celular_GPS_2_PWM by
main.cpp
- Committer:
- jdlodonog
- Date:
- 2017-06-07
- Revision:
- 1:ee813acb61a2
- Parent:
- 0:591a9df7836c
File content as of revision 1:ee813acb61a2:
#include "mbed.h" #include "string.h" #include "math.h" #include "GPS.h" //---Configuraciones--- Timer t; Serial pc(USBTX,USBRX); //Configura puerto UART de la Serial GSM(PTE22, PTE23);//Configura la entrada serial del celular DigitalOut ledr(PTE29);//Led indicador DigitalOut myled(LED1); DigitalIn chan(PTC3);//Pulsador para iniciar la configuración del celular GPS gps(PTE0,PTE1);//configuración de los pines de comunicación con el GPS PwmOut PWM(PTA12);// salida pwm AnalogIn Vin(PTB2); // entrada para leer el pwm //---Subrutinas--- int readBuffer(char *buffer,int count);//Subrutina para leer el buffer (en este caso no se usa la recepción de mnsajes) void enviar(int LENIN1,char *DS,char *numero);//subrutina para enviar mensaje void borrar_todo(void);//subrutina para reiniciar las variables void config(void);//configuración del celular //---Variables para paquetes--- char buffer[100],Bkupbuffer[100];//buffer's de almacenación de mensajes char celular[10]; char ENCA[255]={"http://maps.google.com/maps?q="}, VOL[255]={"El voltaje promedio es: ="},Confirmacion[255]={"ESTOY EN LA PISCINA"};//para enviar las coordenadas en google;//para enviar las coordenadas en google char DS[255]; int LENIN=0,LENIN1=0,LENOUT=0;//Tamaño de los datos de la función de conversión de entrada y salida //---Variables para coordenadas--- char coorden[50]={NULL}, aux[50]={NULL}; int aa=1, num=0; int longi_entera=0,lati_entera=0,longi_decimal=0,lati_decimal=0; //---Variables como contadores--- int i=0,count=0,bandera=0,gh=0,negativo=0,K=0,C=0,p=0,j=0,z=0,ro=0,st=0,sol=0; //***************************************************************************************************************************************** //***************************************************************************************************************************************** //es recomendable iniciar siempre oprimiendo el boton de configuración. int main(void) { // a. inicio: ledr=1; borrar_todo();//Ejecuta la rutina que reinicia todas las variables del programaledr=1; GSM.baud(9600);//configura los baudios de la comunicación en 9600 GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART wait(1); pc.printf("conectado al pc \r\n ");//indicador de conexión GSM.printf("AT+CMGD=1\r\n");//Borrar los mensajes del celular while(1) {//a.1 //________________________________________________________________________________________________________________________________________ if(aa==1)//si se preciona, se procede a cofigurar el celular con comandos AT {//a.1.1 se cierra en linea 53 config(); aa=0; myled=1; }//ac.1.1 cierra linea 53, //________________________________________________________________________________________________________________________________________ if (GSM.readable()) //esperar llegada de mensaje del celular { // a.1.2 se cierra en linea 71 readBuffer(buffer,100);//guardar el mensaje en el buffer i=0; pc.printf(buffer);//imprimir el mensaje if(buffer[14]=='1'||buffer[6]=='R'){bandera++;} if(bandera==2)//compara si ya llegó el mensaje al celular y hay que borrarlo {//a.1.2.1 se cierra en linea 62 for(gh=0;gh<=99;gh++)//guardamos el mensaje almacenado en el buffer en una variable auxiliar { //a.1.2.1.1 se cieerra en lina 66 Bkupbuffer[gh]=buffer[gh]; }// ac1.2.1.1 cierra linea 64 pc.printf("\r\n%c\r\n %c\r\n %c\r\n %c\r\n",Bkupbuffer[68],Bkupbuffer[69],Bkupbuffer[70],Bkupbuffer[71]); wait(0.5); GSM.printf("AT+CMGD=1\r\n");//borrar mensaje recibido bandera=0; } // cierra linea 62 } // cierra lina 56 //________________________________________________________________________________________________________________________________________ if((buffer[10]=='S')&& (buffer[11]=='M'))//compara si el mensaje es un mensaje de texto que llegó al celular { // se cierra en linea 83 pc.printf("\r\n Llego mensaje\r\n "); buffer[10]=' ';//limpia los espacios del Buffer buffer[11]=' '; GSM.printf("AT+CMGR=%c\r\n",buffer[14]);//solicitar mesaje al celular //pc.printf("AT+CMGR=%c\r\n",buffer[14]); buffer[14]=' '; i=0; } // cierra linea 75 //________________________________________________________________________________________________________________________________________ if(Bkupbuffer[68]=='4'&& Bkupbuffer[69]=='7'&&Bkupbuffer[70]=='E'&& Bkupbuffer[71]=='8'&& Bkupbuffer[72]=='1'&& Bkupbuffer[73]=='4')//recibió ELE (Extincion Level Event) { buffer[68]=' '; Bkupbuffer[68]=' '; for(st=68;st<=73;st++) {// se cierra en linea 92 Bkupbuffer[st]=' ';//limpia el espacio del buffer para evitar ingresar de nuevo, si no ha llegado otro mensaje con la contraseña }// cierra linea 90 pc.printf(" comparacion de contrasena ok \r\n"); pc.printf("Adquiriendo coordenadas del GPS...\r\n");//Adquiriendo coordenadas del GPS... if(gps.sample())//Si las coordenadas se obtienen correctamente: { pc.printf("coordenadas recibidas "); for(ro=30;ro<=255;ro++) { // se cierra en 101 ENCA[ro]='\0'; } // cierra 99 ro=0; longi_entera=(int)gps.longitude;//Adquiere la parte entera de la longitud del GPS pc.printf("d %f",longi_entera); lati_entera=(int)gps.latitude;//Adquiere la parte entera de la latitud del GPS longi_decimal=abs((gps.longitude-(int)gps.longitude)*1000000);//Adquiere el valor absoluto de la longitud del GPS lati_decimal=abs((gps.latitude-(int)gps.latitude)*1000000);//Adquiere el valor absoluto de la longitud del GPS pc.printf("http://maps.google.com/maps?q=%f,%f\r\n", gps.latitude,gps.longitude);//encabezado que será impreso en el terminal y luego en el mensaje while(longi_decimal>0) {//se cierra en 116 coorden[j]=(longi_decimal%10)+48;//se toma la parte decimal de la longitud y se pasa a ASCII y guarda en el vector coorden longi_decimal=longi_decimal/10;//se divide por 10 para hacer mas iteracines en caso de que el número de elementos seamayor a uno pc.printf("%c",coorden[j]); j++; }// cierra 111 coorden[j]='.';//Se adiciona el punto, para la parte decimal pc.printf("%c",coorden[j]);//se muestra en el terminal la posición j de la longitud j++; if(longi_entera<0)//si la longitud es menor a cero se multiplica por -1 {// se cierra en 121 negativo=1; longi_entera=longi_entera*-1; }//cierra 121 while(longi_entera>0) {// se cierra en 131 coorden[j]=(longi_entera%10)+48;//se toma la parte entera de la longitud y se pasa a ASCII y guarda en el vector coorden longi_entera=longi_entera/10; pc.printf("%c",coorden[j]); j++; }// cierra 126 if(negativo==1)//si negativo es 1 al vector de caracteres se le adiciona un '-' {// se cierra en 137 coorden[j]='-'; pc.printf("%c",coorden[j]); j++; }// cierra 133 negativo=0;//reinicia la variable para hacer lo mismo con la longitud coorden[j]=','; pc.printf("%c",coorden[j]); j++; while(lati_decimal>0) {// se cierra en 148 coorden[j]=(lati_decimal%10)+48;//se toma la parte decimal de la latitud y se pasa a ASCII y guarda en el vector coorden lati_decimal=lati_decimal/10; pc.printf("%c",coorden[j]); j++; }//cierra 143 coorden[j]='.';//adiciona el punto al vector para indicar la parte decimal pc.printf("%c",coorden[j]); j++; if(lati_entera<0) {// se cierrra en 156 negativo=1; lati_entera=lati_entera*-1; }// cierra while(lati_entera>0) { coorden[j]=(lati_entera%10)+48;//se toma la parte entera de la longitud y se pasa a ASCII y guarda en el vector coorden lati_entera=lati_entera/10; pc.printf("%c",coorden[j]); j++; } if(negativo==1) { coorden[j]='-'; pc.printf("%c",coorden[j]); j++; } pc.printf("\r\n"); j--; z=strlen(ENCA);//hace z = al tamaño de la variable ENCA for(i=j;i>=0;i--) { ENCA[z]=coorden[i];//guarda las coordenadas en un vector auxiliar ENCA en orden z++; } pc.printf(ENCA); pc.printf("\r\n"); LENIN1=strlen(ENCA);//toma el tamaño del vector ENCA for (i=0;i < LENIN1;i++)//algoritmo para pasar de septetos a octetos { DS[i]=ENCA[i+C]>>K | ENCA[i+C+1]<<(7-K); if (DS[i]==0x00) {LENOUT=i; goto salir;}//cuando K++; if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. } //-------------------------------------------------------------- salir: for(i=38;i<48;i++)//Se extrae el número del celular { celular[i-38]=Bkupbuffer[i];//toma el número del celular trocado en las posiciones del 38 al 48 almacenadas en el buffer }//de respaldo wait(0.5); enviar(LENIN1,DS,celular);//Ejecuta la rutina de envío de mensaje, con el tamaño del mensaje, las coordenadas en septetos y el número del celular wait(14); goto inicio; }//if GPS else { pc.printf(" CONTRASENA INVALIDA \r\n"); for(i=38;i<48;i++)//Se extrae el número del celular { celular[i-38]=Bkupbuffer[i];//toma el número del celular trocado en las posiciones del 38 al 48 almacenadas en el buffer }//de respaldo wait(0.5); GSM.printf("at+cmgs=%d\r\n",37);//inicio de envío de mensaje pc.printf("enviando mensaje\r\n"); pc.printf("at+cmgs=%d\r\n",37); wait(0.5); GSM.printf("0011000A91"); pc.printf("0011000A91"); for(p=0;p<10;p++) { GSM.printf("%c",celular[p]); pc.printf("%c",celular[p]); } GSM.printf("0000AA1B45B9FC2D6781D26E7AD94D2F83DAE139881E9693CB2E970B");//Relleno + Número de octetos + mensaje pc.printf("0000AA1B45B9FC2D6781D26E7AD94D2F83DAE139881E9693CB2E970B");//Error, intente mas tarde... wait(0.5); GSM.putc(0x1A);//fin de envío de mensaje for(ro=0;ro<=100;ro++)//borrar el buffer y el respaldo para habilitar una nueva recepción { buffer[ro]='\0'; Bkupbuffer[ro]='\0'; } ro=0; wait(0.5); } } // LECTURA DE LA PALABRA DE PWM seguida del duty cicle en % ejemplo PWM43 esto configura la salida del pwm en un 43% if(Bkupbuffer[68]=='D'&& Bkupbuffer[69]=='0'&&Bkupbuffer[70]=='6'&& Bkupbuffer[71]=='B')//recibió PWM y verifica los siguientes dos lugares para parametrizar el pwm { pc.printf("Comprobacion de palabra clave para el pwm ok \n\r"); if (Bkupbuffer[72]=='1' && Bkupbuffer[73]=='3' ) // Verifica si el duty cicle del pwm esta entre 0-9, { // //////////aux[1]==0; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.0; } if (Bkupbuffer[74]=='1') { PWM=0.01; } if (Bkupbuffer[74]=='2') { PWM=0.02; } if (Bkupbuffer[74]=='3') { PWM=0.03; } if (Bkupbuffer[74]=='4') { PWM=0.04; } if (Bkupbuffer[74]=='5') { PWM=0.05; } if (Bkupbuffer[74]=='6') { PWM=0.06; } if (Bkupbuffer[74]=='7') { PWM=0.07; } if (Bkupbuffer[74]=='8') { PWM=0.08; } if (Bkupbuffer[74]=='9') { PWM=0.09; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='3' && Bkupbuffer[73]=='3' ) // verifica si esta entre 10-19 { ////////aux[1]=1; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.0; } if (Bkupbuffer[74]=='1') { PWM=0.11; } if (Bkupbuffer[74]=='2') { PWM=0.12;} if (Bkupbuffer[74]=='3') { PWM=0.13; } if (Bkupbuffer[74]=='4') { PWM=0.14; } if (Bkupbuffer[74]=='5') { PWM=0.15; } if (Bkupbuffer[74]=='6') { PWM=0.16; } if (Bkupbuffer[74]=='7') { PWM=0.17; } if (Bkupbuffer[74]=='8') { PWM=0.18; } if (Bkupbuffer[74]=='9') { PWM=0.19; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='5' && Bkupbuffer[73]=='3' ) // verifica si esta entre 20-19 { ////////aux[1]='2'; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.20;} if (Bkupbuffer[74]=='1') { PWM=0.21;} if (Bkupbuffer[74]=='2') { PWM=0.22;} if (Bkupbuffer[74]=='3') { PWM=0.23;} if (Bkupbuffer[74]=='4') { PWM=0.24;} if (Bkupbuffer[74]=='5') { PWM=0.25;} if (Bkupbuffer[74]=='6') { PWM=0.26;} if (Bkupbuffer[74]=='7') {PWM=0.27;} if (Bkupbuffer[74]=='8') { PWM=0.28;} if (Bkupbuffer[74]=='9') { PWM=0.29; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='7' && Bkupbuffer[73]=='3' ) // verifica si esta entre 30-39 { ////////////////////aux[1]=3; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.30;} if (Bkupbuffer[74]=='1') { PWM=0.31;} if (Bkupbuffer[74]=='2') { PWM=0.32;} if (Bkupbuffer[74]=='3') { PWM=0.33;} if (Bkupbuffer[74]=='4') { PWM=0.34;} if (Bkupbuffer[74]=='5') { PWM=0.35; pc.printf("duty cycle = 35% \n\r"); } if (Bkupbuffer[74]=='6') { PWM=0.36;} if (Bkupbuffer[74]=='7') {PWM=0.37;} if (Bkupbuffer[74]=='8') { PWM=0.38;} if (Bkupbuffer[74]=='9') { PWM=0.39; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='9' && Bkupbuffer[73]=='3' ) // verifica si esta entre 40-19 { ////////aux[1]=4; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.40;} if (Bkupbuffer[74]=='1') { PWM=0.41;} if (Bkupbuffer[74]=='2') { PWM=0.42;} if (Bkupbuffer[74]=='3') { PWM=0.43;} if (Bkupbuffer[74]=='4') { PWM=0.44;} if (Bkupbuffer[74]=='5') { PWM=0.45;} if (Bkupbuffer[74]=='6') { PWM=0.46;} if (Bkupbuffer[74]=='7') {PWM=0.47;} if (Bkupbuffer[74]=='8') { PWM=0.48;} if (Bkupbuffer[74]=='9') { PWM=0.49; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='B' && Bkupbuffer[73]=='3' ) // verifica si esta entre 50-19 { ////////aux[1]=5; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.50;} if (Bkupbuffer[74]=='1') { PWM=0.51;} if (Bkupbuffer[74]=='2') { PWM=0.52;} if (Bkupbuffer[74]=='3') { PWM=0.53;} if (Bkupbuffer[74]=='4') { PWM=0.54;} if (Bkupbuffer[74]=='5') { PWM=0.55;} if (Bkupbuffer[74]=='6') { PWM=0.56;} if (Bkupbuffer[74]=='7') {PWM=0.57;} if (Bkupbuffer[74]=='8') { PWM=0.58;} if (Bkupbuffer[74]=='9') { PWM=0.59; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='D' && Bkupbuffer[73]=='3' ) // verifica si esta entre 60-19 { ////////aux[1]=6; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.60;} if (Bkupbuffer[74]=='1') { PWM=0.61;} if (Bkupbuffer[74]=='2') { PWM=0.62;} if (Bkupbuffer[74]=='3') { PWM=0.63;} if (Bkupbuffer[74]=='4') { PWM=0.64;} if (Bkupbuffer[74]=='5') { PWM=0.65;} if (Bkupbuffer[74]=='6') { PWM=0.66;} if (Bkupbuffer[74]=='7') {PWM=0.67;} if (Bkupbuffer[74]=='8') { PWM=0.68;} if (Bkupbuffer[74]=='9') { PWM=0.69; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='F' && Bkupbuffer[73]=='3' ) // verifica si esta entre 70-19 { ////////aux[1]=7; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.70;} if (Bkupbuffer[74]=='1') { PWM=0.71;} if (Bkupbuffer[74]=='2') { PWM=0.72;} if (Bkupbuffer[74]=='3') { PWM=0.73;} if (Bkupbuffer[74]=='4') { PWM=0.74;} if (Bkupbuffer[74]=='5') { PWM=0.75;} if (Bkupbuffer[74]=='6') { PWM=0.76;} if (Bkupbuffer[74]=='7') {PWM=0.77;} if (Bkupbuffer[74]=='8') { PWM=0.78;} if (Bkupbuffer[74]=='9') { PWM=0.79;} pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='1' && Bkupbuffer[73]=='3' && Bkupbuffer[75]=='7' ) // En este la trama pdu cambia a verificacion de 3 de los datos { ////////aux[1]=8; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.80;} if (Bkupbuffer[74]=='1') { PWM=0.81;} if (Bkupbuffer[74]=='2') { PWM=0.82;} if (Bkupbuffer[74]=='3') { PWM=0.83;} if (Bkupbuffer[74]=='4') { PWM=0.84;} if (Bkupbuffer[74]=='5') { PWM=0.85;} if (Bkupbuffer[74]=='6') { PWM=0.86;} if (Bkupbuffer[74]=='7') {PWM=0.87;} if (Bkupbuffer[74]=='8') { PWM=0.88;} if (Bkupbuffer[74]=='9') { PWM=0.89;} pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } if (Bkupbuffer[72]=='3' && Bkupbuffer[73]=='3' && Bkupbuffer[75]=='7' ) // En este la trama pdu cambia a verificacion de 3 de los datos { ////////aux[1]=9; // acomoda el dato para configurar el pwm Bkupbuffer[74]=Bkupbuffer[74]; PWM.period(0.010); // set PWM period to 10 ms if ( Bkupbuffer[74]=='0') { PWM=0.90;} if (Bkupbuffer[74]=='1') { PWM=0.91;} if (Bkupbuffer[74]=='2') { PWM=0.92;} if (Bkupbuffer[74]=='3') { PWM=0.93;} if (Bkupbuffer[74]=='4') { PWM=0.94;} if (Bkupbuffer[74]=='5') { PWM=0.95;} if (Bkupbuffer[74]=='6') { PWM=0.96;} if (Bkupbuffer[74]=='7') {PWM=0.97;} if (Bkupbuffer[74]=='8') { PWM=0.98;} if (Bkupbuffer[74]=='9') { PWM=0.99; } pc.printf("Voltaje leido del duty cycle = \n\r"); pc.printf(" \n \r",Vin.read());//imprime el valor del voltaje leido en la entrada analogica } { // se cierra en num = Vin*10; //agrando el numero de cero a mil int jj=0; pc.printf("\n spp %d",num); while(num>0) {// se cierra 594 aux[jj]=(num%10)+48;//se toma la parte entera de la longitud y se pasa a ASCII y guarda en el vector coorden num=num/10; if(num<1){// se cierra en 591 break; }// cierra 589 pc.printf("\n %c",aux[jj]); jj++; } // cierra 586 if(num==0){// se cierra en 595 aux[jj]=48; }// cierra en 595 pc.printf("\n sss %c",aux); int z; z=strlen(VOL);//hace z = al tamaño de la variable ENCA for(i=j;i>=0;i--) {//se cierra con 602 VOL[z]=aux[i];//guarda las coordenadas en un vector auxiliar ENCA en orden z++; }// cierra 602 buffer[68]=' '; Bkupbuffer[68]=' '; for(st=68;st<=77;st++) { Bkupbuffer[st]=' ';//limpia el espacio del buffer para evitar ingresar de nuevo, si no ha llegado otro mensaje con la contraseña } //------------------------------------------------------------------- LENIN1=strlen(VOL);//toma el tamaño del vector ENCA for (i=0;i < LENIN1;i++)//algoritmo para pasar de septetos a octetos { // se cierra en 614 DS[i]=VOL[i+C]>>K | VOL[i+C+1]<<(7-K); if (DS[i]==0x00) {LENOUT=i; goto salir;}//cuando K++; if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. } // cierra 609 } // este cierra el ciclo if de comparacion de caracteres de la palabra PWM linea 242 //----------------------------------------------- // } }//while }//main //***************************************************************************************************************************************** //***************************************************************************************************************************************** int readBuffer(char *buffer,int count)//Recepción por comunicación serial con el celular { t.start(); while(1) { while (GSM.readable())//si hay algo que leer en la comunicación { char c = GSM.getc(); if (c == '\r' || c == '\n') c = '$';//remplaza los espacios y saltos de linea por comodín buffer[i++] = c;//almacena la información en una cadena de caracteres "buffer" 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; } //***************************************************************************************************************************************** //***************************************************************************************************************************************** void enviar(int LENIN1,char *DS,char *numero) { GSM.printf("at+cmgs=%d\r\n",13+LENIN1);//Comando para enviar el mensaje, empieza con la longitud total -1 pc.printf("at+cmgs=%d\r\n",13+LENIN1); wait(0.5); GSM.printf("0011000A91");//Envía relleno pc.printf("0011000A91"); for(p=0;p<10;p++)//Envía el número del celular trocado { GSM.printf("%c",celular[p]); pc.printf("%c",celular[p]); } GSM.printf("0000AA");//Envía segundo relleno pc.printf("0000AA"); if(LENIN1<=15)//Si es menor a 15 le adiciona un 0 al comienzo de la dirección { pc.printf("0"); GSM.printf("0"); pc.printf("%X",LENIN1);//Envía la longitud del mensaje GSM.printf("%X",LENIN1); } else { pc.printf("%2X",LENIN1); GSM.printf("%2X",LENIN1); } for (p=0;p < LENIN1;p++)//envía el número de caracteres del mensaje { if(DS[p]<=15)//agrega ceros a cada número menos a 15 en el mensaje { pc.printf("0"); GSM.printf("0"); pc.printf("%X",DS[p]); GSM.printf("%X",DS[p]); } else { pc.printf("%2X",DS[p]&0x000000FF); GSM.printf("%2X",DS[p]&0x000000FF); } } wait(0.5); GSM.putc(0x1A);//culmina el envío del mensaje pc.putc(0x1A); } //***************************************************************************************************************************************** //***************************************************************************************************************************************** void borrar_todo(void)//reinicia todas las varaibles del programa { for(ro=0;ro<=50;ro++) { coorden[ro]='\0'; } ro=0; for(ro=0;ro<=100;ro++) { buffer[ro]='\0'; Bkupbuffer[ro]='\0'; } for(ro=0;ro<=255;ro++) { DS[ro]='\0'; } ro=0; for(ro=0;ro<=10;ro++) { celular[ro]='\0'; } ro=0; LENIN=0;LENIN1=0;LENOUT=0; longi_entera=0;lati_entera=0;longi_decimal=0;lati_decimal=0; i=0;count=0;bandera=0;gh=0;negativo=0;K=0;C=0;p=0;j=0;z=0;ro=0;sol=0;st=0; ledr=0; } //***************************************************************************************************************************************** //***************************************************************************************************************************************** void config(void)//setear la configuración en el celular { GSM.printf("AT\r\n"); pc.printf("AT\r\n"); wait(0.5); GSM.printf("AT+CNMI=1,1\r\n"); pc.printf("AT+CNMI=1,1\r\n"); wait(0.5); GSM.printf("AT+CMGF=0\r\n"); pc.printf("AT+CMGF=0\r\n"); wait(0.5); GSM.printf("ATE\r\n");//eco pc.printf("ATE\r\n"); wait(0.5); GSM.printf("CBST=0,0,1\r\n"); pc.printf("CBST=0,0,1\r\n"); wait(0.5); aa=0; }