Programa para enviar mensaje GPS solicitando coordenadas, y mensaje PWM para parametrizar a distancia un PWM en klz25 utilizando modem GSM del celular siemens a56i y el satgem como simulador de GPS

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
jdlodonog
Date:
Wed Nov 30 03:02:42 2016 +0000
Commit message:
Envi? palabra por mensaje de text0 GSM y retorna coordenadas de google maps, envi? de PWM y parametros de salida PWM en kl25z

Changed in this revision

GPS.cpp Show annotated file Show diff for this revision Revisions of this file
GPS.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 2baec676c5bf GPS.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GPS.cpp	Wed Nov 30 03:02:42 2016 +0000
@@ -0,0 +1,86 @@
+
+/* mbed EM-406 GPS Module Library
+ * Copyright (c) 2008-2010, sford
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+#include "GPS.h"
+ 
+GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) {
+    _gps.baud(9600);    
+    longitude = 0.0;
+    latitude = 0.0;        
+}
+ 
+int GPS::sample() {
+    float time;
+    char ns, ew;
+    int lock;
+ 
+    while(1) {        
+        getline();
+      //$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
+        // Check if it is a GPGGA msg (matches both locked and non-locked msg)
+        if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d", &time, &latitude, &ns, &longitude, &ew, &lock) >= 1) { 
+            if(!lock) {   //si lock es 1  hay lecturas ok
+                longitude = 0.0;
+                latitude = 0.0;        
+                return 0;
+            } 
+                else {
+                if(ns == 'S') {    latitude  *= -1.0; }
+                if(ew == 'W') {    longitude *= -1.0; }
+                latitude = (latitude / 100.0f);
+                //float minutes = latitude - (degrees * 100.0f);
+                //latitude = degrees + minutes / 60.0f;    
+                longitude = (longitude / 100.0f);
+                //minutes = longitude - (degrees * 100.0f);
+                //longitude = degrees + minutes / 60.0f;
+                
+                return 1;
+            }
+        }
+    }
+}
+ 
+/*
+float GPS::trunc(float v) {
+    if(v < 0.0) {
+        v*= -1.0;
+        v = floor(v);
+        v*=-1.0;
+    } else {
+        v = floor(v);
+    }
+    return v;
+}
+*/
+void GPS::getline() {
+    while(_gps.getc() != '$');    // wait for the start of a line
+    for(int i=0; i<512; i++) {
+        msg[i] = _gps.getc();
+        if(msg[i] == '\r') {
+            msg[i] = 0;
+            return;
+        }
+    }
+    error("Overflowed message limit");
+}
+ 
\ No newline at end of file
diff -r 000000000000 -r 2baec676c5bf GPS.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GPS.h	Wed Nov 30 03:02:42 2016 +0000
@@ -0,0 +1,58 @@
+/* mbed EM-406 GPS Module Library
+ * Copyright (c) 2008-2010, sford
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+#include "mbed.h"
+ 
+#ifndef MBED_GPS_H
+#define MBED_GPS_H
+ 
+/**  A GPS interface for reading from a Globalsat EM-406 GPS Module */
+class GPS {
+public:
+ 
+    /** Create the GPS interface, connected to the specified serial port
+     */    
+    GPS(PinName tx, PinName rx);
+    
+    /** Sample the incoming GPS data, returning whether there is a lock
+     * 
+     * @return 1 if there was a lock when the sample was taken (and therefore .longitude and .latitude are valid), else 0
+     */
+    int sample();
+    
+    /** The longitude (call sample() to set) */
+    float longitude;
+ 
+    /** The latitude (call sample() to set) */
+    float latitude;
+    
+private:
+    float trunc(float v);
+    void getline();
+    
+    Serial _gps;
+    char msg[256];
+ 
+};
+ 
+#endif
+ 
\ No newline at end of file
diff -r 000000000000 -r 2baec676c5bf main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 30 03:02:42 2016 +0000
@@ -0,0 +1,760 @@
+#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%           
+         //Compara los caracteres que llegaron en la trama para identificar en que parte viene codificada y cuales son los cambios que se dieron en la trama pdu utilizando el progrma de clase para conversion de palabras a ascci
+           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;
+
+}
\ No newline at end of file
diff -r 000000000000 -r 2baec676c5bf mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Nov 30 03:02:42 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/d75b3fe1f5cb
\ No newline at end of file