KL25Z Send COR or VOL , smms Back Coord. or Ang. read data.

Dependencies:   GPS_G mbed

Fork of smms by deiwid ricaurte

Committer:
kolive360
Date:
Wed Nov 30 12:50:33 2016 +0000
Revision:
1:b447e3b8fc27
Parent:
0:c55614493217
KL25Z, COR: GPS + VOL: ANG Read. Send SMMS back DATA

Who changed what in which revision?

UserRevisionLine numberNew contents of line
deiwidricaurte 0:c55614493217 1 #include "mbed.h"
deiwidricaurte 0:c55614493217 2 #include "string.h"
deiwidricaurte 0:c55614493217 3 #include "math.h"
deiwidricaurte 0:c55614493217 4 #include "GPS.h"
deiwidricaurte 0:c55614493217 5 //---Configuraciones---
deiwidricaurte 0:c55614493217 6 Timer t;
deiwidricaurte 0:c55614493217 7 AnalogIn input(PTB3);
deiwidricaurte 0:c55614493217 8 DigitalOut LedVerde(LED2);
deiwidricaurte 0:c55614493217 9 DigitalOut LedRojo(LED1);
deiwidricaurte 0:c55614493217 10 DigitalOut LedAzul(LED3);
deiwidricaurte 0:c55614493217 11 Serial pc(USBTX,USBRX); //Configura puerto UART de la
deiwidricaurte 0:c55614493217 12 Serial GSM(PTE0,PTE1);//Configura la entrada serial del celular
deiwidricaurte 0:c55614493217 13 DigitalOut ledr(PTE29);//Led indicador
deiwidricaurte 0:c55614493217 14 DigitalIn chan(PTC3);//Pulsador para iniciar la configuración del celular
deiwidricaurte 0:c55614493217 15 GPS gps(PTE22,PTE23);//configuración de los pines de comunicación con el GPS purto com del pc q envia las coordenadas
deiwidricaurte 0:c55614493217 16 //---Subrutinas---
deiwidricaurte 0:c55614493217 17 int readBuffer(char *buffer,int count);//Subrutina para leer el buffer
deiwidricaurte 0:c55614493217 18 void enviar(int LENIN1,char *DS,char *numero);//subrutina para enviar mensaje
deiwidricaurte 0:c55614493217 19 void borrar_todo(void);//subrutina para reiniciar las variables
deiwidricaurte 0:c55614493217 20 void config(void);//configuración del celular
deiwidricaurte 0:c55614493217 21 //---Variables para paquetes---
deiwidricaurte 0:c55614493217 22 char buffer[100],Bkupbuffer[100];//buffer's de almacenación de mensajes
deiwidricaurte 0:c55614493217 23 char celular[10];
kolive360 1:b447e3b8fc27 24 char ENCA[255]={"estamos aqu http://maps.google.com/maps?q="};//para enviar las coordenadas en google encabezado despues del encabezado
deiwidricaurte 0:c55614493217 25 char ENCA2[255]={"el voltaje es: "};//para enviar el voltaje
deiwidricaurte 0:c55614493217 26 char DS[255];
deiwidricaurte 0:c55614493217 27 char DS2[255];
deiwidricaurte 0:c55614493217 28 int LENIN=0,LENIN1=0,LENOUT=0,LENIN12=0,LENOUT2=0;//Tamaño de los datos de la función de conversión de entrada y salida
deiwidricaurte 0:c55614493217 29 //---Variables para coordenadas---
deiwidricaurte 0:c55614493217 30 char coorden[50]={NULL};
deiwidricaurte 0:c55614493217 31 char aux[50]={NULL};
deiwidricaurte 0:c55614493217 32 int num;
deiwidricaurte 0:c55614493217 33 int longi_entera=0,lati_entera=0,longi_decimal=0,lati_decimal=0;
deiwidricaurte 0:c55614493217 34 //---Variables como contadores---
deiwidricaurte 0:c55614493217 35 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,aa=0;
kolive360 1:b447e3b8fc27 36 float num1 = 0.0;
kolive360 1:b447e3b8fc27 37 int jj=0;
deiwidricaurte 0:c55614493217 38 //*****************************************************************************************************************************************
deiwidricaurte 0:c55614493217 39 //*****************************************************************************************************************************************
deiwidricaurte 0:c55614493217 40 //es recomendable iniciar siempre oprimiendo el boton de configuración.
kolive360 1:b447e3b8fc27 41 //
kolive360 1:b447e3b8fc27 42 int readBuffer(char *buffer,int count)//Recepción por comunicación serial con el celular
kolive360 1:b447e3b8fc27 43 {
kolive360 1:b447e3b8fc27 44 t.start();
kolive360 1:b447e3b8fc27 45 while(1)
kolive360 1:b447e3b8fc27 46 {
kolive360 1:b447e3b8fc27 47 while (GSM.readable())//si hay algo que leer en la comunicación
kolive360 1:b447e3b8fc27 48 {
kolive360 1:b447e3b8fc27 49 char c = GSM.getc();
kolive360 1:b447e3b8fc27 50 if (c == '\r' || c == '\n') c = '$';//remplaza los espacios y saltos de linea por comodín
kolive360 1:b447e3b8fc27 51 buffer[i++] = c;//almacena la información en una cadena de caracteres "buffer"
kolive360 1:b447e3b8fc27 52 if(i > count)break;
kolive360 1:b447e3b8fc27 53 }
kolive360 1:b447e3b8fc27 54 if(i > count)break;
kolive360 1:b447e3b8fc27 55 if(t.read() > 3)
kolive360 1:b447e3b8fc27 56 {
kolive360 1:b447e3b8fc27 57 t.stop();
kolive360 1:b447e3b8fc27 58 t.reset();
kolive360 1:b447e3b8fc27 59 break;
kolive360 1:b447e3b8fc27 60 }
kolive360 1:b447e3b8fc27 61 }
kolive360 1:b447e3b8fc27 62 wait(0.5);
kolive360 1:b447e3b8fc27 63 while(GSM.readable())
kolive360 1:b447e3b8fc27 64 {
kolive360 1:b447e3b8fc27 65 char c = GSM.getc();
kolive360 1:b447e3b8fc27 66 }
kolive360 1:b447e3b8fc27 67 return 0;
kolive360 1:b447e3b8fc27 68 }
kolive360 1:b447e3b8fc27 69 //*****************************************************************************************************************************************
kolive360 1:b447e3b8fc27 70 //*****************************************************************************************************************************************
kolive360 1:b447e3b8fc27 71 void enviar(int LENIN1,char *DS,char *numero)
kolive360 1:b447e3b8fc27 72 {
kolive360 1:b447e3b8fc27 73 GSM.printf("at+cmgs=%d\r\n",13+LENIN1);//Comando para enviar el mensaje, empieza con la longitud total -1
kolive360 1:b447e3b8fc27 74 pc.printf("at+cmgs=%d\r\n",13+LENIN1);
kolive360 1:b447e3b8fc27 75 wait(0.5);
kolive360 1:b447e3b8fc27 76 GSM.printf("0011000A91");//Envía relleno
kolive360 1:b447e3b8fc27 77 pc.printf("0011000A91");
kolive360 1:b447e3b8fc27 78 for(p=0;p<10;p++)//Envía el número del celular trocado
kolive360 1:b447e3b8fc27 79 {
kolive360 1:b447e3b8fc27 80 GSM.printf("%c",celular[p]);
kolive360 1:b447e3b8fc27 81 pc.printf("%c",celular[p]);
kolive360 1:b447e3b8fc27 82 }
kolive360 1:b447e3b8fc27 83 GSM.printf("0000AA");//Envía segundo relleno
kolive360 1:b447e3b8fc27 84 pc.printf("0000AA");
kolive360 1:b447e3b8fc27 85 if(LENIN1<=15)//Si es menor a 15 le adiciona un 0 al comienzo de la dirección
kolive360 1:b447e3b8fc27 86 {
kolive360 1:b447e3b8fc27 87 pc.printf("0");
kolive360 1:b447e3b8fc27 88 GSM.printf("0");
kolive360 1:b447e3b8fc27 89 pc.printf("%X",LENIN1);//Envía la longitud del mensaje
kolive360 1:b447e3b8fc27 90 GSM.printf("%X",LENIN1);
kolive360 1:b447e3b8fc27 91 }
kolive360 1:b447e3b8fc27 92 else
kolive360 1:b447e3b8fc27 93 {
kolive360 1:b447e3b8fc27 94 pc.printf("%2X",LENIN1);
kolive360 1:b447e3b8fc27 95 GSM.printf("%2X",LENIN1);
kolive360 1:b447e3b8fc27 96 }
kolive360 1:b447e3b8fc27 97 for (p=0;p < LENIN1;p++)//envía el número de caracteres del mensaje
kolive360 1:b447e3b8fc27 98 {
kolive360 1:b447e3b8fc27 99 if(DS[p]<=15)//agrega ceros a cada número menos a 15 en el mensaje
kolive360 1:b447e3b8fc27 100 {
kolive360 1:b447e3b8fc27 101 pc.printf("0");
kolive360 1:b447e3b8fc27 102 GSM.printf("0");
kolive360 1:b447e3b8fc27 103 pc.printf("%X",DS[p]);
kolive360 1:b447e3b8fc27 104 GSM.printf("%X",DS[p]);
kolive360 1:b447e3b8fc27 105 }
kolive360 1:b447e3b8fc27 106 else
kolive360 1:b447e3b8fc27 107 {
kolive360 1:b447e3b8fc27 108 pc.printf("%2X",DS[p]&0x000000FF);
kolive360 1:b447e3b8fc27 109 GSM.printf("%2X",DS[p]&0x000000FF);
kolive360 1:b447e3b8fc27 110 }
kolive360 1:b447e3b8fc27 111 }
kolive360 1:b447e3b8fc27 112 wait(0.5);
kolive360 1:b447e3b8fc27 113 GSM.putc(0x1A);//culmina el envío del mensaje
kolive360 1:b447e3b8fc27 114 pc.putc(0x1A);
kolive360 1:b447e3b8fc27 115 }
kolive360 1:b447e3b8fc27 116 //*****************************************************************************************************************************************
kolive360 1:b447e3b8fc27 117 //*****************************************************************************************************************************************
kolive360 1:b447e3b8fc27 118 void borrar_todo(void)//reinicia todas las varaibles del programa
kolive360 1:b447e3b8fc27 119 {
kolive360 1:b447e3b8fc27 120 for(ro=0;ro<=50;ro++)
kolive360 1:b447e3b8fc27 121 {
kolive360 1:b447e3b8fc27 122 coorden[ro]='\0';
kolive360 1:b447e3b8fc27 123 }
kolive360 1:b447e3b8fc27 124 ro=0;
kolive360 1:b447e3b8fc27 125 for(ro=0;ro<=100;ro++)
kolive360 1:b447e3b8fc27 126 {
kolive360 1:b447e3b8fc27 127 buffer[ro]='\0';
kolive360 1:b447e3b8fc27 128 Bkupbuffer[ro]='\0';
kolive360 1:b447e3b8fc27 129 }
kolive360 1:b447e3b8fc27 130 for(ro=0;ro<=255;ro++)
kolive360 1:b447e3b8fc27 131 {
kolive360 1:b447e3b8fc27 132 DS[ro]='\0';
kolive360 1:b447e3b8fc27 133 }
kolive360 1:b447e3b8fc27 134 ro=0;
kolive360 1:b447e3b8fc27 135 for(ro=0;ro<=10;ro++)
kolive360 1:b447e3b8fc27 136 {
kolive360 1:b447e3b8fc27 137 celular[ro]='\0';
kolive360 1:b447e3b8fc27 138 }
kolive360 1:b447e3b8fc27 139 ro=0;
kolive360 1:b447e3b8fc27 140 LENIN=0;LENIN1=0;LENOUT=0;
kolive360 1:b447e3b8fc27 141 longi_entera=0;lati_entera=0;longi_decimal=0;lati_decimal=0;
kolive360 1:b447e3b8fc27 142 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;
kolive360 1:b447e3b8fc27 143 ledr=0;
kolive360 1:b447e3b8fc27 144 }
kolive360 1:b447e3b8fc27 145 //*****************************************************************************************************************************************
kolive360 1:b447e3b8fc27 146 //*****************************************************************************************************************************************
kolive360 1:b447e3b8fc27 147 void config(void)//setear la configuración en el celular
kolive360 1:b447e3b8fc27 148 {
kolive360 1:b447e3b8fc27 149 GSM.printf("AT\r\n");
kolive360 1:b447e3b8fc27 150 pc.printf("AT\r\n");
kolive360 1:b447e3b8fc27 151 wait(0.5);
kolive360 1:b447e3b8fc27 152 GSM.printf("AT+CNMI=1,1\r\n");
kolive360 1:b447e3b8fc27 153 pc.printf("AT+CNMI=1,1\r\n");
kolive360 1:b447e3b8fc27 154 wait(0.5);
kolive360 1:b447e3b8fc27 155 GSM.printf("AT+CMGF=0\r\n");
kolive360 1:b447e3b8fc27 156 pc.printf("AT+CMGF=0\r\n");
kolive360 1:b447e3b8fc27 157 wait(0.5);
kolive360 1:b447e3b8fc27 158 GSM.printf("ATE\r\n");//eco
kolive360 1:b447e3b8fc27 159 pc.printf("ATE\r\n");
kolive360 1:b447e3b8fc27 160 wait(0.5);
kolive360 1:b447e3b8fc27 161 GSM.printf("CBST=0,0,1\r\n");
kolive360 1:b447e3b8fc27 162 pc.printf("CBST=0,0,1\r\n");
kolive360 1:b447e3b8fc27 163 wait(0.5);
kolive360 1:b447e3b8fc27 164 LedVerde=0;
kolive360 1:b447e3b8fc27 165 LedRojo=0;
kolive360 1:b447e3b8fc27 166 LedAzul=1;
kolive360 1:b447e3b8fc27 167
kolive360 1:b447e3b8fc27 168 }
kolive360 1:b447e3b8fc27 169 //fun
deiwidricaurte 0:c55614493217 170 int main(void)
deiwidricaurte 0:c55614493217 171 {
deiwidricaurte 0:c55614493217 172 inicio:
deiwidricaurte 0:c55614493217 173 LedVerde=0;
deiwidricaurte 0:c55614493217 174 LedRojo=1;
deiwidricaurte 0:c55614493217 175 LedAzul=0;
deiwidricaurte 0:c55614493217 176 borrar_todo();//Ejecuta la rutina que reinicia todas las variables del programaledr=1;
deiwidricaurte 0:c55614493217 177 GSM.baud(9600);//configura los baudios de la comunicación en 9600
deiwidricaurte 0:c55614493217 178 GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART
deiwidricaurte 0:c55614493217 179 wait(1);
deiwidricaurte 0:c55614493217 180 pc.printf("conectado al pc \r\n ");//indicador de conexión
deiwidricaurte 0:c55614493217 181 GSM.printf("AT+CMGD=1\r\n");//Borrar los mensajes del celular
deiwidricaurte 0:c55614493217 182 while(1)
deiwidricaurte 0:c55614493217 183 {
deiwidricaurte 0:c55614493217 184 //________________________________________________________________________________________________________________________________________
deiwidricaurte 0:c55614493217 185 if(aa==0)//si se preciona, se procede a cofigurar el celular con comandos AT
deiwidricaurte 0:c55614493217 186 {
deiwidricaurte 0:c55614493217 187 config();
deiwidricaurte 0:c55614493217 188 aa=1;
deiwidricaurte 0:c55614493217 189 }
deiwidricaurte 0:c55614493217 190 //________________________________________________________________________________________________________________________________________
deiwidricaurte 0:c55614493217 191 if (GSM.readable()) //esperar llegada de mensaje del celular
deiwidricaurte 0:c55614493217 192 {
deiwidricaurte 0:c55614493217 193 readBuffer(buffer,100);//guardar el mensaje en el buffer
deiwidricaurte 0:c55614493217 194 i=0;
deiwidricaurte 0:c55614493217 195 pc.printf(buffer);//imprimir el mensaje
deiwidricaurte 0:c55614493217 196 if(buffer[14]=='1'||buffer[6]=='R'){bandera++;}
deiwidricaurte 0:c55614493217 197 if(bandera==2)//compara si ya llegó el mensaje al celular y hay que borrarlo
deiwidricaurte 0:c55614493217 198 {
deiwidricaurte 0:c55614493217 199 for(gh=0;gh<=99;gh++)//guardamos el mensaje almacenado en el buffer en una variable auxiliar
deiwidricaurte 0:c55614493217 200 {
deiwidricaurte 0:c55614493217 201 Bkupbuffer[gh]=buffer[gh];
deiwidricaurte 0:c55614493217 202 }
deiwidricaurte 0:c55614493217 203 //pc.printf("\r\n%c\r\n %c\r\n %c\r\n %c\r\n",Bkupbuffer[68],Bkupbuffer[69],Bkupbuffer[70],Bkupbuffer[71]);
deiwidricaurte 0:c55614493217 204 wait(0.5);
deiwidricaurte 0:c55614493217 205 GSM.printf("AT+CMGD=1\r\n");//borrar mensaje recibido
deiwidricaurte 0:c55614493217 206 bandera=0;
deiwidricaurte 0:c55614493217 207 }
deiwidricaurte 0:c55614493217 208 }
deiwidricaurte 0:c55614493217 209 //________________________________________________________________________________________________________________________________________
deiwidricaurte 0:c55614493217 210 if((buffer[10]=='S')&& (buffer[11]=='M'))//compara si el mensaje es un mensaje de texto que llegó al celular
deiwidricaurte 0:c55614493217 211 {
deiwidricaurte 0:c55614493217 212 pc.printf("\r\n Llego mensaje\r\n ");
deiwidricaurte 0:c55614493217 213 buffer[10]=' ';//limpia los espacios del Buffer
deiwidricaurte 0:c55614493217 214 buffer[11]=' ';
deiwidricaurte 0:c55614493217 215 GSM.printf("AT+CMGR=%c\r\n",buffer[14]);//solicitar mesaje al celular
deiwidricaurte 0:c55614493217 216 //pc.printf("AT+CMGR=%c\r\n",buffer[14]);
deiwidricaurte 0:c55614493217 217 buffer[14]=' ';
deiwidricaurte 0:c55614493217 218 i=0;
deiwidricaurte 0:c55614493217 219 }
deiwidricaurte 0:c55614493217 220 //________________________________________________________________________________________________________________________________________
deiwidricaurte 0:c55614493217 221 if(Bkupbuffer[68]=='C'&& Bkupbuffer[69]=='3'&&Bkupbuffer[70]=='A'&& Bkupbuffer[71]=='7'&& Bkupbuffer[72]=='1'&& Bkupbuffer[73]=='4')//recibió ELE (Extincion Level Event)
deiwidricaurte 0:c55614493217 222 {
deiwidricaurte 0:c55614493217 223 buffer[68]=' ';
deiwidricaurte 0:c55614493217 224 Bkupbuffer[68]=' ';
deiwidricaurte 0:c55614493217 225 for(st=68;st<=73;st++)
deiwidricaurte 0:c55614493217 226 {
deiwidricaurte 0:c55614493217 227 Bkupbuffer[st]=' ';//limpia el espacio del buffer para evitar ingresar de nuevo, si no ha llegado otro mensaje con la contraseña
deiwidricaurte 0:c55614493217 228 }
deiwidricaurte 0:c55614493217 229
deiwidricaurte 0:c55614493217 230 pc.printf("Adquiriendo coordenadas del GPS...\r\n");//Adquiriendo coordenadas del GPS...
deiwidricaurte 0:c55614493217 231 if(gps.sample())//Si las coordenadas se obtienen correctamente:
deiwidricaurte 0:c55614493217 232 {
deiwidricaurte 0:c55614493217 233 for(ro=30;ro<=255;ro++)
deiwidricaurte 0:c55614493217 234 {
deiwidricaurte 0:c55614493217 235 ENCA[ro]='\0';
deiwidricaurte 0:c55614493217 236 }
deiwidricaurte 0:c55614493217 237 ro=0;
deiwidricaurte 0:c55614493217 238
deiwidricaurte 0:c55614493217 239 longi_entera=(int)gps.longitude;//Adquiere la parte entera de la longitud del GPS
deiwidricaurte 0:c55614493217 240 lati_entera=(int)gps.latitude;//Adquiere la parte entera de la latitud del GPS
deiwidricaurte 0:c55614493217 241 longi_decimal=abs((gps.longitude-(int)gps.longitude)*1000000);//Adquiere el valor absoluto de la longitud del GPS
deiwidricaurte 0:c55614493217 242 lati_decimal=abs((gps.latitude-(int)gps.latitude)*1000000);//Adquiere el valor absoluto de la longitud del GPS
deiwidricaurte 0:c55614493217 243 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
deiwidricaurte 0:c55614493217 244 while(longi_decimal>0)
deiwidricaurte 0:c55614493217 245 {
deiwidricaurte 0:c55614493217 246 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
deiwidricaurte 0:c55614493217 247 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
deiwidricaurte 0:c55614493217 248 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 249 j++;
deiwidricaurte 0:c55614493217 250 }
deiwidricaurte 0:c55614493217 251 coorden[j]='.';//Se adiciona el punto, para la parte decimal
deiwidricaurte 0:c55614493217 252 pc.printf("%c",coorden[j]);//se muestra en el terminal la posición j de la longitud
deiwidricaurte 0:c55614493217 253 j++;
deiwidricaurte 0:c55614493217 254 if(longi_entera<0)//si la longitud es menor a cero se multiplica por -1
deiwidricaurte 0:c55614493217 255 {
deiwidricaurte 0:c55614493217 256 negativo=1;
deiwidricaurte 0:c55614493217 257 longi_entera=longi_entera*-1;
deiwidricaurte 0:c55614493217 258 }
deiwidricaurte 0:c55614493217 259 while(longi_entera>0)
deiwidricaurte 0:c55614493217 260 {
deiwidricaurte 0:c55614493217 261 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
deiwidricaurte 0:c55614493217 262 longi_entera=longi_entera/10;
deiwidricaurte 0:c55614493217 263 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 264 j++;
deiwidricaurte 0:c55614493217 265 }
deiwidricaurte 0:c55614493217 266 if(negativo==1)//si negativo es 1 al vector de caracteres se le adiciona un '-'
deiwidricaurte 0:c55614493217 267 {
deiwidricaurte 0:c55614493217 268 coorden[j]='-';
deiwidricaurte 0:c55614493217 269 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 270 j++;
deiwidricaurte 0:c55614493217 271 }
deiwidricaurte 0:c55614493217 272 negativo=0;//reinicia la variable para hacer lo mismo con la longitud
deiwidricaurte 0:c55614493217 273 coorden[j]=',';
deiwidricaurte 0:c55614493217 274 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 275 j++;
deiwidricaurte 0:c55614493217 276 while(lati_decimal>0)
deiwidricaurte 0:c55614493217 277 {
deiwidricaurte 0:c55614493217 278 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
deiwidricaurte 0:c55614493217 279 lati_decimal=lati_decimal/10;
deiwidricaurte 0:c55614493217 280 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 281 j++;
deiwidricaurte 0:c55614493217 282 }
deiwidricaurte 0:c55614493217 283 coorden[j]='.';//adiciona el punto al vector para indicar la parte decimal
deiwidricaurte 0:c55614493217 284 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 285 j++;
deiwidricaurte 0:c55614493217 286 if(lati_entera<0)
deiwidricaurte 0:c55614493217 287 {
deiwidricaurte 0:c55614493217 288 negativo=1;
deiwidricaurte 0:c55614493217 289 lati_entera=lati_entera*-1;
deiwidricaurte 0:c55614493217 290 }
deiwidricaurte 0:c55614493217 291 while(lati_entera>0)
deiwidricaurte 0:c55614493217 292 {
deiwidricaurte 0:c55614493217 293 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
deiwidricaurte 0:c55614493217 294 lati_entera=lati_entera/10;
deiwidricaurte 0:c55614493217 295 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 296 j++;
deiwidricaurte 0:c55614493217 297 }
deiwidricaurte 0:c55614493217 298 if(negativo==1)
deiwidricaurte 0:c55614493217 299 {
deiwidricaurte 0:c55614493217 300 coorden[j]='-';
deiwidricaurte 0:c55614493217 301 pc.printf("%c",coorden[j]);
deiwidricaurte 0:c55614493217 302 j++;
deiwidricaurte 0:c55614493217 303 }
deiwidricaurte 0:c55614493217 304 pc.printf("\r\n");
deiwidricaurte 0:c55614493217 305 j--;
deiwidricaurte 0:c55614493217 306 z=strlen(ENCA);//hace z = al tamaño de la variable ENCA
deiwidricaurte 0:c55614493217 307 for(i=j;i>=0;i--)
deiwidricaurte 0:c55614493217 308 {
deiwidricaurte 0:c55614493217 309 ENCA[z]=coorden[i];//guarda las coordenadas en un vector auxiliar ENCA en orden
deiwidricaurte 0:c55614493217 310 z++;
deiwidricaurte 0:c55614493217 311 }
deiwidricaurte 0:c55614493217 312 pc.printf(ENCA);
deiwidricaurte 0:c55614493217 313 pc.printf("\r\n");
deiwidricaurte 0:c55614493217 314 LENIN1=strlen(ENCA);//toma el tamaño del vector ENCA
deiwidricaurte 0:c55614493217 315 for (i=0;i < LENIN1;i++)//algoritmo para pasar de septetos a octetos
deiwidricaurte 0:c55614493217 316 {
deiwidricaurte 0:c55614493217 317 DS[i]=ENCA[i+C]>>K | ENCA[i+C+1]<<(7-K);
deiwidricaurte 0:c55614493217 318 if (DS[i]==0x00) {LENOUT=i; goto salir;}//cuando
deiwidricaurte 0:c55614493217 319 K++;
deiwidricaurte 0:c55614493217 320 if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
deiwidricaurte 0:c55614493217 321 }
deiwidricaurte 0:c55614493217 322 //--------------------------------------------------------------
deiwidricaurte 0:c55614493217 323 salir: for(i=38;i<48;i++)//Se extrae el número del celular
deiwidricaurte 0:c55614493217 324 {
deiwidricaurte 0:c55614493217 325 celular[i-38]=Bkupbuffer[i];//toma el número del celular trocado en las posiciones del 38 al 48 almacenadas en el buffer
deiwidricaurte 0:c55614493217 326 }//de respaldo
deiwidricaurte 0:c55614493217 327 wait(0.5);
deiwidricaurte 0:c55614493217 328 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
deiwidricaurte 0:c55614493217 329 wait(14);
deiwidricaurte 0:c55614493217 330 goto inicio;
deiwidricaurte 0:c55614493217 331 }//if GPS
deiwidricaurte 0:c55614493217 332 else
deiwidricaurte 0:c55614493217 333 {
deiwidricaurte 0:c55614493217 334 for(i=38;i<48;i++)//Se extrae el número del celular
deiwidricaurte 0:c55614493217 335 {
deiwidricaurte 0:c55614493217 336 celular[i-38]=Bkupbuffer[i];//toma el número del celular trocado en las posiciones del 38 al 48 almacenadas en el buffer
deiwidricaurte 0:c55614493217 337 }//de respaldo
deiwidricaurte 0:c55614493217 338 wait(0.5);
deiwidricaurte 0:c55614493217 339 GSM.printf("at+cmgs=%d\r\n",37);//inicio de envío de mensaje
deiwidricaurte 0:c55614493217 340 pc.printf("at+cmgs=%d\r\n",37);
deiwidricaurte 0:c55614493217 341 wait(0.5);
deiwidricaurte 0:c55614493217 342 GSM.printf("0011000A91");
deiwidricaurte 0:c55614493217 343 pc.printf("0011000A91");
deiwidricaurte 0:c55614493217 344 for(p=0;p<10;p++)
deiwidricaurte 0:c55614493217 345 {
deiwidricaurte 0:c55614493217 346 GSM.printf("%c",celular[p]);
deiwidricaurte 0:c55614493217 347 pc.printf("%c",celular[p]);
deiwidricaurte 0:c55614493217 348 }
deiwidricaurte 0:c55614493217 349
deiwidricaurte 0:c55614493217 350 GSM.printf("0000AA1B45B9FC2D6781D26E7AD94D2F83DAE139881E9693CB2E970B");//Relleno + Número de octetos + mensaje
deiwidricaurte 0:c55614493217 351 pc.printf("0000AA1B45B9FC2D6781D26E7AD94D2F83DAE139881E9693CB2E970B");//Error, intente mas tarde...
deiwidricaurte 0:c55614493217 352 wait(0.5);
deiwidricaurte 0:c55614493217 353 GSM.putc(0x1A);//fin de envío de mensaje
deiwidricaurte 0:c55614493217 354 for(ro=0;ro<=100;ro++)//borrar el buffer y el respaldo para habilitar una nueva recepción
deiwidricaurte 0:c55614493217 355 {
deiwidricaurte 0:c55614493217 356 buffer[ro]='\0';
deiwidricaurte 0:c55614493217 357 Bkupbuffer[ro]='\0';
deiwidricaurte 0:c55614493217 358 }
deiwidricaurte 0:c55614493217 359 ro=0;
deiwidricaurte 0:c55614493217 360 wait(0.5);
deiwidricaurte 0:c55614493217 361 }
deiwidricaurte 0:c55614493217 362 }//if ELE
deiwidricaurte 0:c55614493217 363 else if(Bkupbuffer[68]=='D'&& Bkupbuffer[69]=='6'&&Bkupbuffer[70]=='2'&& Bkupbuffer[71]=='7'&& Bkupbuffer[72]=='1'&& Bkupbuffer[73]=='3')//compara mensaje para leer voltje
deiwidricaurte 0:c55614493217 364 {
kolive360 1:b447e3b8fc27 365 num1 = input.read()*3.3f;
kolive360 1:b447e3b8fc27 366 num = num1*1000;
kolive360 1:b447e3b8fc27 367 pc.printf("\n %d \n",num);
deiwidricaurte 0:c55614493217 368 while(num>0)
deiwidricaurte 0:c55614493217 369 {
deiwidricaurte 0:c55614493217 370 aux[jj]=(num%10)+48;//se toma la parte entera de la longitud y se pasa a ASCII y guarda en el vector coorden
kolive360 1:b447e3b8fc27 371 if(num<11){
kolive360 1:b447e3b8fc27 372 aux[jj]=(num/1) + 48;
kolive360 1:b447e3b8fc27 373 pc.printf("\n %c",aux[jj]);
deiwidricaurte 0:c55614493217 374 break;
deiwidricaurte 0:c55614493217 375 }
kolive360 1:b447e3b8fc27 376 num=num/10;
kolive360 1:b447e3b8fc27 377
deiwidricaurte 0:c55614493217 378 pc.printf("\n %c",aux[jj]);
deiwidricaurte 0:c55614493217 379 jj++;
deiwidricaurte 0:c55614493217 380 }
deiwidricaurte 0:c55614493217 381 if(num==0){
kolive360 1:b447e3b8fc27 382 aux[jj]=(num/1) + 48;
deiwidricaurte 0:c55614493217 383 }
deiwidricaurte 0:c55614493217 384 pc.printf("\n sss %c",aux);
deiwidricaurte 0:c55614493217 385 int z;
deiwidricaurte 0:c55614493217 386 z=strlen(ENCA2);//hace z = al tamaño de la variable ENCA
kolive360 1:b447e3b8fc27 387 for(i=jj;i>=0;i--)
deiwidricaurte 0:c55614493217 388 {
deiwidricaurte 0:c55614493217 389 ENCA2[z]=aux[i];//guarda las coordenadas en un vector auxiliar ENCA en orden
deiwidricaurte 0:c55614493217 390 z++;
deiwidricaurte 0:c55614493217 391 }
deiwidricaurte 0:c55614493217 392
deiwidricaurte 0:c55614493217 393 LENIN12=strlen(ENCA2);//toma el tamaño del vector ENCA
deiwidricaurte 0:c55614493217 394 for (i=0;i < LENIN12;i++)//algoritmo para pasar de septetos a octetos
deiwidricaurte 0:c55614493217 395 {
deiwidricaurte 0:c55614493217 396 DS2[i]=ENCA2[i+C]>>K | ENCA2[i+C+1]<<(7-K);
deiwidricaurte 0:c55614493217 397 if (DS2[i]==0x00) {LENOUT2=i; goto salir2;}//cuando
deiwidricaurte 0:c55614493217 398 K++;
deiwidricaurte 0:c55614493217 399 if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
deiwidricaurte 0:c55614493217 400 }
deiwidricaurte 0:c55614493217 401 //
deiwidricaurte 0:c55614493217 402 //
deiwidricaurte 0:c55614493217 403 salir2: for(i=38;i<48;i++)//Se extrae el número del celular
deiwidricaurte 0:c55614493217 404 {
deiwidricaurte 0:c55614493217 405 celular[i-38]=Bkupbuffer[i];//toma el número del celular trocado en las posiciones del 38 al 48 almacenadas en el buffer
deiwidricaurte 0:c55614493217 406 }//de respaldo
deiwidricaurte 0:c55614493217 407 wait(0.5);
deiwidricaurte 0:c55614493217 408 enviar(LENIN12,DS2,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
deiwidricaurte 0:c55614493217 409 wait(14);
deiwidricaurte 0:c55614493217 410
deiwidricaurte 0:c55614493217 411 goto inicio;
deiwidricaurte 0:c55614493217 412 }
deiwidricaurte 0:c55614493217 413 else
deiwidricaurte 0:c55614493217 414 {
deiwidricaurte 0:c55614493217 415 for(ro=0;ro<=100;ro++)
deiwidricaurte 0:c55614493217 416 {
deiwidricaurte 0:c55614493217 417 buffer[ro]='\0';
deiwidricaurte 0:c55614493217 418 }
deiwidricaurte 0:c55614493217 419 ro=0;
deiwidricaurte 0:c55614493217 420
deiwidricaurte 0:c55614493217 421 }
deiwidricaurte 0:c55614493217 422 }//while
deiwidricaurte 0:c55614493217 423 }//main
deiwidricaurte 0:c55614493217 424 //*****************************************************************************************************************************************
deiwidricaurte 0:c55614493217 425 //*****************************************************************************************************************************************