Envió de palabra clave desde celular a modem gsm, mensaje PWM seguido del duty cycle configura PWM de kl25z y mensaje GPS retorna ubicación

Dependencies:   GPS mbed

main.cpp

Committer:
SSJprocesa
Date:
2016-11-29
Revision:
0:591a9df7836c

File content as of revision 0:591a9df7836c:

#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
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;

}