Trabajo, en el cual se envia un mensaje al celular, el cual actua como modem, y en el mensaje esta para activar una alarma segun el mensaje que se envie

Dependencies:   DebouncedIn mbed

Fork of CLASEDELGSM by Gustavo Ramirez

Committer:
GermanD
Date:
Tue Nov 24 05:19:14 2015 +0000
Revision:
2:44e88001ce29
Parent:
1:6b506dde0a6e
Trabajo, en el cual se envia un mensaje al celular, el cual actua como modem, y en el mensaje esta para activar una alarma segun el mensaje que se envie

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"
tony63 0:edc50cf04b46 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"
tony63 0:edc50cf04b46 12 Timer t;
tony63 0:edc50cf04b46 13 DigitalOut LedVerde(LED2);
tony63 0:edc50cf04b46 14 DigitalOut LedRojo(LED1);
tony63 0:edc50cf04b46 15 DigitalOut LedAzul(LED3);
tony63 0:edc50cf04b46 16 DebouncedIn button1(PTC12); //señal que inicia el envio del mensaje
tony63 0:edc50cf04b46 17 Serial GSM(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z
tony63 0:edc50cf04b46 18 Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado.
tony63 0:edc50cf04b46 19 void Rx_interrupt();
tony63 0:edc50cf04b46 20 int position=0;
GermanD 2:44e88001ce29 21 int intentos=0;
tony63 0:edc50cf04b46 22 int lenpack=6;
GermanD 2:44e88001ce29 23 int ret=1;
tony63 0:edc50cf04b46 24 int longi=0;
tony63 1:6b506dde0a6e 25 char tel[11];
tony63 0:edc50cf04b46 26 char DE[50];
tony63 1:6b506dde0a6e 27 char buffer[100];
GermanD 2:44e88001ce29 28 char buffermsg[100];
GermanD 2:44e88001ce29 29 char buffer1[100];
tony63 1:6b506dde0a6e 30 char datos[100];
GermanD 2:44e88001ce29 31 char NUMBER[13];
GermanD 2:44e88001ce29 32 char resp[6];
GermanD 2:44e88001ce29 33 char CMT[]="+CMTI";
GermanD 2:44e88001ce29 34 char tam[2];
tony63 0:edc50cf04b46 35 int index;
tony63 0:edc50cf04b46 36 int count;
tony63 0:edc50cf04b46 37 int i = 0;
tony63 1:6b506dde0a6e 38 int j = 0;
tony63 0:edc50cf04b46 39 int c=0;
tony63 0:edc50cf04b46 40 unsigned char CtrlZ = 0x1A; // comodin de emision controlZ
tony63 0:edc50cf04b46 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];
tony63 0:edc50cf04b46 44 char char1;
tony63 0:edc50cf04b46 45 //Flush serial para el buffer
tony63 0:edc50cf04b46 46 void FlushGSM(void) {
tony63 0:edc50cf04b46 47 char1 = 0;
GermanD 2:44e88001ce29 48 while (GSM.readable()){ // lee lo que le entra por el puerto GSM
GermanD 2:44e88001ce29 49 char1 = GSM.getc();} // y lo pone en la variable hcar1
tony63 0:edc50cf04b46 50 return;}
tony63 0:edc50cf04b46 51
tony63 0:edc50cf04b46 52 void callback() {
tony63 0:edc50cf04b46 53 // Note: you need to actually read from the serial to clear the RX interrupt
tony63 0:edc50cf04b46 54 pc.printf("%c\n", GSM.getc());
tony63 0:edc50cf04b46 55
tony63 0:edc50cf04b46 56 }
GermanD 2:44e88001ce29 57 //****************************************************************************************************************
GermanD 2:44e88001ce29 58 //esta funcion de abajo lee todo un bufer hasta encontrar CR o LF y el resto lo rellena de
GermanD 2:44e88001ce29 59 //$, count es lo que va a leer.Lo leido lo mete en buffer que es una cadena previamente definida
GermanD 2:44e88001ce29 60 //incorpora medida de tiempo si se demora mas de tres segundos retorna fracaso con -1
GermanD 2:44e88001ce29 61 //****************************************************************************************************************
tony63 0:edc50cf04b46 62 int readBuffer(char *buffer,int count)
tony63 0:edc50cf04b46 63 {
tony63 0:edc50cf04b46 64 int i=0;
tony63 0:edc50cf04b46 65 t.start(); // start timer
tony63 0:edc50cf04b46 66 while(1) {
GermanD 2:44e88001ce29 67 while (GSM.readable()) { // leelo que está entrando por el GSM
GermanD 2:44e88001ce29 68 char c = GSM.getc(); // asigna el valor que entra a c
tony63 0:edc50cf04b46 69 if (c == '\r' || c == '\n') c = '$';
GermanD 2:44e88001ce29 70 buffer[i++] = c; // aumenta la posición del buffer y coloca c en ella
GermanD 2:44e88001ce29 71 if(i > count)break; // si i es mayor que lo que lee para y sale del ciclo infinito
tony63 0:edc50cf04b46 72 }
GermanD 2:44e88001ce29 73 if(i > count)break;
GermanD 2:44e88001ce29 74 if(t.read() > 3) { // si se demora mas de 3 segundos
GermanD 2:44e88001ce29 75 t.stop(); // para el reloj y
GermanD 2:44e88001ce29 76 t.reset(); // lo resetea
tony63 0:edc50cf04b46 77 break;
tony63 0:edc50cf04b46 78 }
tony63 0:edc50cf04b46 79 }
tony63 0:edc50cf04b46 80 wait(0.5);
tony63 0:edc50cf04b46 81 while(GSM.readable()) { // display the other thing..
tony63 0:edc50cf04b46 82 char c = GSM.getc();
tony63 0:edc50cf04b46 83 }
tony63 0:edc50cf04b46 84 return 0;
tony63 0:edc50cf04b46 85 }
GermanD 2:44e88001ce29 86 //********************************************************************************
tony63 0:edc50cf04b46 87 /* esta funcion de abajo limpia o borra todo un "buffer" de tamaño "count"
GermanD 2:44e88001ce29 88 lo revisa elemento por elemento y le mete el caracter null que indica fin de cadena
tony63 0:edc50cf04b46 89 no retorna nada
tony63 0:edc50cf04b46 90 */
tony63 0:edc50cf04b46 91 //***************************************************************************************
tony63 0:edc50cf04b46 92 void cleanBuffer(char *buffer, int count)
tony63 0:edc50cf04b46 93 {
tony63 0:edc50cf04b46 94 for(int i=0; i < count; i++) {
tony63 0:edc50cf04b46 95 buffer[i] = '\0';
tony63 0:edc50cf04b46 96 }
tony63 0:edc50cf04b46 97 }
tony63 0:edc50cf04b46 98 /* esta funcion de abajo envia un comando parametrizado como cadena
GermanD 2:44e88001ce29 99 puede ser un comando tipo AT
tony63 0:edc50cf04b46 100 */
tony63 0:edc50cf04b46 101 //***************************************************************************************
tony63 0:edc50cf04b46 102 void sendCmd(char *cmd)
tony63 0:edc50cf04b46 103 {
tony63 0:edc50cf04b46 104 GSM.puts(cmd);
tony63 0:edc50cf04b46 105 }
GermanD 2:44e88001ce29 106 //****************************************************************************************
tony63 0:edc50cf04b46 107 /* esta funcion de abajo espera la respuesta de un comando que debe ser identica a la cadena "resp" y un tiempo timeout"
tony63 0:edc50cf04b46 108 si todo sale bien retorna un cero que en la programacion hay que validar
tony63 0:edc50cf04b46 109 si algo sale mal ( no se parece o se demora mucho )retorna -1 que debera validarse con alguna expresion logica
tony63 0:edc50cf04b46 110 */
tony63 0:edc50cf04b46 111 //***************************************************************************************
tony63 0:edc50cf04b46 112 int waitForResp(char *resp, int timeout)
tony63 0:edc50cf04b46 113 {
GermanD 2:44e88001ce29 114 int len = strlen(resp); // mide la longitud del string
tony63 0:edc50cf04b46 115 int sum=0;
tony63 0:edc50cf04b46 116 t.start();
tony63 0:edc50cf04b46 117
tony63 0:edc50cf04b46 118 while(1) {
GermanD 2:44e88001ce29 119 if(GSM.readable()) {
GermanD 2:44e88001ce29 120 char c = GSM.getc(); // pone lo que le entra por GSM en la variable c
tony63 0:edc50cf04b46 121 sum = (c==resp[sum]) ? sum+1 : 0;// esta linea de C# sum se incrementa o se hace cero segun c
tony63 0:edc50cf04b46 122 if(sum == len)break; //ya acabo se sale
tony63 0:edc50cf04b46 123 }
tony63 0:edc50cf04b46 124 if(t.read() > timeout) { // time out chequea el tiempo minimo antes de salir perdiendo
tony63 0:edc50cf04b46 125 t.stop();
tony63 0:edc50cf04b46 126 t.reset();
GermanD 2:44e88001ce29 127 return -1; // devuelve -1 como "fallo"
tony63 0:edc50cf04b46 128 }
tony63 0:edc50cf04b46 129 }
tony63 0:edc50cf04b46 130 t.stop(); // stop timer antes de retornar
tony63 0:edc50cf04b46 131 t.reset(); // clear timer
tony63 0:edc50cf04b46 132 while(GSM.readable()) { // display the other thing..
tony63 0:edc50cf04b46 133 char c = GSM.getc();
tony63 0:edc50cf04b46 134 }
tony63 0:edc50cf04b46 135
tony63 0:edc50cf04b46 136 return 0;
tony63 0:edc50cf04b46 137 }
tony63 0:edc50cf04b46 138 /* esta funcion de abajo es muy completa e util se encarga de enviar el comando y esperar la respuesta
tony63 0:edc50cf04b46 139 si todo sale bien retorna un cero(herencia de las funciones contenedoras) que en la programacion hay que validar
tony63 0:edc50cf04b46 140 con alguna expresion logica
tony63 0:edc50cf04b46 141 */
tony63 0:edc50cf04b46 142 //***************************************************************************************
tony63 0:edc50cf04b46 143 int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout)
tony63 0:edc50cf04b46 144 {
tony63 0:edc50cf04b46 145 sendCmd(cmd);
tony63 0:edc50cf04b46 146 return waitForResp(resp,timeout);
tony63 0:edc50cf04b46 147 }
tony63 0:edc50cf04b46 148 /* esta funcion de abajo chequea que el modem este vivo envia AT y le contesta con OK y espera 2 segundos
tony63 0:edc50cf04b46 149 */
tony63 0:edc50cf04b46 150 //***************************************************************************************
tony63 0:edc50cf04b46 151 int powerCheck(void)// este comando se manda para verificar si el modem esta vivo o conectado
tony63 0:edc50cf04b46 152 {
tony63 0:edc50cf04b46 153 return sendCmdAndWaitForResp("AT\r\n", "OK", 2);
tony63 0:edc50cf04b46 154 }
tony63 0:edc50cf04b46 155 /* esta funcion de abajo chequea el estado de la sim card
tony63 0:edc50cf04b46 156 y si todo sale bien retorna un cero que en la programacion hay que validar
tony63 0:edc50cf04b46 157 con alguna expresion logica
tony63 0:edc50cf04b46 158 */
tony63 0:edc50cf04b46 159 //***************************************************************************************
tony63 0:edc50cf04b46 160 int checkSIMStatus(void)
tony63 0:edc50cf04b46 161 {
tony63 0:edc50cf04b46 162 char gprsBuffer[30];
tony63 0:edc50cf04b46 163 int count = 0;
tony63 0:edc50cf04b46 164 cleanBuffer(gprsBuffer,30);
tony63 0:edc50cf04b46 165 while(count < 3) {
GermanD 2:44e88001ce29 166 sendCmd("AT+CPIN?\r\n"); // envia el comando AT para ver que le devuelve
tony63 0:edc50cf04b46 167 readBuffer(gprsBuffer,30);
tony63 0:edc50cf04b46 168 if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) {
tony63 0:edc50cf04b46 169 break;
tony63 0:edc50cf04b46 170 }
tony63 0:edc50cf04b46 171 count++;
tony63 0:edc50cf04b46 172 wait(1);
tony63 0:edc50cf04b46 173 }
GermanD 2:44e88001ce29 174 // si la simcard no responde envia -1
GermanD 2:44e88001ce29 175 if(count == 3) {
tony63 0:edc50cf04b46 176 return -1;
tony63 0:edc50cf04b46 177 }
tony63 0:edc50cf04b46 178 return 0;
tony63 0:edc50cf04b46 179 }
tony63 0:edc50cf04b46 180 /* esta funcion de abajo chequea la calidad de la señal
GermanD 2:44e88001ce29 181 y si todo sale bien retorna con el valor de señal util o un -1 si no es aceptable, en la programacion hay que validar
tony63 0:edc50cf04b46 182 con alguna expresion logica
tony63 0:edc50cf04b46 183 */
tony63 0:edc50cf04b46 184 //***************************************************************************************
tony63 0:edc50cf04b46 185 int checkSignalStrength(void)
tony63 0:edc50cf04b46 186 {
tony63 0:edc50cf04b46 187 char gprsBuffer[100];
tony63 0:edc50cf04b46 188 int index,count = 0;
GermanD 2:44e88001ce29 189 cleanBuffer(gprsBuffer,100); // siempre hacemos esto para garantizar que el buffer esté limpio y no haga nada raro
tony63 0:edc50cf04b46 190 while(count < 3) {
GermanD 2:44e88001ce29 191 sendCmd("AT+CSQ\r\n"); // envia un comando al odem y para verificar si la señal está buena
GermanD 2:44e88001ce29 192 readBuffer(gprsBuffer,25); // lee lo que devuelve el modem desde el buffer
GermanD 2:44e88001ce29 193 if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) { // verifica que el nivel de cobertura sea bueno
tony63 0:edc50cf04b46 194 break;
tony63 0:edc50cf04b46 195 }
tony63 0:edc50cf04b46 196 count++;
tony63 0:edc50cf04b46 197 wait(1);
tony63 0:edc50cf04b46 198 }
tony63 0:edc50cf04b46 199 if(count == 3) {
GermanD 2:44e88001ce29 200 return -1; // si no es lo esperado devuelve un erro con -1
tony63 0:edc50cf04b46 201 }
tony63 0:edc50cf04b46 202 return index;
tony63 0:edc50cf04b46 203 }
tony63 0:edc50cf04b46 204
tony63 0:edc50cf04b46 205 /* esta funcion de abajo inicaliza el modem se compone de un grupo de subfunciones ya definidas previamente
tony63 0:edc50cf04b46 206 primero chequea que este vivo
tony63 0:edc50cf04b46 207 segundo chequea el estado de la simcard
tony63 0:edc50cf04b46 208 tercero chequea la intencidad de señal celular
tony63 0:edc50cf04b46 209 cuarto aplica la configuracion
tony63 0:edc50cf04b46 210 y si todo sale bien retorna un cero que en la programacion hay que validar
tony63 0:edc50cf04b46 211 con alguna expresion logica
tony63 0:edc50cf04b46 212 */
tony63 0:edc50cf04b46 213 //***************************************************************************************
tony63 0:edc50cf04b46 214 int init()
tony63 0:edc50cf04b46 215 {
GermanD 2:44e88001ce29 216 if (0 != sendCmdAndWaitForResp("AT\r\n", "OK", 3)){
GermanD 2:44e88001ce29 217 return -1;
GermanD 2:44e88001ce29 218 }
GermanD 2:44e88001ce29 219 if (0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", 3)){
GermanD 2:44e88001ce29 220 return -1;
GermanD 2:44e88001ce29 221 }
GermanD 2:44e88001ce29 222 if (0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", 3)){
tony63 0:edc50cf04b46 223 return -1;
GermanD 2:44e88001ce29 224 }
GermanD 2:44e88001ce29 225 if (0 != sendCmdAndWaitForResp("AT+CBST=0,0,1\r\n", "OK", 3)){
tony63 0:edc50cf04b46 226 return -1;
GermanD 2:44e88001ce29 227 }
GermanD 2:44e88001ce29 228 LedVerde=0;
GermanD 2:44e88001ce29 229 return 0;
GermanD 2:44e88001ce29 230 }
GermanD 2:44e88001ce29 231
tony63 0:edc50cf04b46 232 /* esta funcion de abajo intenta leer un mensaje de texto en formato PDU o HEX
tony63 0:edc50cf04b46 233 y si todo sale bien retorna un cero que en la programacion hay que validar
tony63 0:edc50cf04b46 234 con alguna expresion logica
tony63 0:edc50cf04b46 235 */
tony63 0:edc50cf04b46 236 //***************************************************************************************
tony63 0:edc50cf04b46 237 int readSMSpdu(char *message, int index)
tony63 0:edc50cf04b46 238 {
tony63 0:edc50cf04b46 239 int i = 0;
tony63 0:edc50cf04b46 240 char gprsBuffer[100];
tony63 0:edc50cf04b46 241 char *p,*s;
tony63 0:edc50cf04b46 242 GSM.printf("AT+CMGR=%d\r\n",index);
tony63 0:edc50cf04b46 243 cleanBuffer(gprsBuffer,100);
tony63 0:edc50cf04b46 244 readBuffer(gprsBuffer,100);
tony63 0:edc50cf04b46 245 if(NULL == ( s = strstr(gprsBuffer,"+CMGR"))) {
tony63 0:edc50cf04b46 246 return -1;
tony63 0:edc50cf04b46 247 }
tony63 0:edc50cf04b46 248 if(NULL != ( s = strstr(gprsBuffer,"+32"))) {
tony63 0:edc50cf04b46 249 p = s + 6;
tony63 0:edc50cf04b46 250 while((*p != '$')&&(i < 5)) {
tony63 0:edc50cf04b46 251 message[i++] = *(p++);
tony63 0:edc50cf04b46 252 }
tony63 0:edc50cf04b46 253 message[i] = '\0';
tony63 0:edc50cf04b46 254 }
tony63 0:edc50cf04b46 255 return 0;
tony63 0:edc50cf04b46 256 }
tony63 0:edc50cf04b46 257 /* esta funcion de abajo borra mensajes SMS del modem
tony63 0:edc50cf04b46 258 y si todo sale bien retorna un cero que en la programacion hay que validar
tony63 0:edc50cf04b46 259 con alguna expresion logica
tony63 0:edc50cf04b46 260 */
tony63 0:edc50cf04b46 261 //***************************************************************************************
tony63 0:edc50cf04b46 262 int deleteSMS(int index)
tony63 0:edc50cf04b46 263 {
tony63 0:edc50cf04b46 264 char cmd[32];
tony63 0:edc50cf04b46 265 snprintf(cmd,sizeof(cmd),"AT+CMGD=%d\r\n",index);
tony63 0:edc50cf04b46 266 sendCmd(cmd);
tony63 0:edc50cf04b46 267 return 0;
tony63 0:edc50cf04b46 268 }
GermanD 2:44e88001ce29 269 //************************************************************************************
tony63 0:edc50cf04b46 270
GermanD 2:44e88001ce29 271 //RUTINA PRINCIPAL*******************************************************************************************
tony63 0:edc50cf04b46 272 int main(void)
GermanD 2:44e88001ce29 273 {
GermanD 2:44e88001ce29 274 //configuramos los puertos seriales
GermanD 2:44e88001ce29 275 GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600
GermanD 2:44e88001ce29 276 GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART
tony63 0:edc50cf04b46 277 //apagamos los 3 leds
tony63 0:edc50cf04b46 278 LedVerde=1;
tony63 0:edc50cf04b46 279 LedRojo=1;
tony63 0:edc50cf04b46 280 LedAzul=1;
GermanD 2:44e88001ce29 281 //quito el eco del modem
GermanD 2:44e88001ce29 282 GSM.printf("ATE0\r\n");
GermanD 2:44e88001ce29 283 pc.printf("ATE0\r\n");
GermanD 2:44e88001ce29 284 for(i=0;i<6;i++){
GermanD 2:44e88001ce29 285 GSM.printf("AT+CMGD=%d\r\n",i);
GermanD 2:44e88001ce29 286 wait(0.2);
GermanD 2:44e88001ce29 287 }
GermanD 2:44e88001ce29 288 //cleanBuffer(buffer,10);
GermanD 2:44e88001ce29 289 //definicion de algunas variables
tony63 0:edc50cf04b46 290 lenpack=6; //tamaño de "ALARMA"
GermanD 2:44e88001ce29 291 //Configuro el Modem, le doy solo 10 intentos si esos fracasan se bloquea y prende intermitente el led rojo
GermanD 2:44e88001ce29 292 inicio:if(init()<0){
GermanD 2:44e88001ce29 293 intentos++;
GermanD 2:44e88001ce29 294 if (intentos==10){goto loop1;}
GermanD 2:44e88001ce29 295 goto inicio;
GermanD 2:44e88001ce29 296 }
GermanD 2:44e88001ce29 297 //cleanBuffer(buffer,50);
GermanD 2:44e88001ce29 298 //inicia el programa ciclico
GermanD 2:44e88001ce29 299 //esperar señales de alarma por boton1
GermanD 2:44e88001ce29 300 //se envia "Alarma1"
GermanD 2:44e88001ce29 301 //al telefono que envio mensaje antes
GermanD 2:44e88001ce29 302
GermanD 2:44e88001ce29 303 //*********************************************************************************************************************
GermanD 2:44e88001ce29 304 while(1){
GermanD 2:44e88001ce29 305 if (button1.falling())
GermanD 2:44e88001ce29 306 {
tony63 0:edc50cf04b46 307 wait(2);
tony63 0:edc50cf04b46 308 if (!button1)
GermanD 2:44e88001ce29 309 {
GermanD 2:44e88001ce29 310 //inicia el envio de un sms
GermanD 2:44e88001ce29 311 index=19;
GermanD 2:44e88001ce29 312 GSM.printf("AT+CMGS=%d\r\n",index);
GermanD 2:44e88001ce29 313 wait(0.2);
GermanD 2:44e88001ce29 314 GSM.printf("0011000A91");
GermanD 2:44e88001ce29 315 GSM.printf("%s",tel);
GermanD 2:44e88001ce29 316 GSM.printf("0000AA07417658DE0EC7");
GermanD 2:44e88001ce29 317 GSM.printf("\r\n");
GermanD 2:44e88001ce29 318 wait(0.2);
GermanD 2:44e88001ce29 319 GSM.putc(0x1A); //el mensaje ya fue enviado con esto
GermanD 2:44e88001ce29 320 for(i=0;i<6;i++){
GermanD 2:44e88001ce29 321 LedVerde=1;
GermanD 2:44e88001ce29 322 wait(0.5);
GermanD 2:44e88001ce29 323 LedVerde=0;
GermanD 2:44e88001ce29 324 wait(0.5);
GermanD 2:44e88001ce29 325 }
GermanD 2:44e88001ce29 326 }
GermanD 2:44e88001ce29 327 }
GermanD 2:44e88001ce29 328
GermanD 2:44e88001ce29 329
GermanD 2:44e88001ce29 330
GermanD 2:44e88001ce29 331 //inicia la recepcion de un mensaje de texto
GermanD 2:44e88001ce29 332 if (GSM.readable()) {
GermanD 2:44e88001ce29 333 readBuffer(buffer,100);
GermanD 2:44e88001ce29 334 pc.printf("%s\r\n",buffer);
GermanD 2:44e88001ce29 335 for(i=0;i<5;i++)
GermanD 2:44e88001ce29 336 {
GermanD 2:44e88001ce29 337 resp[i]=buffer[i];
GermanD 2:44e88001ce29 338 }
GermanD 2:44e88001ce29 339
GermanD 2:44e88001ce29 340 //el programa empieza a verificar que le llego el mensaje
GermanD 2:44e88001ce29 341 //para que le llegue la cadena larga de caracteres, hay se detecta el numero telefonico
GermanD 2:44e88001ce29 342 //ya que en la cadena nos envia caracteres "basura" que no necesitamos
GermanD 2:44e88001ce29 343
GermanD 2:44e88001ce29 344 pc.printf("%s\r\n",resp);
GermanD 2:44e88001ce29 345 if(strcmp("$$+CM",resp) == 0){ //COMPARA resp con "+CMTI"
GermanD 2:44e88001ce29 346 pc.printf("llego MSG\r\n");
GermanD 2:44e88001ce29 347 cleanBuffer(buffer,10);
GermanD 2:44e88001ce29 348 wait(0.5);
GermanD 2:44e88001ce29 349 GSM.printf("AT+CMGL=0\r\n");//envio comando para leer mensaje
GermanD 2:44e88001ce29 350 pc.printf("AT+CMGL=0\r\n");
GermanD 2:44e88001ce29 351 //if (GSM.readable()) {
GermanD 2:44e88001ce29 352 GSM.printf("AT+CMGD=0\r\n");
GermanD 2:44e88001ce29 353 readBuffer(buffer,100);
GermanD 2:44e88001ce29 354 pc.printf("%s\r\n",buffer);
GermanD 2:44e88001ce29 355 wait(5);
GermanD 2:44e88001ce29 356 //leer telefono
GermanD 2:44e88001ce29 357 for(i=0;i<10;i++){
GermanD 2:44e88001ce29 358 tel[i]=buffer[i+40];
GermanD 2:44e88001ce29 359 }
GermanD 2:44e88001ce29 360 pc.printf("%s-\r\n",tel);
GermanD 2:44e88001ce29 361 //leer tamaño
GermanD 2:44e88001ce29 362 for(i=0;i<2;i++){
GermanD 2:44e88001ce29 363 tam[i]=buffer[i+68];
GermanD 2:44e88001ce29 364 }
GermanD 2:44e88001ce29 365 pc.printf("%s-\r\n",tam);
GermanD 2:44e88001ce29 366 //leer mensaje
GermanD 2:44e88001ce29 367 for(i=0;i<14;i++){
GermanD 2:44e88001ce29 368 msg[i]=buffer[i+70];
GermanD 2:44e88001ce29 369 }
GermanD 2:44e88001ce29 370
GermanD 2:44e88001ce29 371 //lee el resto del mensaje de los valores que necesitamos al final de la cadena para hacer el codigo
GermanD 2:44e88001ce29 372
GermanD 2:44e88001ce29 373 pc.printf("%s-\r\n",msg);
GermanD 2:44e88001ce29 374 //decodificar mensaje
GermanD 2:44e88001ce29 375 //comparar mensaje
GermanD 2:44e88001ce29 376 if(strcmp("417658DE0EC700",msg) == 0){ //COMPARA resp con "417658DE0EC700" que es Alarma1
GermanD 2:44e88001ce29 377 LedVerde=1;
GermanD 2:44e88001ce29 378 LedAzul=0;
GermanD 2:44e88001ce29 379 wait(15);
GermanD 2:44e88001ce29 380 LedAzul=1;
GermanD 2:44e88001ce29 381 LedVerde=0;
GermanD 2:44e88001ce29 382 }
GermanD 2:44e88001ce29 383 // cuando se le envia el mensaje conociendo lo anterior, y si el mensaje es prender la alarma,
GermanD 2:44e88001ce29 384 // este preunde el led corresponiente indicando que se activo la alarma, con el mensaje que le llego al telefono
GermanD 2:44e88001ce29 385 if(strcmp("417658DE0ECB00",msg) == 0){ //COMPARA resp con "417658DE0ECB00" que es Alarma2
GermanD 2:44e88001ce29 386 LedVerde=1;
GermanD 2:44e88001ce29 387 LedRojo=0;
GermanD 2:44e88001ce29 388 wait(15);
GermanD 2:44e88001ce29 389 LedRojo=1;
GermanD 2:44e88001ce29 390 LedVerde=0;
GermanD 2:44e88001ce29 391 }
GermanD 2:44e88001ce29 392
GermanD 2:44e88001ce29 393
GermanD 2:44e88001ce29 394 //ejecurar orden //ya se ejecuto
GermanD 2:44e88001ce29 395 //08-D6379B1E569763 esto es Voltaje1
GermanD 2:44e88001ce29 396 //finalmente limpa la memoria para que pueda recibir nuevos mensajes
GermanD 2:44e88001ce29 397
GermanD 2:44e88001ce29 398 cleanBuffer(buffer,100);
GermanD 2:44e88001ce29 399
GermanD 2:44e88001ce29 400 }
tony63 1:6b506dde0a6e 401 }
GermanD 2:44e88001ce29 402
GermanD 2:44e88001ce29 403
GermanD 2:44e88001ce29 404 }
GermanD 2:44e88001ce29 405
GermanD 2:44e88001ce29 406
GermanD 2:44e88001ce29 407 //**********************************************************************************************************************
GermanD 2:44e88001ce29 408 loop1: LedRojo=0;
GermanD 2:44e88001ce29 409 wait(0.3);
GermanD 2:44e88001ce29 410 LedRojo=1;
GermanD 2:44e88001ce29 411 wait(0.3);
GermanD 2:44e88001ce29 412 goto loop1;
GermanD 2:44e88001ce29 413
tony63 0:edc50cf04b46 414 }