ENVIA MENSAJE Y RESPONDE CON LINK DE GOOGLE MAPS, ENVIA ON PRENDE UN LED Y RESPONDE AL CELULAR Q SE ENCENDIO EL CARRO, ENVIA OFF APAGA LED Y RESPONDE ALCELULKAR QUE SE APAGO ELO CARRO

Dependencies:   DebouncedIn GPS7 mbed

Fork of CLASEDELGSM by Gustavo Ramirez

Committer:
asjgrupo4
Date:
Wed May 27 23:19:02 2015 +0000
Revision:
2:ffcd0494ec92
Parent:
1:6b506dde0a6e
Child:
3:75c530fb1140
ENVIA MENSAJE Y RESPONDE CON LINK DE GOOGLE MAPS, ENVIA  ON PRENDE UN LED Y RESPONDE AL CELULAR Q SE ENCENDIO EL CARRO, ENVIA OFF  APAGA LED Y RESPONDE ALCELULKAR QUE SE APAGO ELO CARRO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony63 0:edc50cf04b46 1 // Programa para enviar desde la FRDMKL25Z un mensaje de texto en formatp PDU
tony63 0:edc50cf04b46 2 // Como modem usa un celular SIEMENS a56i
tony63 0:edc50cf04b46 3 // ENVIAR -----la palabra "ALARMA 1"
asjgrupo4 2:ffcd0494ec92 4 //
tony63 0:edc50cf04b46 5
tony63 0:edc50cf04b46 6 // OJO CON ESTO
tony63 0:edc50cf04b46 7 // conector del siemens cable verde es RX conectelo a PTE0 cable blanco es TX conectelo a PTE1
tony63 0:edc50cf04b46 8 #include "mbed.h"
tony63 0:edc50cf04b46 9 #include "DebouncedIn.h"
tony63 0:edc50cf04b46 10 #include "stdio.h"
tony63 0:edc50cf04b46 11 #include "string.h"
asjgrupo4 2:ffcd0494ec92 12 #include "math.h"
asjgrupo4 2:ffcd0494ec92 13 #include "gprs.h"
asjgrupo4 2:ffcd0494ec92 14 #include "GPS.h"
tony63 0:edc50cf04b46 15 Timer t;
asjgrupo4 2:ffcd0494ec92 16 DigitalOut on_off(PTC17); //señal que inicia el envio del mensaje
asjgrupo4 2:ffcd0494ec92 17 Serial pc(USBTX,USBRX); //Configura puerto UART de la FRDMKL25Z
asjgrupo4 2:ffcd0494ec92 18 GPS gps(PTE22, PTE23);
asjgrupo4 2:ffcd0494ec92 19 //Serial GSM(USBTX,USBRX);
asjgrupo4 2:ffcd0494ec92 20 //serial (PTA2,PTA1);/////////////////USBTX,USBRX PTE0,PTE1
asjgrupo4 2:ffcd0494ec92 21 Serial GSM(PTE0,PTE1);//Configura puerto USB a la consola serial del PC conectado.
asjgrupo4 2:ffcd0494ec92 22 //void leer(void);
tony63 0:edc50cf04b46 23 void Rx_interrupt();
tony63 0:edc50cf04b46 24 int position=0;
tony63 0:edc50cf04b46 25 int lenpack=6;
tony63 0:edc50cf04b46 26 int longi=0;
asjgrupo4 2:ffcd0494ec92 27 char lat1[9];
asjgrupo4 2:ffcd0494ec92 28 char lon1[12];
tony63 1:6b506dde0a6e 29 char tel[11];
tony63 1:6b506dde0a6e 30 char buffer[100];
asjgrupo4 2:ffcd0494ec92 31 char buffer1[13];
tony63 1:6b506dde0a6e 32 char datos[100];
asjgrupo4 2:ffcd0494ec92 33 char NUMBER[13];
tony63 0:edc50cf04b46 34 int index;
asjgrupo4 2:ffcd0494ec92 35 char buffermsg[100];
asjgrupo4 2:ffcd0494ec92 36 int count1=0;
tony63 0:edc50cf04b46 37 int i = 0;
tony63 1:6b506dde0a6e 38 int j = 0;
asjgrupo4 2:ffcd0494ec92 39 char c;
tony63 0:edc50cf04b46 40 unsigned char CtrlZ = 0x1A; // comodin de emision controlZ
asjgrupo4 2:ffcd0494ec92 41 bool Flag = false; // bandera
tony63 0:edc50cf04b46 42 char r[]=""; //Cadena de recepcion de la trama PDU si se usa!!
tony63 0:edc50cf04b46 43 char msg[256];
asjgrupo4 2:ffcd0494ec92 44 int z=0,g=0;
tony63 0:edc50cf04b46 45 char char1;
asjgrupo4 2:ffcd0494ec92 46 char DE[255]={"http://maps.google.com/maps?q="};
tony63 0:edc50cf04b46 47
asjgrupo4 2:ffcd0494ec92 48 char DS[255];
asjgrupo4 2:ffcd0494ec92 49 int K,C,LENOUT,LENIN;
asjgrupo4 2:ffcd0494ec92 50 int frac_long, frac_lat,ent_long,ent_lat;
asjgrupo4 2:ffcd0494ec92 51
asjgrupo4 2:ffcd0494ec92 52
asjgrupo4 2:ffcd0494ec92 53
tony63 0:edc50cf04b46 54 int readBuffer(char *buffer,int count)
tony63 0:edc50cf04b46 55 {
tony63 0:edc50cf04b46 56 int i=0;
asjgrupo4 2:ffcd0494ec92 57 t.start();
tony63 0:edc50cf04b46 58 while(1) {
tony63 0:edc50cf04b46 59 while (GSM.readable()) {
tony63 0:edc50cf04b46 60 char c = GSM.getc();
tony63 0:edc50cf04b46 61 if (c == '\r' || c == '\n') c = '$';
tony63 0:edc50cf04b46 62 buffer[i++] = c;
tony63 0:edc50cf04b46 63 if(i > count)break;
tony63 0:edc50cf04b46 64 }
tony63 0:edc50cf04b46 65 if(i > count)break;
tony63 0:edc50cf04b46 66 if(t.read() > 3) {
tony63 0:edc50cf04b46 67 t.stop();
tony63 0:edc50cf04b46 68 t.reset();
tony63 0:edc50cf04b46 69 break;
tony63 0:edc50cf04b46 70 }
tony63 0:edc50cf04b46 71 }
tony63 0:edc50cf04b46 72 wait(0.5);
asjgrupo4 2:ffcd0494ec92 73 while(GSM.readable()) {
tony63 0:edc50cf04b46 74 char c = GSM.getc();
tony63 0:edc50cf04b46 75 }
tony63 0:edc50cf04b46 76 return 0;
tony63 0:edc50cf04b46 77 }
tony63 0:edc50cf04b46 78
tony63 0:edc50cf04b46 79
tony63 0:edc50cf04b46 80 int main(void)
asjgrupo4 2:ffcd0494ec92 81 {
asjgrupo4 2:ffcd0494ec92 82
asjgrupo4 2:ffcd0494ec92 83 GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600
asjgrupo4 2:ffcd0494ec92 84 GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART
asjgrupo4 2:ffcd0494ec92 85
asjgrupo4 2:ffcd0494ec92 86 while(1) {
asjgrupo4 2:ffcd0494ec92 87 //wait(2);
asjgrupo4 2:ffcd0494ec92 88
asjgrupo4 2:ffcd0494ec92 89
asjgrupo4 2:ffcd0494ec92 90
asjgrupo4 2:ffcd0494ec92 91 if (GSM.readable()) {
asjgrupo4 2:ffcd0494ec92 92 readBuffer(buffer,100);
asjgrupo4 2:ffcd0494ec92 93
asjgrupo4 2:ffcd0494ec92 94 if(buffer[10]=='S'&& buffer[11]=='M'){
asjgrupo4 2:ffcd0494ec92 95 pc.printf("Llego mensaje\n\r ");
asjgrupo4 2:ffcd0494ec92 96 buffer[10]=' ';
asjgrupo4 2:ffcd0494ec92 97 buffer[11]=' ';
asjgrupo4 2:ffcd0494ec92 98 GSM.printf("AT+CMGR=%c\r\n",buffer[14]);
asjgrupo4 2:ffcd0494ec92 99 pc.printf("AT+CMGR=%c\r\n",buffer[14]);
asjgrupo4 2:ffcd0494ec92 100 }
asjgrupo4 2:ffcd0494ec92 101
asjgrupo4 2:ffcd0494ec92 102 if(buffer[68]=='C'&& buffer[69]=='3'&&buffer[70]=='B'&& buffer[71]=='7'&&buffer[72]=='1'&& buffer[73]=='C')//recibe mensaje Cor
asjgrupo4 2:ffcd0494ec92 103 {
asjgrupo4 2:ffcd0494ec92 104
asjgrupo4 2:ffcd0494ec92 105 pc.printf("El mensaje es Cor\n");
asjgrupo4 2:ffcd0494ec92 106 buffer[68]=' ';
asjgrupo4 2:ffcd0494ec92 107 buffer[69]=' ';
asjgrupo4 2:ffcd0494ec92 108 buffer[70]=' ';
asjgrupo4 2:ffcd0494ec92 109 buffer[71]=' ';
asjgrupo4 2:ffcd0494ec92 110 buffer[72]=' ';
asjgrupo4 2:ffcd0494ec92 111 buffer[73]=' ';
asjgrupo4 2:ffcd0494ec92 112
asjgrupo4 2:ffcd0494ec92 113
asjgrupo4 2:ffcd0494ec92 114 if(gps.sample()) {
asjgrupo4 2:ffcd0494ec92 115 frac_long=(int)abs(1000000*gps.longitude-(int)gps.longitude);
asjgrupo4 2:ffcd0494ec92 116 ent_long=(int)gps.longitude;
asjgrupo4 2:ffcd0494ec92 117 frac_lat=(int)abs(1000000*gps.latitude-(int)gps.latitude);
asjgrupo4 2:ffcd0494ec92 118 ent_lat=(int)gps.latitude;
asjgrupo4 2:ffcd0494ec92 119 // pc.printf("%d.%d,%d.%d\n",ent_long,frac_long,ent_lat,frac_lat);
asjgrupo4 2:ffcd0494ec92 120
asjgrupo4 2:ffcd0494ec92 121 lat1[0]=ent_lat+48;
asjgrupo4 2:ffcd0494ec92 122 lat1[1]='.';
asjgrupo4 2:ffcd0494ec92 123
asjgrupo4 2:ffcd0494ec92 124 for(z=6;z>=0;z--)
asjgrupo4 2:ffcd0494ec92 125 {
asjgrupo4 2:ffcd0494ec92 126 g= pow(10,0.0+z);
asjgrupo4 2:ffcd0494ec92 127 lat1[8-z]=(frac_lat/g)+48;
asjgrupo4 2:ffcd0494ec92 128 frac_lat=frac_lat%g;
asjgrupo4 2:ffcd0494ec92 129 }
asjgrupo4 2:ffcd0494ec92 130
asjgrupo4 2:ffcd0494ec92 131
asjgrupo4 2:ffcd0494ec92 132 lon1[0]='-';
asjgrupo4 2:ffcd0494ec92 133 ent_long=ent_long*-1;
asjgrupo4 2:ffcd0494ec92 134 lon1[1]=(ent_long/10)+48;
asjgrupo4 2:ffcd0494ec92 135 lon1[2]=(ent_long%10)+48;
asjgrupo4 2:ffcd0494ec92 136 lon1[3]='.';
asjgrupo4 2:ffcd0494ec92 137 for(z=7;z>=0;z--)
asjgrupo4 2:ffcd0494ec92 138 {
asjgrupo4 2:ffcd0494ec92 139 g= pow(10,0.0+z);
asjgrupo4 2:ffcd0494ec92 140 lon1[11-z]=(frac_long/g)+48;
asjgrupo4 2:ffcd0494ec92 141 frac_long=frac_long%g;
asjgrupo4 2:ffcd0494ec92 142 }
asjgrupo4 2:ffcd0494ec92 143
asjgrupo4 2:ffcd0494ec92 144
asjgrupo4 2:ffcd0494ec92 145
asjgrupo4 2:ffcd0494ec92 146
asjgrupo4 2:ffcd0494ec92 147 }
asjgrupo4 2:ffcd0494ec92 148
asjgrupo4 2:ffcd0494ec92 149
asjgrupo4 2:ffcd0494ec92 150 LENIN=30;
asjgrupo4 2:ffcd0494ec92 151
asjgrupo4 2:ffcd0494ec92 152 for(i=LENIN;i<(LENIN+9);i++)
asjgrupo4 2:ffcd0494ec92 153 {
asjgrupo4 2:ffcd0494ec92 154 DE[i]=lat1[i-LENIN];
asjgrupo4 2:ffcd0494ec92 155 }
asjgrupo4 2:ffcd0494ec92 156
asjgrupo4 2:ffcd0494ec92 157 LENIN=LENIN+9;
asjgrupo4 2:ffcd0494ec92 158
asjgrupo4 2:ffcd0494ec92 159 DE[i]=',';
asjgrupo4 2:ffcd0494ec92 160
asjgrupo4 2:ffcd0494ec92 161 LENIN=LENIN+1;
asjgrupo4 2:ffcd0494ec92 162
asjgrupo4 2:ffcd0494ec92 163 for(i=LENIN;i<(LENIN+12);i++)
asjgrupo4 2:ffcd0494ec92 164 {
asjgrupo4 2:ffcd0494ec92 165 DE[i]=lon1[i-LENIN];
asjgrupo4 2:ffcd0494ec92 166 }
asjgrupo4 2:ffcd0494ec92 167 LENIN=LENIN+12;
asjgrupo4 2:ffcd0494ec92 168
asjgrupo4 2:ffcd0494ec92 169
asjgrupo4 2:ffcd0494ec92 170
asjgrupo4 2:ffcd0494ec92 171 K=0;C=0;
asjgrupo4 2:ffcd0494ec92 172 for (i=0;i < LENIN;i++){
asjgrupo4 2:ffcd0494ec92 173 DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K);
asjgrupo4 2:ffcd0494ec92 174 if (DS[i]==0x00) {LENOUT=i; goto salir;}
asjgrupo4 2:ffcd0494ec92 175 K++;
asjgrupo4 2:ffcd0494ec92 176 if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
asjgrupo4 2:ffcd0494ec92 177 }
asjgrupo4 2:ffcd0494ec92 178
asjgrupo4 2:ffcd0494ec92 179 //--------------------------------------------------------------
asjgrupo4 2:ffcd0494ec92 180 salir:
asjgrupo4 2:ffcd0494ec92 181
asjgrupo4 2:ffcd0494ec92 182 GSM.printf("AT\r\n");//envia link con coordenadas
tony63 0:edc50cf04b46 183 wait(0.5);
tony63 0:edc50cf04b46 184 GSM.printf("AT+CNMI=1,1\r\n");
tony63 0:edc50cf04b46 185 wait(0.5);
tony63 0:edc50cf04b46 186 GSM.printf("AT+CMGF=0\r\n");
tony63 0:edc50cf04b46 187 wait(0.5);
tony63 0:edc50cf04b46 188 GSM.printf("ATE\r\n");
tony63 0:edc50cf04b46 189 wait(0.5);
tony63 0:edc50cf04b46 190 GSM.printf("CBST=0,0,1\r\n");
tony63 0:edc50cf04b46 191 wait(0.5);
asjgrupo4 2:ffcd0494ec92 192 GSM.printf("at+cmgs=%d\r\n",13+LENIN);
asjgrupo4 2:ffcd0494ec92 193 pc.printf("at+cmgs=%d\r\n",13+LENIN);
asjgrupo4 2:ffcd0494ec92 194 wait(0.5);
asjgrupo4 2:ffcd0494ec92 195 GSM.printf("0011000A9113315442760000AA"); //12 octetos + los octetos del mensaje
asjgrupo4 2:ffcd0494ec92 196 pc.printf("0011000A9113315442760000AA"); //12 octetos + los octetos del mensaje
asjgrupo4 2:ffcd0494ec92 197 //3113452467
asjgrupo4 2:ffcd0494ec92 198 if(LENIN<=15)
asjgrupo4 2:ffcd0494ec92 199 {
asjgrupo4 2:ffcd0494ec92 200 pc.printf("0");
asjgrupo4 2:ffcd0494ec92 201 GSM.printf("0");
asjgrupo4 2:ffcd0494ec92 202 pc.printf("%X",LENIN);
asjgrupo4 2:ffcd0494ec92 203 GSM.printf("%X",LENIN);
asjgrupo4 2:ffcd0494ec92 204 }
asjgrupo4 2:ffcd0494ec92 205 else{
asjgrupo4 2:ffcd0494ec92 206 pc.printf("%2X",LENIN);
asjgrupo4 2:ffcd0494ec92 207 GSM.printf("%2X",LENIN);
asjgrupo4 2:ffcd0494ec92 208 }
asjgrupo4 2:ffcd0494ec92 209
asjgrupo4 2:ffcd0494ec92 210 for (i=0;i < LENIN;i++){
asjgrupo4 2:ffcd0494ec92 211 if(DS[i]<=15)
asjgrupo4 2:ffcd0494ec92 212 {
asjgrupo4 2:ffcd0494ec92 213 pc.printf("0");
asjgrupo4 2:ffcd0494ec92 214 GSM.printf("0");
asjgrupo4 2:ffcd0494ec92 215 pc.printf("%X",DS[i]);
asjgrupo4 2:ffcd0494ec92 216 GSM.printf("%X",DS[i]);
asjgrupo4 2:ffcd0494ec92 217 }
asjgrupo4 2:ffcd0494ec92 218 else{
asjgrupo4 2:ffcd0494ec92 219 pc.printf("%2X",DS[i]&0x000000FF);
asjgrupo4 2:ffcd0494ec92 220 GSM.printf("%2X",DS[i]&0x000000FF);
asjgrupo4 2:ffcd0494ec92 221 }
asjgrupo4 2:ffcd0494ec92 222 }
asjgrupo4 2:ffcd0494ec92 223 //GSM.printf("%X",68); //12 octetos + los octetos del mensaje
asjgrupo4 2:ffcd0494ec92 224 //GSM.printf("9");//GSM.printf("%u",30);
asjgrupo4 2:ffcd0494ec92 225 wait(0.5);
asjgrupo4 2:ffcd0494ec92 226 GSM.putc(0x1A);
asjgrupo4 2:ffcd0494ec92 227
asjgrupo4 2:ffcd0494ec92 228 }
asjgrupo4 2:ffcd0494ec92 229
asjgrupo4 2:ffcd0494ec92 230
asjgrupo4 2:ffcd0494ec92 231 }
asjgrupo4 2:ffcd0494ec92 232
asjgrupo4 2:ffcd0494ec92 233 if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='3'&& buffer[71]=='7')//recibe mensaje On
asjgrupo4 2:ffcd0494ec92 234 {
asjgrupo4 2:ffcd0494ec92 235 on_off=1;
asjgrupo4 2:ffcd0494ec92 236 pc.printf("El mensaje es On\n");
asjgrupo4 2:ffcd0494ec92 237 buffer[68]=' ';
asjgrupo4 2:ffcd0494ec92 238 buffer[69]=' ';
asjgrupo4 2:ffcd0494ec92 239 buffer[70]=' ';
asjgrupo4 2:ffcd0494ec92 240 buffer[71]=' ';
asjgrupo4 2:ffcd0494ec92 241 GSM.printf("AT\r\n");//proto0colo envio de mensaje
asjgrupo4 2:ffcd0494ec92 242 wait(0.5);
asjgrupo4 2:ffcd0494ec92 243 GSM.printf("AT+CNMI=1,1\r\n");
tony63 0:edc50cf04b46 244 wait(0.5);
asjgrupo4 2:ffcd0494ec92 245 GSM.printf("AT+CMGF=0\r\n");
asjgrupo4 2:ffcd0494ec92 246 wait(0.5);
asjgrupo4 2:ffcd0494ec92 247 GSM.printf("ATE\r\n");
asjgrupo4 2:ffcd0494ec92 248 wait(0.5);
asjgrupo4 2:ffcd0494ec92 249 GSM.printf("CBST=0,0,1\r\n");
asjgrupo4 2:ffcd0494ec92 250 wait(0.5);
asjgrupo4 2:ffcd0494ec92 251 GSM.printf("at+cmgs=%d\r\n",21);
asjgrupo4 2:ffcd0494ec92 252 pc.printf("at+cmgs=%d\r\n",21);
asjgrupo4 2:ffcd0494ec92 253 wait(0.5);
asjgrupo4 2:ffcd0494ec92 254 GSM.printf("0011000A9113315442760000AA0945F7B8EC26A7C96F"); //12 octetos + los octetos del mensaje---devuelve mensaje encendido enciende un led que esta en PTC17
asjgrupo4 2:ffcd0494ec92 255 pc.printf("0011000A9113315442760000AA0945F7B8EC26A7C96F");
asjgrupo4 2:ffcd0494ec92 256 wait(0.5);
asjgrupo4 2:ffcd0494ec92 257 GSM.putc(0x1A);
asjgrupo4 2:ffcd0494ec92 258
asjgrupo4 2:ffcd0494ec92 259 }
asjgrupo4 2:ffcd0494ec92 260
asjgrupo4 2:ffcd0494ec92 261 if(buffer[68]=='4'&& buffer[69]=='F'&&buffer[70]=='B'&& buffer[71]=='3'&&buffer[72]=='1'&& buffer[73]=='9')//recibe mensaje Off
asjgrupo4 2:ffcd0494ec92 262 {
asjgrupo4 2:ffcd0494ec92 263 on_off=0;
asjgrupo4 2:ffcd0494ec92 264 pc.printf("El mensaje es Off\n");// se borra el mensaje
asjgrupo4 2:ffcd0494ec92 265 buffer[68]=' ';
asjgrupo4 2:ffcd0494ec92 266 buffer[69]=' ';
asjgrupo4 2:ffcd0494ec92 267 buffer[70]=' ';
asjgrupo4 2:ffcd0494ec92 268 buffer[71]=' ';
asjgrupo4 2:ffcd0494ec92 269 buffer[72]=' ';
asjgrupo4 2:ffcd0494ec92 270 buffer[73]=' ';
asjgrupo4 2:ffcd0494ec92 271 GSM.printf("AT\r\n");//protocolo de envio de mensaje
asjgrupo4 2:ffcd0494ec92 272 wait(0.5);
asjgrupo4 2:ffcd0494ec92 273 GSM.printf("AT+CNMI=1,1\r\n");
asjgrupo4 2:ffcd0494ec92 274 wait(0.5);
asjgrupo4 2:ffcd0494ec92 275 GSM.printf("AT+CMGF=0\r\n");
asjgrupo4 2:ffcd0494ec92 276 wait(0.5);
asjgrupo4 2:ffcd0494ec92 277 GSM.printf("ATE\r\n");
asjgrupo4 2:ffcd0494ec92 278 wait(0.5);
asjgrupo4 2:ffcd0494ec92 279 GSM.printf("CBST=0,0,1\r\n");
asjgrupo4 2:ffcd0494ec92 280 wait(0.5);
asjgrupo4 2:ffcd0494ec92 281 GSM.printf("at+cmgs=%d\r\n",20);
asjgrupo4 2:ffcd0494ec92 282 pc.printf("at+cmgs=%d\r\n",20);
asjgrupo4 2:ffcd0494ec92 283 wait(0.5);
asjgrupo4 2:ffcd0494ec92 284 GSM.printf("0011000A9113315442760000AA074178F81C26BF01"); //12 octetos + los octetos del mensaje----devuelve mensaje apagado--apaga el led de PTC17
asjgrupo4 2:ffcd0494ec92 285 pc.printf("0011000A9113315442760000AA074178F81C26BF01");
asjgrupo4 2:ffcd0494ec92 286 wait(0.5);
asjgrupo4 2:ffcd0494ec92 287 GSM.putc(0x1A);
asjgrupo4 2:ffcd0494ec92 288
asjgrupo4 2:ffcd0494ec92 289 }
asjgrupo4 2:ffcd0494ec92 290
asjgrupo4 2:ffcd0494ec92 291
tony63 0:edc50cf04b46 292 }
asjgrupo4 2:ffcd0494ec92 293
tony63 1:6b506dde0a6e 294
asjgrupo4 2:ffcd0494ec92 295 }
tony63 1:6b506dde0a6e 296 // buffer[i] contiene lo que regresa