prueba sps

Dependencies:   GPS_G mbed

Committer:
deiwidricaurte
Date:
Mon Nov 28 17:37:47 2016 +0000
Revision:
0:c55614493217
smss prueba;

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