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
Revision 0:2baec676c5bf, committed 2016-11-30
- 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
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