Fabio Andres Ibañez Diaz
/
FUNCIONACORONRDY
GPS NUEVO
main.cpp@0:b11acb885c4c, 2015-06-19 (annotated)
- Committer:
- obifandres
- Date:
- Fri Jun 19 10:44:48 2015 +0000
- Revision:
- 0:b11acb885c4c
GPS NUEVO
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
obifandres | 0:b11acb885c4c | 1 | #include "mbed.h" |
obifandres | 0:b11acb885c4c | 2 | #include "DebouncedIn.h" |
obifandres | 0:b11acb885c4c | 3 | #include "stdio.h" |
obifandres | 0:b11acb885c4c | 4 | #include "string.h" |
obifandres | 0:b11acb885c4c | 5 | #include "math.h" |
obifandres | 0:b11acb885c4c | 6 | #include "gprs.h" |
obifandres | 0:b11acb885c4c | 7 | #include "GPS.h" |
obifandres | 0:b11acb885c4c | 8 | Timer t; |
obifandres | 0:b11acb885c4c | 9 | char ES[255]; |
obifandres | 0:b11acb885c4c | 10 | int Y,P,Q,LoutON,LinON; |
obifandres | 0:b11acb885c4c | 11 | DigitalOut LedRojo(LED1); |
obifandres | 0:b11acb885c4c | 12 | int Y2,P2,Q2,LoutON2,LinON2; |
obifandres | 0:b11acb885c4c | 13 | |
obifandres | 0:b11acb885c4c | 14 | Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z |
obifandres | 0:b11acb885c4c | 15 | GPS gps(PTE22, PTE23); |
obifandres | 0:b11acb885c4c | 16 | |
obifandres | 0:b11acb885c4c | 17 | Serial GSM(PTE0,PTE1);//Configura puerto USB a la consola serial del PC conectado. |
obifandres | 0:b11acb885c4c | 18 | //void leer(void); |
obifandres | 0:b11acb885c4c | 19 | void Rx_interrupt(); |
obifandres | 0:b11acb885c4c | 20 | int position=0; |
obifandres | 0:b11acb885c4c | 21 | int lenpack=6; |
obifandres | 0:b11acb885c4c | 22 | int longi=0; |
obifandres | 0:b11acb885c4c | 23 | char lat1[9]; |
obifandres | 0:b11acb885c4c | 24 | char lon1[12]; |
obifandres | 0:b11acb885c4c | 25 | char tel[11]; |
obifandres | 0:b11acb885c4c | 26 | char buffer[100]; |
obifandres | 0:b11acb885c4c | 27 | char buffer1[13]; |
obifandres | 0:b11acb885c4c | 28 | char datos[100]; |
obifandres | 0:b11acb885c4c | 29 | char NUMBER[13]; |
obifandres | 0:b11acb885c4c | 30 | int index; |
obifandres | 0:b11acb885c4c | 31 | char buffermsg[100]; |
obifandres | 0:b11acb885c4c | 32 | int count1=0; |
obifandres | 0:b11acb885c4c | 33 | int i = 0; |
obifandres | 0:b11acb885c4c | 34 | int j = 0; |
obifandres | 0:b11acb885c4c | 35 | char c; |
obifandres | 0:b11acb885c4c | 36 | unsigned char CtrlZ = 0x1A; // comodin de emision controlZ |
obifandres | 0:b11acb885c4c | 37 | bool Flag = false; // bandera |
obifandres | 0:b11acb885c4c | 38 | char v1[]=""; //Cadena de recepcion de la trama PDU si se usa!! |
obifandres | 0:b11acb885c4c | 39 | char v2[]=""; |
obifandres | 0:b11acb885c4c | 40 | char msg[256]; |
obifandres | 0:b11acb885c4c | 41 | int z=0,g=0; |
obifandres | 0:b11acb885c4c | 42 | char char1; |
obifandres | 0:b11acb885c4c | 43 | char de[255]; |
obifandres | 0:b11acb885c4c | 44 | char Link[]={"maps.google.com/?q="}; |
obifandres | 0:b11acb885c4c | 45 | char ds[255]; |
obifandres | 0:b11acb885c4c | 46 | int k,Lout,Lin,LL; |
obifandres | 0:b11acb885c4c | 47 | float frac_long, frac_lat,frac_long2,frac_lat2,frac_long3,frac_lat3,la,lo,L2,lat4,long4,L3,Lat,Long,Lmens; |
obifandres | 0:b11acb885c4c | 48 | short DS[255]; |
obifandres | 0:b11acb885c4c | 49 | int K,LENOUT,C; |
obifandres | 0:b11acb885c4c | 50 | char hexbyte[3]={0}; |
obifandres | 0:b11acb885c4c | 51 | int d; |
obifandres | 0:b11acb885c4c | 52 | int msglen[0]; |
obifandres | 0:b11acb885c4c | 53 | int lng; |
obifandres | 0:b11acb885c4c | 54 | |
obifandres | 0:b11acb885c4c | 55 | |
obifandres | 0:b11acb885c4c | 56 | int readBuffer(char *buffer,int count) |
obifandres | 0:b11acb885c4c | 57 | { |
obifandres | 0:b11acb885c4c | 58 | int i=0; |
obifandres | 0:b11acb885c4c | 59 | t.start(); |
obifandres | 0:b11acb885c4c | 60 | while(1) { |
obifandres | 0:b11acb885c4c | 61 | while (GSM.readable()) { |
obifandres | 0:b11acb885c4c | 62 | char c = GSM.getc(); |
obifandres | 0:b11acb885c4c | 63 | if (c == '\r' || c == '\n') c = '$'; |
obifandres | 0:b11acb885c4c | 64 | buffer[i++] = c; |
obifandres | 0:b11acb885c4c | 65 | if(i > count)break; |
obifandres | 0:b11acb885c4c | 66 | } |
obifandres | 0:b11acb885c4c | 67 | if(i > count)break; |
obifandres | 0:b11acb885c4c | 68 | if(t.read() > 3) { |
obifandres | 0:b11acb885c4c | 69 | t.stop(); |
obifandres | 0:b11acb885c4c | 70 | t.reset(); |
obifandres | 0:b11acb885c4c | 71 | break; |
obifandres | 0:b11acb885c4c | 72 | } |
obifandres | 0:b11acb885c4c | 73 | } |
obifandres | 0:b11acb885c4c | 74 | wait(0.5); |
obifandres | 0:b11acb885c4c | 75 | while(GSM.readable()) { |
obifandres | 0:b11acb885c4c | 76 | char c = GSM.getc(); |
obifandres | 0:b11acb885c4c | 77 | } |
obifandres | 0:b11acb885c4c | 78 | return 0; |
obifandres | 0:b11acb885c4c | 79 | } |
obifandres | 0:b11acb885c4c | 80 | |
obifandres | 0:b11acb885c4c | 81 | |
obifandres | 0:b11acb885c4c | 82 | |
obifandres | 0:b11acb885c4c | 83 | int main(void) |
obifandres | 0:b11acb885c4c | 84 | { |
obifandres | 0:b11acb885c4c | 85 | LedRojo=0; |
obifandres | 0:b11acb885c4c | 86 | |
obifandres | 0:b11acb885c4c | 87 | |
obifandres | 0:b11acb885c4c | 88 | GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600 |
obifandres | 0:b11acb885c4c | 89 | GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART |
obifandres | 0:b11acb885c4c | 90 | |
obifandres | 0:b11acb885c4c | 91 | //configuracion del modem |
obifandres | 0:b11acb885c4c | 92 | |
obifandres | 0:b11acb885c4c | 93 | pc.printf("Enviamos AT\n"); //chekeo del modem |
obifandres | 0:b11acb885c4c | 94 | GSM.printf("AT\r\n"); |
obifandres | 0:b11acb885c4c | 95 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 96 | pc.printf("ATrdy>:D %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 97 | |
obifandres | 0:b11acb885c4c | 98 | GSM.printf("AT+CNMI=1,1\r\n"); //Habilitado para recibir SMS |
obifandres | 0:b11acb885c4c | 99 | pc.printf("AT+CNMI=1,1\r\n"); |
obifandres | 0:b11acb885c4c | 100 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 101 | pc.printf(">:D %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 102 | |
obifandres | 0:b11acb885c4c | 103 | GSM.printf("AT+CMGF=0\r\n"); // modo PDU |
obifandres | 0:b11acb885c4c | 104 | pc.printf("AT+CMGF=0\r\n"); |
obifandres | 0:b11acb885c4c | 105 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 106 | pc.printf(">:3 %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 107 | |
obifandres | 0:b11acb885c4c | 108 | GSM.printf("ATE\r\n"); // sin eco |
obifandres | 0:b11acb885c4c | 109 | pc.printf("ATE\r\n"); |
obifandres | 0:b11acb885c4c | 110 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 111 | pc.printf(">:x %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 112 | |
obifandres | 0:b11acb885c4c | 113 | GSM.printf("AT+CBST=0,0,1\r\n"); // AUTOBAUDIOS,ASINCRONICO |
obifandres | 0:b11acb885c4c | 114 | pc.printf("AT+CBST=0,0,1\r\n"); |
obifandres | 0:b11acb885c4c | 115 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 116 | pc.printf(">:) %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 117 | |
obifandres | 0:b11acb885c4c | 118 | GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO |
obifandres | 0:b11acb885c4c | 119 | pc.printf("AT+CMGD=1\r\n"); |
obifandres | 0:b11acb885c4c | 120 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 121 | pc.printf(">:) %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 122 | // termina configuraicon del modem |
obifandres | 0:b11acb885c4c | 123 | |
obifandres | 0:b11acb885c4c | 124 | |
obifandres | 0:b11acb885c4c | 125 | while(1) { |
obifandres | 0:b11acb885c4c | 126 | //wait(2); |
obifandres | 0:b11acb885c4c | 127 | |
obifandres | 0:b11acb885c4c | 128 | |
obifandres | 0:b11acb885c4c | 129 | |
obifandres | 0:b11acb885c4c | 130 | if (GSM.readable()) { |
obifandres | 0:b11acb885c4c | 131 | readBuffer(buffer,100); |
obifandres | 0:b11acb885c4c | 132 | |
obifandres | 0:b11acb885c4c | 133 | |
obifandres | 0:b11acb885c4c | 134 | |
obifandres | 0:b11acb885c4c | 135 | if(buffer[10]=='S'&& buffer[11]=='M'){ |
obifandres | 0:b11acb885c4c | 136 | pc.printf("Llego mensaje\n\r "); |
obifandres | 0:b11acb885c4c | 137 | buffer[10]=' '; |
obifandres | 0:b11acb885c4c | 138 | buffer[11]=' '; |
obifandres | 0:b11acb885c4c | 139 | GSM.printf("AT+CMGR=%c\r\n",buffer[14]); |
obifandres | 0:b11acb885c4c | 140 | pc.printf("AT+CMGR=%c\r\n",buffer[14]); |
obifandres | 0:b11acb885c4c | 141 | } |
obifandres | 0:b11acb885c4c | 142 | for(d=66;d<68;d+=2){ |
obifandres | 0:b11acb885c4c | 143 | hexbyte[0]=buffer[d]; |
obifandres | 0:b11acb885c4c | 144 | hexbyte[1]=buffer[d+1]; |
obifandres | 0:b11acb885c4c | 145 | sscanf(hexbyte,"%X",&msglen[(d-66)/2]); |
obifandres | 0:b11acb885c4c | 146 | printf("%2X\n",msglen[(d-66)/2]); |
obifandres | 0:b11acb885c4c | 147 | } |
obifandres | 0:b11acb885c4c | 148 | lng=msglen[0]; |
obifandres | 0:b11acb885c4c | 149 | int msg[lng-1]; |
obifandres | 0:b11acb885c4c | 150 | for(d=68;d<(68+((lng)*2));d+=2){ |
obifandres | 0:b11acb885c4c | 151 | hexbyte[0]=buffer[d]; |
obifandres | 0:b11acb885c4c | 152 | hexbyte[1]=buffer[d+1]; |
obifandres | 0:b11acb885c4c | 153 | sscanf(hexbyte,"%X",&msg[(d-68)/2]); |
obifandres | 0:b11acb885c4c | 154 | printf("%2X\n",msg[(d-68)/2]); |
obifandres | 0:b11acb885c4c | 155 | } |
obifandres | 0:b11acb885c4c | 156 | LENOUT= lng*8/7; |
obifandres | 0:b11acb885c4c | 157 | K=7; |
obifandres | 0:b11acb885c4c | 158 | C=0; |
obifandres | 0:b11acb885c4c | 159 | DS[0]=msg[0] & 0x7F; // la primera sola |
obifandres | 0:b11acb885c4c | 160 | printf("%2X,%d,%d\r\n",DS[0],i,K); |
obifandres | 0:b11acb885c4c | 161 | for (i=1;i < LENOUT;i++){ // inicia el algoritmo |
obifandres | 0:b11acb885c4c | 162 | DS[i]=(msg[i-1-C]>>K | msg[i-C]<<(8-K))& 0x7F; //valido para todos |
obifandres | 0:b11acb885c4c | 163 | printf("%2X,%d,%d\r\n",DS[i],i,K); |
obifandres | 0:b11acb885c4c | 164 | if (K==0) {K=8;C++;} |
obifandres | 0:b11acb885c4c | 165 | K--; |
obifandres | 0:b11acb885c4c | 166 | } |
obifandres | 0:b11acb885c4c | 167 | for (i=0;i < LENOUT;i++){ |
obifandres | 0:b11acb885c4c | 168 | printf("%c",DS[i]); |
obifandres | 0:b11acb885c4c | 169 | } |
obifandres | 0:b11acb885c4c | 170 | printf("\n"); |
obifandres | 0:b11acb885c4c | 171 | |
obifandres | 0:b11acb885c4c | 172 | |
obifandres | 0:b11acb885c4c | 173 | //if(buffer[68]=='C'&& buffer[69]=='3'&&buffer[70]=='B'&& buffer[71]=='7'&&buffer[72]=='1'&& buffer[73]=='C')//recibe mensaje Cor |
obifandres | 0:b11acb885c4c | 174 | if(DS[0]=='C'&&DS[1]=='o'&&DS[2]=='r') |
obifandres | 0:b11acb885c4c | 175 | { |
obifandres | 0:b11acb885c4c | 176 | pc.printf(":$ %c%c%c%c%c%c%c%c%c%c\r\n",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 177 | pc.printf(":) %c%c%c%c%c%c\r\n",buffer[68],buffer[69],buffer[70],buffer[71],buffer[72],buffer[73]); |
obifandres | 0:b11acb885c4c | 178 | pc.printf("El mensaje es Cor\n"); |
obifandres | 0:b11acb885c4c | 179 | /*buffer[66]=' '; |
obifandres | 0:b11acb885c4c | 180 | buffer[67]=' ';*/ |
obifandres | 0:b11acb885c4c | 181 | buffer[68]=' '; |
obifandres | 0:b11acb885c4c | 182 | buffer[69]=' '; |
obifandres | 0:b11acb885c4c | 183 | buffer[70]=' '; |
obifandres | 0:b11acb885c4c | 184 | buffer[71]=' '; |
obifandres | 0:b11acb885c4c | 185 | buffer[72]=' '; |
obifandres | 0:b11acb885c4c | 186 | buffer[73]=' '; |
obifandres | 0:b11acb885c4c | 187 | //GPS |
obifandres | 0:b11acb885c4c | 188 | // INTENTARE LEER EL PUTO GPS// |
obifandres | 0:b11acb885c4c | 189 | while(1) { |
obifandres | 0:b11acb885c4c | 190 | |
obifandres | 0:b11acb885c4c | 191 | if(gps.sample()) { |
obifandres | 0:b11acb885c4c | 192 | |
obifandres | 0:b11acb885c4c | 193 | lo=(int)gps.longitude; |
obifandres | 0:b11acb885c4c | 194 | la=(int)gps.latitude; |
obifandres | 0:b11acb885c4c | 195 | frac_long=gps.longitude-(int)gps.longitude; |
obifandres | 0:b11acb885c4c | 196 | |
obifandres | 0:b11acb885c4c | 197 | frac_lat=gps.latitude-(int)gps.latitude; |
obifandres | 0:b11acb885c4c | 198 | |
obifandres | 0:b11acb885c4c | 199 | |
obifandres | 0:b11acb885c4c | 200 | |
obifandres | 0:b11acb885c4c | 201 | frac_lat2=frac_lat/1000000; |
obifandres | 0:b11acb885c4c | 202 | frac_long2=frac_long/100000; |
obifandres | 0:b11acb885c4c | 203 | |
obifandres | 0:b11acb885c4c | 204 | lat4=(int)abs(1000000*frac_lat); |
obifandres | 0:b11acb885c4c | 205 | long4=(int)abs(1000000*frac_long); |
obifandres | 0:b11acb885c4c | 206 | |
obifandres | 0:b11acb885c4c | 207 | frac_lat3=frac_lat+frac_lat2; |
obifandres | 0:b11acb885c4c | 208 | frac_long3=frac_long+frac_long2; |
obifandres | 0:b11acb885c4c | 209 | |
obifandres | 0:b11acb885c4c | 210 | |
obifandres | 0:b11acb885c4c | 211 | Long=gps.longitude; |
obifandres | 0:b11acb885c4c | 212 | Lat=gps.latitude; |
obifandres | 0:b11acb885c4c | 213 | sprintf(v1, "%f", Lat); |
obifandres | 0:b11acb885c4c | 214 | strcat(Link,v1); |
obifandres | 0:b11acb885c4c | 215 | strcat(Link,","); |
obifandres | 0:b11acb885c4c | 216 | |
obifandres | 0:b11acb885c4c | 217 | |
obifandres | 0:b11acb885c4c | 218 | sprintf(v2, "%f", Long); |
obifandres | 0:b11acb885c4c | 219 | strcat(Link,v2); |
obifandres | 0:b11acb885c4c | 220 | strcat(de,Link); |
obifandres | 0:b11acb885c4c | 221 | pc.printf("%s\n",Link); |
obifandres | 0:b11acb885c4c | 222 | pc.printf("esperando again \n"); |
obifandres | 0:b11acb885c4c | 223 | |
obifandres | 0:b11acb885c4c | 224 | // pasar coordenadas a formato PDU |
obifandres | 0:b11acb885c4c | 225 | Lin=strlen(de); |
obifandres | 0:b11acb885c4c | 226 | |
obifandres | 0:b11acb885c4c | 227 | j=0;k=0;i=0; |
obifandres | 0:b11acb885c4c | 228 | for (i=0;i < Lin;i++){ |
obifandres | 0:b11acb885c4c | 229 | ds[i]=de[i+k]>>j | de[i+k+1]<<(7-j); |
obifandres | 0:b11acb885c4c | 230 | if (ds[i]==0x00) {Lout=i; goto salir;} |
obifandres | 0:b11acb885c4c | 231 | j++; |
obifandres | 0:b11acb885c4c | 232 | if (j==7) {j=0;k++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. |
obifandres | 0:b11acb885c4c | 233 | } |
obifandres | 0:b11acb885c4c | 234 | } |
obifandres | 0:b11acb885c4c | 235 | } |
obifandres | 0:b11acb885c4c | 236 | salir: pc.printf("de\n"); |
obifandres | 0:b11acb885c4c | 237 | for (i=0;i < Lin;i++){ |
obifandres | 0:b11acb885c4c | 238 | pc.printf("%X",de[i]); |
obifandres | 0:b11acb885c4c | 239 | } |
obifandres | 0:b11acb885c4c | 240 | pc.printf("\n ds \n"); |
obifandres | 0:b11acb885c4c | 241 | for (i=0;i<Lout;i++){ |
obifandres | 0:b11acb885c4c | 242 | pc.printf("%2X",ds[i]&0x000000FF,i); |
obifandres | 0:b11acb885c4c | 243 | } |
obifandres | 0:b11acb885c4c | 244 | |
obifandres | 0:b11acb885c4c | 245 | // comienza el envio de coordenadas |
obifandres | 0:b11acb885c4c | 246 | pc.printf("\n Lout:%d,Lin:%d\r\n",Lout,strlen(de)); |
obifandres | 0:b11acb885c4c | 247 | |
obifandres | 0:b11acb885c4c | 248 | pc.printf("Comienza SMS \n"); |
obifandres | 0:b11acb885c4c | 249 | |
obifandres | 0:b11acb885c4c | 250 | |
obifandres | 0:b11acb885c4c | 251 | GSM.printf("AT+CMGS=%d\r\n",Lout+13); |
obifandres | 0:b11acb885c4c | 252 | pc.printf("\n AT+CMGS=%d\r\n",Lout+13); |
obifandres | 0:b11acb885c4c | 253 | wait(0.3); |
obifandres | 0:b11acb885c4c | 254 | |
obifandres | 0:b11acb885c4c | 255 | GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 256 | pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 257 | //wait(0.5); |
obifandres | 0:b11acb885c4c | 258 | GSM.printf("%2X",Lin); |
obifandres | 0:b11acb885c4c | 259 | pc.printf("%2X",Lin); |
obifandres | 0:b11acb885c4c | 260 | |
obifandres | 0:b11acb885c4c | 261 | |
obifandres | 0:b11acb885c4c | 262 | for (i=0;i < Lout;i++){ |
obifandres | 0:b11acb885c4c | 263 | GSM.printf("%02X",ds[i]&0x000000FF); |
obifandres | 0:b11acb885c4c | 264 | pc.printf("%02X",ds[i]&0x000000FF); |
obifandres | 0:b11acb885c4c | 265 | // wait(0.3); |
obifandres | 0:b11acb885c4c | 266 | } |
obifandres | 0:b11acb885c4c | 267 | |
obifandres | 0:b11acb885c4c | 268 | |
obifandres | 0:b11acb885c4c | 269 | |
obifandres | 0:b11acb885c4c | 270 | GSM.putc((char)0x1A); //no tengo idea de ke hace esto |
obifandres | 0:b11acb885c4c | 271 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 272 | pc.printf("%s",buffer); |
obifandres | 0:b11acb885c4c | 273 | pc.printf("\n rdy "); |
obifandres | 0:b11acb885c4c | 274 | |
obifandres | 0:b11acb885c4c | 275 | |
obifandres | 0:b11acb885c4c | 276 | //link desde 18 |
obifandres | 0:b11acb885c4c | 277 | |
obifandres | 0:b11acb885c4c | 278 | for (i=0;i < 256;i++){ |
obifandres | 0:b11acb885c4c | 279 | ds[i]=NULL; |
obifandres | 0:b11acb885c4c | 280 | de[i]=NULL;} |
obifandres | 0:b11acb885c4c | 281 | LL=strlen(Link); |
obifandres | 0:b11acb885c4c | 282 | for (i=19;i < LL+1 ;i++){ |
obifandres | 0:b11acb885c4c | 283 | Link[i]=NULL;} |
obifandres | 0:b11acb885c4c | 284 | |
obifandres | 0:b11acb885c4c | 285 | |
obifandres | 0:b11acb885c4c | 286 | |
obifandres | 0:b11acb885c4c | 287 | |
obifandres | 0:b11acb885c4c | 288 | }// fin if del cor |
obifandres | 0:b11acb885c4c | 289 | |
obifandres | 0:b11acb885c4c | 290 | //aki deberia ir lo del on o off |
obifandres | 0:b11acb885c4c | 291 | for(d=66;d<68;d+=2){ |
obifandres | 0:b11acb885c4c | 292 | hexbyte[0]=buffer[d]; |
obifandres | 0:b11acb885c4c | 293 | hexbyte[1]=buffer[d+1]; |
obifandres | 0:b11acb885c4c | 294 | sscanf(hexbyte,"%X",&msglen[(d-66)/2]); |
obifandres | 0:b11acb885c4c | 295 | printf("%2X\n",msglen[(d-66)/2]); |
obifandres | 0:b11acb885c4c | 296 | } |
obifandres | 0:b11acb885c4c | 297 | lng=msglen[0]; |
obifandres | 0:b11acb885c4c | 298 | int msg1[lng-1]; |
obifandres | 0:b11acb885c4c | 299 | for(d=68;d<(68+((lng)*2));d+=2){ |
obifandres | 0:b11acb885c4c | 300 | hexbyte[0]=buffer[d]; |
obifandres | 0:b11acb885c4c | 301 | hexbyte[1]=buffer[d+1]; |
obifandres | 0:b11acb885c4c | 302 | sscanf(hexbyte,"%X",&msg1[(d-68)/2]); |
obifandres | 0:b11acb885c4c | 303 | printf("%2X\n",msg1[(d-68)/2]); |
obifandres | 0:b11acb885c4c | 304 | } |
obifandres | 0:b11acb885c4c | 305 | LENOUT= lng*8/7; |
obifandres | 0:b11acb885c4c | 306 | K=7; |
obifandres | 0:b11acb885c4c | 307 | C=0; |
obifandres | 0:b11acb885c4c | 308 | DS[0]=msg1[0] & 0x7F; // la primera sola |
obifandres | 0:b11acb885c4c | 309 | printf("%2X,%d,%d\r\n",DS[0],i,K); |
obifandres | 0:b11acb885c4c | 310 | for (i=1;i < LENOUT;i++){ // inicia el algoritmo |
obifandres | 0:b11acb885c4c | 311 | DS[i]=(msg1[i-1-C]>>K | msg1[i-C]<<(8-K))& 0x7F; //valido para todos |
obifandres | 0:b11acb885c4c | 312 | printf("%2X,%d,%d\r\n",DS[i],i,K); |
obifandres | 0:b11acb885c4c | 313 | if (K==0) {K=8;C++;} |
obifandres | 0:b11acb885c4c | 314 | K--; |
obifandres | 0:b11acb885c4c | 315 | } |
obifandres | 0:b11acb885c4c | 316 | for (i=0;i < LENOUT;i++){ |
obifandres | 0:b11acb885c4c | 317 | printf("%c",DS[i]); |
obifandres | 0:b11acb885c4c | 318 | } |
obifandres | 0:b11acb885c4c | 319 | printf("\n"); |
obifandres | 0:b11acb885c4c | 320 | |
obifandres | 0:b11acb885c4c | 321 | //if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='3'&& buffer[71]=='7')//recibe mensaje On |
obifandres | 0:b11acb885c4c | 322 | if(DS[0]=='O'&&DS[1]=='n') |
obifandres | 0:b11acb885c4c | 323 | { |
obifandres | 0:b11acb885c4c | 324 | |
obifandres | 0:b11acb885c4c | 325 | pc.printf("El mensaje es On\n"); |
obifandres | 0:b11acb885c4c | 326 | /*buffer[66]=' '; |
obifandres | 0:b11acb885c4c | 327 | buffer[67]=' ';*/ |
obifandres | 0:b11acb885c4c | 328 | buffer[68]=' '; |
obifandres | 0:b11acb885c4c | 329 | buffer[69]=' '; |
obifandres | 0:b11acb885c4c | 330 | buffer[70]=' '; |
obifandres | 0:b11acb885c4c | 331 | buffer[71]=' '; |
obifandres | 0:b11acb885c4c | 332 | if (LedRojo==1){ |
obifandres | 0:b11acb885c4c | 333 | LedRojo=0; |
obifandres | 0:b11acb885c4c | 334 | pc.printf("Modo Encendido\n");//AT+CMGS=21 0011000A9113735689900000AA09 45F7B8EC26A7C96F |
obifandres | 0:b11acb885c4c | 335 | |
obifandres | 0:b11acb885c4c | 336 | // pasar a PDU Encendido |
obifandres | 0:b11acb885c4c | 337 | |
obifandres | 0:b11acb885c4c | 338 | // char EE[255]; |
obifandres | 0:b11acb885c4c | 339 | |
obifandres | 0:b11acb885c4c | 340 | |
obifandres | 0:b11acb885c4c | 341 | |
obifandres | 0:b11acb885c4c | 342 | //numero de caracteres de abajo |
obifandres | 0:b11acb885c4c | 343 | char EE[]="Carro Encendido"; |
obifandres | 0:b11acb885c4c | 344 | LinON=strlen(EE); |
obifandres | 0:b11acb885c4c | 345 | |
obifandres | 0:b11acb885c4c | 346 | //----------------------------------- --------------------------- |
obifandres | 0:b11acb885c4c | 347 | P=0;Q=0;Y=0; |
obifandres | 0:b11acb885c4c | 348 | for (Y=0;Y < LinON;Y++){ |
obifandres | 0:b11acb885c4c | 349 | ES[Y]=EE[Y+Q]>>P | EE[Y+Q+1]<<(7-P); |
obifandres | 0:b11acb885c4c | 350 | if (ES[Y]==0x00) {LoutON=Y; goto salir1;} |
obifandres | 0:b11acb885c4c | 351 | P++; |
obifandres | 0:b11acb885c4c | 352 | if (P==7) {P=0;Q++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. |
obifandres | 0:b11acb885c4c | 353 | } |
obifandres | 0:b11acb885c4c | 354 | |
obifandres | 0:b11acb885c4c | 355 | //-------------------------------------------------------------- |
obifandres | 0:b11acb885c4c | 356 | salir1: for (Y=0;Y < LinON;Y++){ |
obifandres | 0:b11acb885c4c | 357 | pc.printf("%X",EE[Y]); |
obifandres | 0:b11acb885c4c | 358 | } |
obifandres | 0:b11acb885c4c | 359 | pc.printf(":\r\n"); |
obifandres | 0:b11acb885c4c | 360 | for (Y=0;Y<LoutON;Y++){ |
obifandres | 0:b11acb885c4c | 361 | pc.printf("%2X,%d\r\n",ES[Y]&0x000000FF,Y); |
obifandres | 0:b11acb885c4c | 362 | } |
obifandres | 0:b11acb885c4c | 363 | pc.printf("LoutON:%d,LinON:%d\r\n",LoutON,strlen(EE)); |
obifandres | 0:b11acb885c4c | 364 | |
obifandres | 0:b11acb885c4c | 365 | // fin pdu encendido |
obifandres | 0:b11acb885c4c | 366 | |
obifandres | 0:b11acb885c4c | 367 | // envio mensaje de encendido |
obifandres | 0:b11acb885c4c | 368 | // comienza el envio de coordenadas |
obifandres | 0:b11acb885c4c | 369 | |
obifandres | 0:b11acb885c4c | 370 | |
obifandres | 0:b11acb885c4c | 371 | pc.printf("Comienza SMS \n"); |
obifandres | 0:b11acb885c4c | 372 | |
obifandres | 0:b11acb885c4c | 373 | |
obifandres | 0:b11acb885c4c | 374 | GSM.printf("AT+CMGS=%d\r\n",LoutON+13); |
obifandres | 0:b11acb885c4c | 375 | pc.printf("\n AT+CMGS=%d\r\n",LoutON+13); |
obifandres | 0:b11acb885c4c | 376 | wait(0.5); |
obifandres | 0:b11acb885c4c | 377 | |
obifandres | 0:b11acb885c4c | 378 | GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 379 | pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 380 | //wait(0.5); |
obifandres | 0:b11acb885c4c | 381 | GSM.printf("%02X",LinON); |
obifandres | 0:b11acb885c4c | 382 | pc.printf("%02X",LinON); |
obifandres | 0:b11acb885c4c | 383 | |
obifandres | 0:b11acb885c4c | 384 | |
obifandres | 0:b11acb885c4c | 385 | for (Y=0;Y < LoutON;Y++){ |
obifandres | 0:b11acb885c4c | 386 | GSM.printf("%02X",ES[Y]&0x000000FF); |
obifandres | 0:b11acb885c4c | 387 | pc.printf("%02X",ES[Y]&0x000000FF);} |
obifandres | 0:b11acb885c4c | 388 | |
obifandres | 0:b11acb885c4c | 389 | |
obifandres | 0:b11acb885c4c | 390 | GSM.putc((char)0x1A); |
obifandres | 0:b11acb885c4c | 391 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 392 | pc.printf("%s",buffer); |
obifandres | 0:b11acb885c4c | 393 | pc.printf("\n rdy "); |
obifandres | 0:b11acb885c4c | 394 | |
obifandres | 0:b11acb885c4c | 395 | wait(1); |
obifandres | 0:b11acb885c4c | 396 | GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO |
obifandres | 0:b11acb885c4c | 397 | pc.printf("AT+CMGD=1\r\n"); |
obifandres | 0:b11acb885c4c | 398 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 399 | pc.printf(">:) %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 400 | |
obifandres | 0:b11acb885c4c | 401 | |
obifandres | 0:b11acb885c4c | 402 | // termina envio de mensaje de encendido |
obifandres | 0:b11acb885c4c | 403 | |
obifandres | 0:b11acb885c4c | 404 | } //fin if de "modo encendido" |
obifandres | 0:b11acb885c4c | 405 | |
obifandres | 0:b11acb885c4c | 406 | |
obifandres | 0:b11acb885c4c | 407 | } // fin if del on |
obifandres | 0:b11acb885c4c | 408 | for(d=66;d<68;d+=2){ |
obifandres | 0:b11acb885c4c | 409 | hexbyte[0]=buffer[d]; |
obifandres | 0:b11acb885c4c | 410 | hexbyte[1]=buffer[d+1]; |
obifandres | 0:b11acb885c4c | 411 | sscanf(hexbyte,"%X",&msglen[(d-66)/2]); |
obifandres | 0:b11acb885c4c | 412 | printf("%2X\n",msglen[(d-66)/2]); |
obifandres | 0:b11acb885c4c | 413 | } |
obifandres | 0:b11acb885c4c | 414 | lng=msglen[0]; |
obifandres | 0:b11acb885c4c | 415 | int msg2[lng-1]; |
obifandres | 0:b11acb885c4c | 416 | for(d=68;d<(68+((lng)*2));d+=2){ |
obifandres | 0:b11acb885c4c | 417 | hexbyte[0]=buffer[d]; |
obifandres | 0:b11acb885c4c | 418 | hexbyte[1]=buffer[d+1]; |
obifandres | 0:b11acb885c4c | 419 | sscanf(hexbyte,"%X",&msg2[(d-68)/2]); |
obifandres | 0:b11acb885c4c | 420 | printf("%2X\n",msg2[(d-68)/2]); |
obifandres | 0:b11acb885c4c | 421 | } |
obifandres | 0:b11acb885c4c | 422 | LENOUT= lng*8/7; |
obifandres | 0:b11acb885c4c | 423 | K=7; |
obifandres | 0:b11acb885c4c | 424 | C=0; |
obifandres | 0:b11acb885c4c | 425 | DS[0]=msg2[0] & 0x7F; // la primera sola |
obifandres | 0:b11acb885c4c | 426 | printf("%2X,%d,%d\r\n",DS[0],i,K); |
obifandres | 0:b11acb885c4c | 427 | for (i=1;i < LENOUT;i++){ // inicia el algoritmo |
obifandres | 0:b11acb885c4c | 428 | DS[i]=(msg2[i-1-C]>>K | msg2[i-C]<<(8-K))& 0x7F; //valido para todos |
obifandres | 0:b11acb885c4c | 429 | printf("%2X,%d,%d\r\n",DS[i],i,K); |
obifandres | 0:b11acb885c4c | 430 | if (K==0) {K=8;C++;} |
obifandres | 0:b11acb885c4c | 431 | K--; |
obifandres | 0:b11acb885c4c | 432 | } |
obifandres | 0:b11acb885c4c | 433 | for (i=0;i < LENOUT;i++){ |
obifandres | 0:b11acb885c4c | 434 | printf("%c",DS[i]); |
obifandres | 0:b11acb885c4c | 435 | } |
obifandres | 0:b11acb885c4c | 436 | printf("\n"); |
obifandres | 0:b11acb885c4c | 437 | //if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='B'&& buffer[71]=='3'&&buffer[72]=='1'&& buffer[73]=='9')//recibe mensaje Off |
obifandres | 0:b11acb885c4c | 438 | if(DS[0]=='O'&&DS[1]=='f'&&DS[2]=='f') |
obifandres | 0:b11acb885c4c | 439 | { |
obifandres | 0:b11acb885c4c | 440 | |
obifandres | 0:b11acb885c4c | 441 | pc.printf("El mensaje es Off\n");// se borra el mensaje |
obifandres | 0:b11acb885c4c | 442 | /*buffer[66]=' '; |
obifandres | 0:b11acb885c4c | 443 | buffer[67]=' ';*/ |
obifandres | 0:b11acb885c4c | 444 | buffer[68]=' '; |
obifandres | 0:b11acb885c4c | 445 | buffer[69]=' '; |
obifandres | 0:b11acb885c4c | 446 | buffer[70]=' '; |
obifandres | 0:b11acb885c4c | 447 | buffer[71]=' '; |
obifandres | 0:b11acb885c4c | 448 | buffer[72]=' '; |
obifandres | 0:b11acb885c4c | 449 | buffer[73]=' '; |
obifandres | 0:b11acb885c4c | 450 | if (LedRojo==0){ |
obifandres | 0:b11acb885c4c | 451 | LedRojo=1; |
obifandres | 0:b11acb885c4c | 452 | pc.printf("Modo Apagado\n"); // AT+CMGS=20 0011000A9113735689900000AA07 4178F81C26BF01 |
obifandres | 0:b11acb885c4c | 453 | |
obifandres | 0:b11acb885c4c | 454 | char ES2[255]; |
obifandres | 0:b11acb885c4c | 455 | |
obifandres | 0:b11acb885c4c | 456 | //numero de caracteres de abajo |
obifandres | 0:b11acb885c4c | 457 | char EE2[]="Carro Apagado"; |
obifandres | 0:b11acb885c4c | 458 | LinON2=strlen(EE2); |
obifandres | 0:b11acb885c4c | 459 | |
obifandres | 0:b11acb885c4c | 460 | //----------------------------------- --------------------------- |
obifandres | 0:b11acb885c4c | 461 | P2=0;Q2=0;Y2=0; |
obifandres | 0:b11acb885c4c | 462 | for (Y2=0;Y2 < LinON2;Y2++){ |
obifandres | 0:b11acb885c4c | 463 | ES2[Y2]=EE2[Y2+Q2]>>P2 | EE2[Y2+Q2+1]<<(7-P2); |
obifandres | 0:b11acb885c4c | 464 | if (ES2[Y2]==0x00) {LoutON2=Y2; goto salir12;} |
obifandres | 0:b11acb885c4c | 465 | P2++; |
obifandres | 0:b11acb885c4c | 466 | if (P2==7) {P2=0;Q2++;} // se chequea que ya se acabaron los bits en un ciclo de conversion. |
obifandres | 0:b11acb885c4c | 467 | } |
obifandres | 0:b11acb885c4c | 468 | |
obifandres | 0:b11acb885c4c | 469 | //-------------------------------------------------------------- |
obifandres | 0:b11acb885c4c | 470 | salir12: for (Y2=0;Y2 < LinON2;Y2++){ |
obifandres | 0:b11acb885c4c | 471 | pc.printf("%X",EE2[Y2]); |
obifandres | 0:b11acb885c4c | 472 | } |
obifandres | 0:b11acb885c4c | 473 | pc.printf(":\r\n"); |
obifandres | 0:b11acb885c4c | 474 | for (Y2=0;Y2<LoutON2;Y2++){ |
obifandres | 0:b11acb885c4c | 475 | pc.printf("%2X,%d\r\n",ES2[Y2]&0x000000FF,Y2); |
obifandres | 0:b11acb885c4c | 476 | } |
obifandres | 0:b11acb885c4c | 477 | pc.printf("LoutON2:%d,LinON2:%d\r\n",LoutON2,strlen(EE2)); |
obifandres | 0:b11acb885c4c | 478 | |
obifandres | 0:b11acb885c4c | 479 | // fin pdu Apagado |
obifandres | 0:b11acb885c4c | 480 | |
obifandres | 0:b11acb885c4c | 481 | // envio mensaje de Apagado |
obifandres | 0:b11acb885c4c | 482 | |
obifandres | 0:b11acb885c4c | 483 | |
obifandres | 0:b11acb885c4c | 484 | |
obifandres | 0:b11acb885c4c | 485 | pc.printf("Comienza SMS \n"); |
obifandres | 0:b11acb885c4c | 486 | |
obifandres | 0:b11acb885c4c | 487 | |
obifandres | 0:b11acb885c4c | 488 | GSM.printf("AT+CMGS=%d\r\n",LoutON2+13); |
obifandres | 0:b11acb885c4c | 489 | pc.printf("\n AT+CMGS=%d\r\n",LoutON2+13); |
obifandres | 0:b11acb885c4c | 490 | wait(0.5); |
obifandres | 0:b11acb885c4c | 491 | |
obifandres | 0:b11acb885c4c | 492 | GSM.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 493 | pc.printf("0011000A91%c%c%c%c%c%c%c%c%c%c0000AA",buffer[38],buffer[39],buffer[40],buffer[41],buffer[42],buffer[43],buffer[44],buffer[45],buffer[46],buffer[47]); |
obifandres | 0:b11acb885c4c | 494 | //wait(0.5); |
obifandres | 0:b11acb885c4c | 495 | GSM.printf("%02X",LinON2); |
obifandres | 0:b11acb885c4c | 496 | pc.printf("%02X",LinON2); |
obifandres | 0:b11acb885c4c | 497 | |
obifandres | 0:b11acb885c4c | 498 | |
obifandres | 0:b11acb885c4c | 499 | for (Y2=0;Y2 < LoutON2;Y2++){ |
obifandres | 0:b11acb885c4c | 500 | GSM.printf("%02X",ES2[Y2]&0x000000FF); |
obifandres | 0:b11acb885c4c | 501 | pc.printf("%02X",ES2[Y2]&0x000000FF);} |
obifandres | 0:b11acb885c4c | 502 | |
obifandres | 0:b11acb885c4c | 503 | |
obifandres | 0:b11acb885c4c | 504 | GSM.putc((char)0x1A); |
obifandres | 0:b11acb885c4c | 505 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 506 | pc.printf("%s",buffer); |
obifandres | 0:b11acb885c4c | 507 | pc.printf("\n rdy "); |
obifandres | 0:b11acb885c4c | 508 | wait(1); |
obifandres | 0:b11acb885c4c | 509 | GSM.printf("AT+CMGD=1\r\n"); // AUTOBAUDIOS,ASINCRONICO |
obifandres | 0:b11acb885c4c | 510 | pc.printf("AT+CMGD=1\r\n"); |
obifandres | 0:b11acb885c4c | 511 | GSM.scanf("%s",buffer); |
obifandres | 0:b11acb885c4c | 512 | pc.printf(">:) %s\r\n",buffer); |
obifandres | 0:b11acb885c4c | 513 | |
obifandres | 0:b11acb885c4c | 514 | }// fin de modo "apagado" |
obifandres | 0:b11acb885c4c | 515 | |
obifandres | 0:b11acb885c4c | 516 | |
obifandres | 0:b11acb885c4c | 517 | |
obifandres | 0:b11acb885c4c | 518 | |
obifandres | 0:b11acb885c4c | 519 | }// fin if del off |
obifandres | 0:b11acb885c4c | 520 | |
obifandres | 0:b11acb885c4c | 521 | |
obifandres | 0:b11acb885c4c | 522 | } //fin del if principal |
obifandres | 0:b11acb885c4c | 523 | |
obifandres | 0:b11acb885c4c | 524 | }//fin del while |
obifandres | 0:b11acb885c4c | 525 | }// fin del main |
obifandres | 0:b11acb885c4c | 526 | // buffer[i] contiene lo que regresa |