GPS NUEVO

Dependencies:   GPS7 mbed

Committer:
obifandres
Date:
Fri Jun 19 10:44:48 2015 +0000
Revision:
0:b11acb885c4c
GPS NUEVO

Who changed what in which revision?

UserRevisionLine numberNew 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