Tarea#5
Dependencies: mbed DebouncedIn
main.cpp@1:1189b5149db2, 2014-12-05 (annotated)
- Committer:
- omatorressan
- Date:
- Fri Dec 05 20:41:10 2014 +0000
- Revision:
- 1:1189b5149db2
- Parent:
- 0:1230a968d925
celular
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
omatorressan | 0:1230a968d925 | 1 | #include "mbed.h" |
omatorressan | 0:1230a968d925 | 2 | #include "DebouncedIn.h" |
omatorressan | 0:1230a968d925 | 3 | #include "stdio.h" |
omatorressan | 0:1230a968d925 | 4 | #include "string.h" |
omatorressan | 0:1230a968d925 | 5 | Timer t; |
omatorressan | 0:1230a968d925 | 6 | DigitalOut LedVerde(LED2); |
omatorressan | 0:1230a968d925 | 7 | DigitalOut LedRojo(LED1); |
omatorressan | 0:1230a968d925 | 8 | DigitalOut LedAzul(LED3); |
omatorressan | 0:1230a968d925 | 9 | DebouncedIn button1(PTC12); //inicia el envio |
omatorressan | 0:1230a968d925 | 10 | Serial GSM(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z |
omatorressan | 0:1230a968d925 | 11 | Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado. |
omatorressan | 0:1230a968d925 | 12 | void Rx_interrupt(); |
omatorressan | 0:1230a968d925 | 13 | int position=0; |
omatorressan | 0:1230a968d925 | 14 | int lenpack=6; |
omatorressan | 0:1230a968d925 | 15 | int longi=0; |
omatorressan | 0:1230a968d925 | 16 | char buffer1[13]; |
omatorressan | 0:1230a968d925 | 17 | char mensaje[100]; |
omatorressan | 0:1230a968d925 | 18 | char NUMBER[13]; |
omatorressan | 0:1230a968d925 | 19 | char tel[10]; |
omatorressan | 0:1230a968d925 | 20 | char DE[50]; |
omatorressan | 0:1230a968d925 | 21 | char buffer[512]; |
omatorressan | 0:1230a968d925 | 22 | char buffermsg[72]; |
omatorressan | 0:1230a968d925 | 23 | |
omatorressan | 0:1230a968d925 | 24 | int index; |
omatorressan | 0:1230a968d925 | 25 | int count; |
omatorressan | 0:1230a968d925 | 26 | int i = 0; |
omatorressan | 0:1230a968d925 | 27 | int c=0; |
omatorressan | 0:1230a968d925 | 28 | int cont=0; |
omatorressan | 0:1230a968d925 | 29 | unsigned char CtrlZ = 0x1A; // comodin |
omatorressan | 0:1230a968d925 | 30 | bool Flag = false; // Bandera |
omatorressan | 0:1230a968d925 | 31 | char r[]=""; //Cadena de recepción |
omatorressan | 0:1230a968d925 | 32 | char msg[256]; |
omatorressan | 0:1230a968d925 | 33 | char char1; //Flush serial para el buffer |
omatorressan | 0:1230a968d925 | 34 | void FlushGSM(void) { |
omatorressan | 0:1230a968d925 | 35 | char1 = 0; |
omatorressan | 0:1230a968d925 | 36 | while (GSM.readable()){ |
omatorressan | 0:1230a968d925 | 37 | char1 = GSM.getc();} |
omatorressan | 0:1230a968d925 | 38 | return;} |
omatorressan | 0:1230a968d925 | 39 | |
omatorressan | 0:1230a968d925 | 40 | void callback() { |
omatorressan | 0:1230a968d925 | 41 | |
omatorressan | 0:1230a968d925 | 42 | pc.printf("%c\n", GSM.getc()); |
omatorressan | 0:1230a968d925 | 43 | |
omatorressan | 0:1230a968d925 | 44 | } |
omatorressan | 0:1230a968d925 | 45 | |
omatorressan | 0:1230a968d925 | 46 | int readBuffer(char *buffer,int count) |
omatorressan | 0:1230a968d925 | 47 | { |
omatorressan | 0:1230a968d925 | 48 | int i=0; |
omatorressan | 0:1230a968d925 | 49 | t.start(); // inicia el timmer |
omatorressan | 0:1230a968d925 | 50 | while(1) { |
omatorressan | 0:1230a968d925 | 51 | while (GSM.readable()) { |
omatorressan | 0:1230a968d925 | 52 | char c = GSM.getc(); |
omatorressan | 0:1230a968d925 | 53 | if (c == '\r' || c == '\n') c = '$'; |
omatorressan | 0:1230a968d925 | 54 | buffer[i++] = c; |
omatorressan | 0:1230a968d925 | 55 | if(i > count)break; |
omatorressan | 0:1230a968d925 | 56 | } |
omatorressan | 0:1230a968d925 | 57 | if(i > count)break; |
omatorressan | 0:1230a968d925 | 58 | if(t.read() > 3) { |
omatorressan | 0:1230a968d925 | 59 | t.stop(); |
omatorressan | 0:1230a968d925 | 60 | t.reset(); |
omatorressan | 0:1230a968d925 | 61 | break; |
omatorressan | 0:1230a968d925 | 62 | } |
omatorressan | 0:1230a968d925 | 63 | } |
omatorressan | 0:1230a968d925 | 64 | wait(0.5); |
omatorressan | 0:1230a968d925 | 65 | while(GSM.readable()) { // display the other thing.. |
omatorressan | 0:1230a968d925 | 66 | char c = GSM.getc(); |
omatorressan | 0:1230a968d925 | 67 | } |
omatorressan | 0:1230a968d925 | 68 | return 0; |
omatorressan | 0:1230a968d925 | 69 | } |
omatorressan | 0:1230a968d925 | 70 | |
omatorressan | 0:1230a968d925 | 71 | |
omatorressan | 0:1230a968d925 | 72 | |
omatorressan | 0:1230a968d925 | 73 | void cleanBuffer(char *buffer, int count) |
omatorressan | 0:1230a968d925 | 74 | { |
omatorressan | 0:1230a968d925 | 75 | for(int i=0; i < count; i++) { |
omatorressan | 0:1230a968d925 | 76 | buffer[i] = '\0'; |
omatorressan | 0:1230a968d925 | 77 | } |
omatorressan | 0:1230a968d925 | 78 | } |
omatorressan | 0:1230a968d925 | 79 | /* la funcion envia un comando parametrizado |
omatorressan | 0:1230a968d925 | 80 | */ |
omatorressan | 0:1230a968d925 | 81 | |
omatorressan | 0:1230a968d925 | 82 | |
omatorressan | 0:1230a968d925 | 83 | void sendCmd(char *cmd) |
omatorressan | 0:1230a968d925 | 84 | { |
omatorressan | 0:1230a968d925 | 85 | GSM.puts(cmd); |
omatorressan | 0:1230a968d925 | 86 | } |
omatorressan | 0:1230a968d925 | 87 | /* la funcion espera la respuesta de un comando que debe ser identica a la cadena "resp" y un tiempo timeout" |
omatorressan | 0:1230a968d925 | 88 | si todo sale bien retorna un cero que en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 89 | si algo sale mal ( no se parece o se demora mucho )retorna -1 que debera validarse con alguna expresion logica |
omatorressan | 0:1230a968d925 | 90 | */ |
omatorressan | 0:1230a968d925 | 91 | // |
omatorressan | 0:1230a968d925 | 92 | int waitForResp(char *resp, int timeout) |
omatorressan | 0:1230a968d925 | 93 | { |
omatorressan | 0:1230a968d925 | 94 | int len = strlen(resp); |
omatorressan | 0:1230a968d925 | 95 | int sum=0; |
omatorressan | 0:1230a968d925 | 96 | t.start(); |
omatorressan | 0:1230a968d925 | 97 | |
omatorressan | 0:1230a968d925 | 98 | while(1) { |
omatorressan | 0:1230a968d925 | 99 | if(GSM.readable()) { |
omatorressan | 0:1230a968d925 | 100 | char c = GSM.getc(); |
omatorressan | 0:1230a968d925 | 101 | sum = (c==resp[sum]) ? sum+1 : 0;//sum se incrementa o se hace cero segun c |
omatorressan | 0:1230a968d925 | 102 | if(sum == len)break; //termina |
omatorressan | 0:1230a968d925 | 103 | } |
omatorressan | 0:1230a968d925 | 104 | if(t.read() > timeout) { // time out revisa el tiempo minimo antes de salir perdiendo |
omatorressan | 0:1230a968d925 | 105 | t.stop(); |
omatorressan | 0:1230a968d925 | 106 | t.reset(); |
omatorressan | 0:1230a968d925 | 107 | return -1; |
omatorressan | 0:1230a968d925 | 108 | } |
omatorressan | 0:1230a968d925 | 109 | } |
omatorressan | 0:1230a968d925 | 110 | t.stop(); // stop timer antes de retornar |
omatorressan | 0:1230a968d925 | 111 | t.reset(); // clear timer |
omatorressan | 0:1230a968d925 | 112 | while(GSM.readable()) { // display the other thing.. |
omatorressan | 0:1230a968d925 | 113 | char c = GSM.getc(); |
omatorressan | 0:1230a968d925 | 114 | } |
omatorressan | 0:1230a968d925 | 115 | |
omatorressan | 0:1230a968d925 | 116 | return 0; |
omatorressan | 0:1230a968d925 | 117 | } |
omatorressan | 0:1230a968d925 | 118 | /* esta funcion de abajo es muy completa e util se encarga de enviar el comando y esperar la respuesta |
omatorressan | 0:1230a968d925 | 119 | si todo sale bien retorna un cero(herencia de las funciones contenedoras) que en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 120 | con alguna expresion logica |
omatorressan | 0:1230a968d925 | 121 | */ |
omatorressan | 0:1230a968d925 | 122 | // |
omatorressan | 0:1230a968d925 | 123 | int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout) |
omatorressan | 0:1230a968d925 | 124 | { |
omatorressan | 0:1230a968d925 | 125 | sendCmd(cmd); |
omatorressan | 0:1230a968d925 | 126 | return waitForResp(resp,timeout); |
omatorressan | 0:1230a968d925 | 127 | } |
omatorressan | 0:1230a968d925 | 128 | /* esta funcion de abajo chequea que el modem este vivo envia AT y le contesta con OK y espera 2 segundos |
omatorressan | 0:1230a968d925 | 129 | */ |
omatorressan | 0:1230a968d925 | 130 | // |
omatorressan | 0:1230a968d925 | 131 | int powerCheck(void)// este comando se manda para verificar si el modem esta vivo o conectado |
omatorressan | 0:1230a968d925 | 132 | { |
omatorressan | 0:1230a968d925 | 133 | return sendCmdAndWaitForResp("AT\r\n", "OK", 2); |
omatorressan | 0:1230a968d925 | 134 | } |
omatorressan | 0:1230a968d925 | 135 | /* esta funcion de abajo chequea el estado de la sim card |
omatorressan | 0:1230a968d925 | 136 | y si todo sale bien retorna un cero que en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 137 | con alguna expresion logica |
omatorressan | 0:1230a968d925 | 138 | */ |
omatorressan | 0:1230a968d925 | 139 | // |
omatorressan | 0:1230a968d925 | 140 | int checkSIMStatus(void) |
omatorressan | 0:1230a968d925 | 141 | { |
omatorressan | 0:1230a968d925 | 142 | char gprsBuffer[30]; |
omatorressan | 0:1230a968d925 | 143 | int count = 0; |
omatorressan | 0:1230a968d925 | 144 | cleanBuffer(gprsBuffer,30); |
omatorressan | 0:1230a968d925 | 145 | while(count < 3) { |
omatorressan | 0:1230a968d925 | 146 | sendCmd("AT+CPIN?\r\n"); |
omatorressan | 0:1230a968d925 | 147 | readBuffer(gprsBuffer,30); |
omatorressan | 0:1230a968d925 | 148 | if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) { |
omatorressan | 0:1230a968d925 | 149 | break; |
omatorressan | 0:1230a968d925 | 150 | } |
omatorressan | 0:1230a968d925 | 151 | count++; |
omatorressan | 0:1230a968d925 | 152 | wait(1); |
omatorressan | 0:1230a968d925 | 153 | } |
omatorressan | 0:1230a968d925 | 154 | |
omatorressan | 0:1230a968d925 | 155 | if(count == 3) { |
omatorressan | 0:1230a968d925 | 156 | return -1; |
omatorressan | 0:1230a968d925 | 157 | } |
omatorressan | 0:1230a968d925 | 158 | return 0; |
omatorressan | 0:1230a968d925 | 159 | } |
omatorressan | 0:1230a968d925 | 160 | /* esta funcion de abajo chequea la calidad de la señal |
omatorressan | 0:1230a968d925 | 161 | y si todo sale bien retorna cun el valor de señal util o un -1 si nop es aceptable, en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 162 | con alguna expresion logica |
omatorressan | 0:1230a968d925 | 163 | */ |
omatorressan | 0:1230a968d925 | 164 | // |
omatorressan | 0:1230a968d925 | 165 | int checkSignalStrength(void) |
omatorressan | 0:1230a968d925 | 166 | { |
omatorressan | 0:1230a968d925 | 167 | char gprsBuffer[100]; |
omatorressan | 0:1230a968d925 | 168 | int index,count = 0; |
omatorressan | 0:1230a968d925 | 169 | cleanBuffer(gprsBuffer,100); |
omatorressan | 0:1230a968d925 | 170 | while(count < 3) { |
omatorressan | 0:1230a968d925 | 171 | sendCmd("AT+CSQ\r\n"); |
omatorressan | 0:1230a968d925 | 172 | readBuffer(gprsBuffer,25); |
omatorressan | 0:1230a968d925 | 173 | if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) { |
omatorressan | 0:1230a968d925 | 174 | break; |
omatorressan | 0:1230a968d925 | 175 | } |
omatorressan | 0:1230a968d925 | 176 | count++; |
omatorressan | 0:1230a968d925 | 177 | wait(1); |
omatorressan | 0:1230a968d925 | 178 | } |
omatorressan | 0:1230a968d925 | 179 | if(count == 3) { |
omatorressan | 0:1230a968d925 | 180 | return -1; |
omatorressan | 0:1230a968d925 | 181 | } |
omatorressan | 0:1230a968d925 | 182 | return index; |
omatorressan | 0:1230a968d925 | 183 | } |
omatorressan | 0:1230a968d925 | 184 | /* la funcion configura el modem con comandas AT |
omatorressan | 0:1230a968d925 | 185 | y si se completa el proceso retorna un cero que en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 186 | con alguna expresion logica pero si no, retorna un -1 |
omatorressan | 0:1230a968d925 | 187 | */ |
omatorressan | 0:1230a968d925 | 188 | // |
omatorressan | 0:1230a968d925 | 189 | int settingSMS() //esta funcion se invoca para configurar el modem al principio |
omatorressan | 0:1230a968d925 | 190 | { |
omatorressan | 0:1230a968d925 | 191 | if(0 != sendCmdAndWaitForResp("AT\r\n", "OK", 1)) { |
omatorressan | 0:1230a968d925 | 192 | return -1; |
omatorressan | 0:1230a968d925 | 193 | } |
omatorressan | 0:1230a968d925 | 194 | if(0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", 1)) { |
omatorressan | 0:1230a968d925 | 195 | return -1; |
omatorressan | 0:1230a968d925 | 196 | } |
omatorressan | 0:1230a968d925 | 197 | if(0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", 1)) { |
omatorressan | 0:1230a968d925 | 198 | return -1; |
omatorressan | 0:1230a968d925 | 199 | } |
omatorressan | 0:1230a968d925 | 200 | if(0 != sendCmdAndWaitForResp("ATE\r\n", "OK", 1)) { |
omatorressan | 0:1230a968d925 | 201 | return -1; |
omatorressan | 0:1230a968d925 | 202 | } |
omatorressan | 0:1230a968d925 | 203 | if(0 != sendCmdAndWaitForResp("CBST=0,0,1\r\n", "OK", 1)) { |
omatorressan | 0:1230a968d925 | 204 | return -1; |
omatorressan | 0:1230a968d925 | 205 | } |
omatorressan | 0:1230a968d925 | 206 | return 0; |
omatorressan | 0:1230a968d925 | 207 | } |
omatorressan | 0:1230a968d925 | 208 | |
omatorressan | 0:1230a968d925 | 209 | |
omatorressan | 0:1230a968d925 | 210 | /* la funcion que inicaliza el modem se compone de un grupo de subfunciones |
omatorressan | 0:1230a968d925 | 211 | primero chequea que este "vivo" |
omatorressan | 0:1230a968d925 | 212 | segundo chequea el estado de la simcard |
omatorressan | 0:1230a968d925 | 213 | tercero chequea la intencidad de señal celular |
omatorressan | 0:1230a968d925 | 214 | cuarto aplica la configuracion |
omatorressan | 0:1230a968d925 | 215 | y si todo sale bien retorna un cero que en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 216 | con alguna expresion logica |
omatorressan | 0:1230a968d925 | 217 | */ |
omatorressan | 0:1230a968d925 | 218 | // |
omatorressan | 0:1230a968d925 | 219 | int init() |
omatorressan | 0:1230a968d925 | 220 | { |
omatorressan | 0:1230a968d925 | 221 | for(int i = 0; i < 3; i++){ |
omatorressan | 0:1230a968d925 | 222 | sendCmdAndWaitForResp("AT\r\n", "OK", 1); |
omatorressan | 0:1230a968d925 | 223 | wait(0.5); |
omatorressan | 0:1230a968d925 | 224 | } |
omatorressan | 0:1230a968d925 | 225 | if(0 != checkSIMStatus()) { |
omatorressan | 0:1230a968d925 | 226 | return -1; |
omatorressan | 0:1230a968d925 | 227 | } |
omatorressan | 0:1230a968d925 | 228 | if(checkSignalStrength()<1) { |
omatorressan | 0:1230a968d925 | 229 | return -1; |
omatorressan | 0:1230a968d925 | 230 | } |
omatorressan | 0:1230a968d925 | 231 | |
omatorressan | 0:1230a968d925 | 232 | GSM.attach(&Rx_interrupt, Serial::RxIrq); |
omatorressan | 0:1230a968d925 | 233 | return 0; |
omatorressan | 0:1230a968d925 | 234 | } |
omatorressan | 0:1230a968d925 | 235 | /* la funcion intenta leer un mensaje de texto en formato PDU o HEX |
omatorressan | 0:1230a968d925 | 236 | y si todo sale bien retorna un cero que en la programacion hay que validar |
omatorressan | 0:1230a968d925 | 237 | con alguna expresion logica |
omatorressan | 0:1230a968d925 | 238 | */ |
omatorressan | 0:1230a968d925 | 239 | // |
omatorressan | 0:1230a968d925 | 240 | int readSMSpdu(char *message, int index) |
omatorressan | 0:1230a968d925 | 241 | { |
omatorressan | 0:1230a968d925 | 242 | int i = 0; |
omatorressan | 0:1230a968d925 | 243 | char gprsBuffer[100]; |
omatorressan | 0:1230a968d925 | 244 | char *p,*s; |
omatorressan | 0:1230a968d925 | 245 | GSM.printf("AT+CMGR=%d\r\n",index); |
omatorressan | 0:1230a968d925 | 246 | cleanBuffer(gprsBuffer,100); |
omatorressan | 0:1230a968d925 | 247 | readBuffer(gprsBuffer,100); |
omatorressan | 0:1230a968d925 | 248 | if(NULL == ( s = strstr(gprsBuffer,"+CMGR"))) { |
omatorressan | 0:1230a968d925 | 249 | return -1; |
omatorressan | 0:1230a968d925 | 250 | } |
omatorressan | 0:1230a968d925 | 251 | if(NULL != ( s = strstr(gprsBuffer,"+32"))) { |
omatorressan | 0:1230a968d925 | 252 | p = s + 6; |
omatorressan | 0:1230a968d925 | 253 | while((*p != '$')&&(i < 5)) { |
omatorressan | 0:1230a968d925 | 254 | message[i++] = *(p++); |
omatorressan | 0:1230a968d925 | 255 | } |
omatorressan | 0:1230a968d925 | 256 | message[i] = '\0'; |
omatorressan | 0:1230a968d925 | 257 | } |
omatorressan | 0:1230a968d925 | 258 | return 0; |
omatorressan | 0:1230a968d925 | 259 | } |
omatorressan | 0:1230a968d925 | 260 | /* la funcion borra mensajes SMS del modem |
omatorressan | 0:1230a968d925 | 261 | |
omatorressan | 0:1230a968d925 | 262 | */ |
omatorressan | 0:1230a968d925 | 263 | // |
omatorressan | 0:1230a968d925 | 264 | int deleteSMS(int index) |
omatorressan | 0:1230a968d925 | 265 | { |
omatorressan | 0:1230a968d925 | 266 | char cmd[32]; |
omatorressan | 0:1230a968d925 | 267 | snprintf(cmd,sizeof(cmd),"AT+CMGD=%d\r\n",index); |
omatorressan | 0:1230a968d925 | 268 | sendCmd(cmd); |
omatorressan | 0:1230a968d925 | 269 | return 0; |
omatorressan | 0:1230a968d925 | 270 | } |
omatorressan | 0:1230a968d925 | 271 | // |
omatorressan | 0:1230a968d925 | 272 | |
omatorressan | 0:1230a968d925 | 273 | // |
omatorressan | 0:1230a968d925 | 274 | void Rx_interrupt(){ |
omatorressan | 0:1230a968d925 | 275 | } |
omatorressan | 0:1230a968d925 | 276 | /* |
omatorressan | 0:1230a968d925 | 277 | readBuffer(buffer,6); |
omatorressan | 0:1230a968d925 | 278 | if(strncmp(buffer, "+CMTI", 5)){ |
omatorressan | 0:1230a968d925 | 279 | wait(1); |
omatorressan | 0:1230a968d925 | 280 | GSM.printf("AT+CMGL=%d\r\n",0); |
omatorressan | 0:1230a968d925 | 281 | readBuffer(buffer,100);} |
omatorressan | 0:1230a968d925 | 282 | if(strncmp(buffer, "+CMGL:", 5)){ |
omatorressan | 0:1230a968d925 | 283 | for (i=0;i<31;i++){ |
omatorressan | 0:1230a968d925 | 284 | buffer[5+i]=c; // 32 de basura |
omatorressan | 0:1230a968d925 | 285 | } |
omatorressan | 0:1230a968d925 | 286 | } |
omatorressan | 0:1230a968d925 | 287 | for (i=0;i<10;i++){ |
omatorressan | 0:1230a968d925 | 288 | buffer[36+i]=tel[i]; // numero telefonico |
omatorressan | 0:1230a968d925 | 289 | } |
omatorressan | 0:1230a968d925 | 290 | for (i=0;i<18;i++){ |
omatorressan | 0:1230a968d925 | 291 | buffer[46+i]=c; // 18 de basura |
omatorressan | 0:1230a968d925 | 292 | } |
omatorressan | 0:1230a968d925 | 293 | for (i=0;i<2;i++){ |
omatorressan | 0:1230a968d925 | 294 | buffer[64+i]=tel[i]; // tamaño de septetos |
omatorressan | 0:1230a968d925 | 295 | } |
omatorressan | 0:1230a968d925 | 296 | for (i=0;i<30;i++){ |
omatorressan | 0:1230a968d925 | 297 | buffer[66+i]=DE[i]; // datos en octetos hex |
omatorressan | 0:1230a968d925 | 298 | if (buffer[i]=='\0'){ |
omatorressan | 0:1230a968d925 | 299 | } |
omatorressan | 0:1230a968d925 | 300 | */ |
omatorressan | 0:1230a968d925 | 301 | |
omatorressan | 0:1230a968d925 | 302 | |
omatorressan | 0:1230a968d925 | 303 | |
omatorressan | 0:1230a968d925 | 304 | int main(void) |
omatorressan | 0:1230a968d925 | 305 | { |
omatorressan | 0:1230a968d925 | 306 | |
omatorressan | 0:1230a968d925 | 307 | |
omatorressan | 0:1230a968d925 | 308 | |
omatorressan | 0:1230a968d925 | 309 | //NVIC_DisableIRQ(UART1_IRQn); |
omatorressan | 0:1230a968d925 | 310 | //apagamos los 3 leds |
omatorressan | 0:1230a968d925 | 311 | LedVerde=1; |
omatorressan | 0:1230a968d925 | 312 | LedRojo=1; |
omatorressan | 0:1230a968d925 | 313 | LedAzul=1; |
omatorressan | 0:1230a968d925 | 314 | lenpack=6; //tamaño de "ALARMA" |
omatorressan | 0:1230a968d925 | 315 | GSM.baud(9600);//actualiza los baudios de la FRDMKL25Z en 9600 |
omatorressan | 0:1230a968d925 | 316 | GSM.format(8,Serial::None,1); //actualiza el formato de los datos de la UART |
omatorressan | 0:1230a968d925 | 317 | //se configura el modem GSM |
omatorressan | 0:1230a968d925 | 318 | GSM.printf("AT\r\n"); |
omatorressan | 0:1230a968d925 | 319 | wait(0.5); |
omatorressan | 0:1230a968d925 | 320 | GSM.printf("AT+CNMI=1,1\r\n"); |
omatorressan | 0:1230a968d925 | 321 | wait(0.5); |
omatorressan | 0:1230a968d925 | 322 | GSM.printf("AT+CMGF=0\r\n"); |
omatorressan | 0:1230a968d925 | 323 | wait(0.5); |
omatorressan | 0:1230a968d925 | 324 | GSM.printf("ATE\r\n"); |
omatorressan | 0:1230a968d925 | 325 | wait(0.5); |
omatorressan | 0:1230a968d925 | 326 | GSM.printf("CBST=0,0,1\r\n"); |
omatorressan | 0:1230a968d925 | 327 | wait(0.5); |
omatorressan | 0:1230a968d925 | 328 | LedVerde=0; |
omatorressan | 0:1230a968d925 | 329 | |
omatorressan | 0:1230a968d925 | 330 | //if(0!= init()){ //se configura y chequea el modem GSM |
omatorressan | 0:1230a968d925 | 331 | // LedRojo=0; |
omatorressan | 0:1230a968d925 | 332 | //} |
omatorressan | 0:1230a968d925 | 333 | |
omatorressan | 0:1230a968d925 | 334 | |
omatorressan | 0:1230a968d925 | 335 | |
omatorressan | 0:1230a968d925 | 336 | while(1){ |
omatorressan | 0:1230a968d925 | 337 | |
omatorressan | 0:1230a968d925 | 338 | if (button1.falling()) |
omatorressan | 0:1230a968d925 | 339 | { LedVerde=1; |
omatorressan | 0:1230a968d925 | 340 | wait(2); |
omatorressan | 0:1230a968d925 | 341 | if (!button1) |
omatorressan | 0:1230a968d925 | 342 | {LedVerde=0; |
omatorressan | 0:1230a968d925 | 343 | index=20; |
omatorressan | 0:1230a968d925 | 344 | //GSM.printf("AT+CNMI=1,1\r\n"); //configuracion inicial del MODEM! |
omatorressan | 0:1230a968d925 | 345 | GSM.printf("AT+CMGS=%d\r\n",index); |
omatorressan | 0:1230a968d925 | 346 | wait(0.2); |
omatorressan | 0:1230a968d925 | 347 | GSM.printf("0011000A91037130590900AA08416650DA0C8262"); //esto es "ALARMA 1 " |
omatorressan | 0:1230a968d925 | 348 | wait(0.5); |
omatorressan | 0:1230a968d925 | 349 | GSM.putc((char)0x1A); //esto es controlZ |
omatorressan | 0:1230a968d925 | 350 | LedVerde=1; |
omatorressan | 0:1230a968d925 | 351 | LedRojo=0; //se prende |
omatorressan | 0:1230a968d925 | 352 | wait(3); |
omatorressan | 0:1230a968d925 | 353 | LedRojo=1; // se apaga |
omatorressan | 0:1230a968d925 | 354 | LedVerde=0; |
omatorressan | 0:1230a968d925 | 355 | } |
omatorressan | 0:1230a968d925 | 356 | } |
omatorressan | 0:1230a968d925 | 357 | |
omatorressan | 0:1230a968d925 | 358 | if (GSM.readable()) { |
omatorressan | 0:1230a968d925 | 359 | readBuffer(buffer,100); |
omatorressan | 0:1230a968d925 | 360 | pc.printf("buffer= %s\n\r ",buffer); |
omatorressan | 0:1230a968d925 | 361 | pc.printf("buffer= %c %c\n\r ",buffer[10],buffer[11]); |
omatorressan | 0:1230a968d925 | 362 | if(buffer[67]=='A'){for(i=0;i<86;i++) |
omatorressan | 0:1230a968d925 | 363 | {buffermsg[i]=buffer[i];} |
omatorressan | 0:1230a968d925 | 364 | pc.printf("mensaje= %s\n\r ",buffermsg); |
omatorressan | 0:1230a968d925 | 365 | pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]); |
omatorressan | 0:1230a968d925 | 366 | buffer[67]='c'; |
omatorressan | 0:1230a968d925 | 367 | } |
omatorressan | 0:1230a968d925 | 368 | |
omatorressan | 0:1230a968d925 | 369 | if(buffer[10]=='S'&& buffer[11]=='M'){ |
omatorressan | 0:1230a968d925 | 370 | for(i=0;i<5;i++) |
omatorressan | 0:1230a968d925 | 371 | {buffer1[i]=buffer[2+i];} |
omatorressan | 0:1230a968d925 | 372 | pc.printf("buffer1= %s\n\r ",buffer1); |
omatorressan | 0:1230a968d925 | 373 | buffer[10]='c'; |
omatorressan | 0:1230a968d925 | 374 | buffer[11]='c'; |
omatorressan | 0:1230a968d925 | 375 | } |
omatorressan | 0:1230a968d925 | 376 | if(buffer1[3]=='T'){pc.printf("AT+CMGL=0\n\r"); |
omatorressan | 0:1230a968d925 | 377 | wait(0.5); |
omatorressan | 0:1230a968d925 | 378 | GSM.printf("AT+CMGL=0\r\n"); |
omatorressan | 0:1230a968d925 | 379 | buffer1[3]='p'; |
omatorressan | 0:1230a968d925 | 380 | } |
omatorressan | 0:1230a968d925 | 381 | |
omatorressan | 0:1230a968d925 | 382 | |
omatorressan | 0:1230a968d925 | 383 | if(buffermsg[70]=='6' && buffermsg[71]=='5'){LedAzul=0;} |
omatorressan | 0:1230a968d925 | 384 | if(buffermsg[70]=='6' && buffermsg[71]=='F'){LedAzul=1;} |
omatorressan | 0:1230a968d925 | 385 | |
omatorressan | 0:1230a968d925 | 386 | |
omatorressan | 0:1230a968d925 | 387 | } |
omatorressan | 0:1230a968d925 | 388 | |
omatorressan | 0:1230a968d925 | 389 | |
omatorressan | 0:1230a968d925 | 390 | |
omatorressan | 0:1230a968d925 | 391 | |
omatorressan | 0:1230a968d925 | 392 | } |
omatorressan | 0:1230a968d925 | 393 | |
omatorressan | 0:1230a968d925 | 394 | |
omatorressan | 0:1230a968d925 | 395 | } |