+ Este programa funciona con el modem GSM en un celular SIEMENS A56i. + Reconoce el mensaje 'Voltaje' y devuelve un mensaje a un numero especificado el voltaje sensado en PTB0 (ADC). + Reconoce el mensaje 'Pwm####' siendo #### un valor entre 0000 y 1000 y activa la salida PWM PTE20 con su ciclo de dureza en este rango. + El conector se distingue asi: - Cable verde es RX conectelo a PTE0. - Cable blanco es TX conectelo a PTE1.
Fork of ALARMA_FINCA_GSM7 by
main.cpp@3:b4f539697a46, 2017-12-01 (annotated)
- Committer:
- robinal
- Date:
- Fri Dec 01 15:21:43 2017 +0000
- Revision:
- 3:b4f539697a46
- Parent:
- 2:b249143245d8
+ Este programa funciona con el modem GSM en un celular SIEMENS A56i.; + Reconoce el mensaje 'Voltaje' y devuelve un mensaje a un numero ; especificado el voltaje sensado en PTB0 (ADC).; + Reconoce el mensaje 'Pwm####' siendo #### un valor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
robinal | 2:b249143245d8 | 1 | /* |
robinal | 2:b249143245d8 | 2 | + Este programa funciona con el modem GSM en un celular SIEMENS A56i. |
robinal | 2:b249143245d8 | 3 | + Reconoce el mensaje 'Voltaje' y devuelve un mensaje a un numero |
robinal | 2:b249143245d8 | 4 | especificado el voltaje sensado en PTB0 (ADC). |
robinal | 2:b249143245d8 | 5 | + Reconoce el mensaje 'Pwm####' siendo #### un valor entre 0000 y 1000 y |
robinal | 2:b249143245d8 | 6 | activa la salida PWM PTE20 con su ciclo de dureza en este rango. |
robinal | 2:b249143245d8 | 7 | + El conector se distingue asi: |
robinal | 2:b249143245d8 | 8 | - Cable verde es RX conectelo a PTE0. |
robinal | 2:b249143245d8 | 9 | - Cable blanco es TX conectelo a PTE1. |
robinal | 2:b249143245d8 | 10 | |
robinal | 2:b249143245d8 | 11 | + Realizado por: Carolina Velez Castaño |
robinal | 2:b249143245d8 | 12 | Daniel Sebastian Múnera Toro |
robinal | 2:b249143245d8 | 13 | Robinson Sneider Álvarez Valle |
robinal | 2:b249143245d8 | 14 | |
robinal | 2:b249143245d8 | 15 | + Universidad Nacional de Colombia sede Medellín |
tony63 | 0:f7aa7972da4d | 16 | */ |
tony63 | 0:f7aa7972da4d | 17 | |
tony63 | 0:f7aa7972da4d | 18 | #include "mbed.h" |
tony63 | 0:f7aa7972da4d | 19 | #include "stdio.h" |
tony63 | 0:f7aa7972da4d | 20 | #include "string.h" |
robinal | 2:b249143245d8 | 21 | #include <math.h> |
tony63 | 0:f7aa7972da4d | 22 | |
tony63 | 0:f7aa7972da4d | 23 | int i,ret; |
robinal | 2:b249143245d8 | 24 | int K,C,LENOUT,LENIN,LENOUT1, LENIN1, LENOUT2, LENIN2, ind; |
tony63 | 0:f7aa7972da4d | 25 | Timer t; |
robinal | 2:b249143245d8 | 26 | |
robinal | 2:b249143245d8 | 27 | DigitalOut LedRojo(LED1,1); |
robinal | 2:b249143245d8 | 28 | DigitalOut LedVerde(LED2,1); |
robinal | 2:b249143245d8 | 29 | DigitalOut LedAzul(LED3,1); |
robinal | 2:b249143245d8 | 30 | |
tony63 | 0:f7aa7972da4d | 31 | Serial GSM(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z |
tony63 | 0:f7aa7972da4d | 32 | Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado. |
robinal | 2:b249143245d8 | 33 | |
robinal | 2:b249143245d8 | 34 | AnalogIn input0(PTB0); |
robinal | 2:b249143245d8 | 35 | PwmOut pwm0(PTE20); |
robinal | 2:b249143245d8 | 36 | |
robinal | 2:b249143245d8 | 37 | char msg[15]; |
robinal | 2:b249143245d8 | 38 | char msg0[13]; |
robinal | 2:b249143245d8 | 39 | char msg1[7]; |
robinal | 2:b249143245d8 | 40 | char msg2[9]; |
robinal | 2:b249143245d8 | 41 | char analogStr[20]; |
robinal | 2:b249143245d8 | 42 | char gs[20]; |
robinal | 2:b249143245d8 | 43 | char input0_char[10]; |
robinal | 2:b249143245d8 | 44 | |
robinal | 2:b249143245d8 | 45 | char DE1[255]; |
robinal | 2:b249143245d8 | 46 | char DS1[255]; |
robinal | 2:b249143245d8 | 47 | char DE2[255]; |
robinal | 2:b249143245d8 | 48 | char DS2[255]; |
robinal | 2:b249143245d8 | 49 | char buffer[512]; |
tony63 | 1:9dc429267e43 | 50 | char resp[6]; |
robinal | 2:b249143245d8 | 51 | char tam[2]; |
robinal | 2:b249143245d8 | 52 | char mensaje[100]; |
robinal | 2:b249143245d8 | 53 | char buf[100]; |
robinal | 2:b249143245d8 | 54 | |
robinal | 2:b249143245d8 | 55 | char tel[10] = {'0','3','3','5','4','5','2','1','5','8'}; |
robinal | 2:b249143245d8 | 56 | char relle1[10] = {'0','0','1','1','0','0','0','A','9','1'}; |
robinal | 2:b249143245d8 | 57 | char relle2[6] = {'0','0','0','0','A','A'}; |
robinal | 2:b249143245d8 | 58 | char message[] = "0011000A9103354521580000AA03"; |
robinal | 2:b249143245d8 | 59 | |
robinal | 2:b249143245d8 | 60 | //******************************FUNCIONES EN C********************************** |
robinal | 2:b249143245d8 | 61 | |
robinal | 2:b249143245d8 | 62 | /******************************************************************************* |
robinal | 2:b249143245d8 | 63 | Funciones para el formato PDU |
robinal | 2:b249143245d8 | 64 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 65 | |
robinal | 2:b249143245d8 | 66 | /******************************************************************************* |
robinal | 2:b249143245d8 | 67 | Lee todo un bufer hasta encontrar CR o LF y el resto lo rellena de '$', |
robinal | 2:b249143245d8 | 68 | count es lo que va a leer; Lo leido lo mete en buffer que es una cadena |
robinal | 2:b249143245d8 | 69 | previamente definida incorpora medida de tiempo si se demora mas de tres |
robinal | 2:b249143245d8 | 70 | segundos retorna fracaso con -1 |
robinal | 2:b249143245d8 | 71 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 72 | int readBuffer(char *buffer,int count){ |
tony63 | 0:f7aa7972da4d | 73 | int i=0; |
tony63 | 0:f7aa7972da4d | 74 | t.start(); // start timer |
tony63 | 0:f7aa7972da4d | 75 | while(1) { |
tony63 | 0:f7aa7972da4d | 76 | while (GSM.readable()) { |
tony63 | 0:f7aa7972da4d | 77 | char c = GSM.getc(); |
tony63 | 0:f7aa7972da4d | 78 | if (c == '\r' || c == '\n') c = '$'; |
tony63 | 0:f7aa7972da4d | 79 | buffer[i++] = c; |
tony63 | 0:f7aa7972da4d | 80 | if(i > count)break; |
tony63 | 0:f7aa7972da4d | 81 | } |
tony63 | 0:f7aa7972da4d | 82 | if(i > count)break; |
tony63 | 1:9dc429267e43 | 83 | if(t.read() > 5) { |
tony63 | 0:f7aa7972da4d | 84 | t.stop(); |
tony63 | 0:f7aa7972da4d | 85 | t.reset(); |
tony63 | 0:f7aa7972da4d | 86 | break; |
tony63 | 0:f7aa7972da4d | 87 | } |
tony63 | 0:f7aa7972da4d | 88 | } |
tony63 | 0:f7aa7972da4d | 89 | wait(0.5); |
tony63 | 0:f7aa7972da4d | 90 | while(GSM.readable()) { // display the other thing.. |
tony63 | 0:f7aa7972da4d | 91 | char c = GSM.getc(); |
tony63 | 0:f7aa7972da4d | 92 | } |
tony63 | 0:f7aa7972da4d | 93 | return 0; |
tony63 | 0:f7aa7972da4d | 94 | } |
robinal | 2:b249143245d8 | 95 | |
robinal | 2:b249143245d8 | 96 | |
robinal | 2:b249143245d8 | 97 | /******************************************************************************* |
robinal | 2:b249143245d8 | 98 | Limpia o borra todo un "buffer" de tamaño "count" lo revisa elemento por |
robinal | 2:b249143245d8 | 99 | elemento y le mete el caracter null que indica fin de cadena no retorna nada |
robinal | 2:b249143245d8 | 100 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 101 | void cleanBuffer(char *buffer, int count){ |
tony63 | 0:f7aa7972da4d | 102 | for(int i=0; i < count; i++) { |
tony63 | 1:9dc429267e43 | 103 | buffer[i] = 0; |
tony63 | 0:f7aa7972da4d | 104 | } |
tony63 | 0:f7aa7972da4d | 105 | } |
robinal | 2:b249143245d8 | 106 | |
robinal | 2:b249143245d8 | 107 | /******************************************************************************* |
robinal | 2:b249143245d8 | 108 | Envia un comando parametrizado como cadena puede ser un comando tipo AT |
robinal | 2:b249143245d8 | 109 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 110 | void sendCmd(char *cmd){ |
tony63 | 0:f7aa7972da4d | 111 | GSM.puts(cmd); |
tony63 | 0:f7aa7972da4d | 112 | } |
robinal | 2:b249143245d8 | 113 | |
robinal | 2:b249143245d8 | 114 | /******************************************************************************* |
robinal | 2:b249143245d8 | 115 | Espera la respuesta de un comando que debe ser identica a la cadena "resp" y |
robinal | 2:b249143245d8 | 116 | un tiempo 'timeout' si todo sale bien retorna un cero que en la programacion |
robinal | 2:b249143245d8 | 117 | hay que validar si algo sale mal (no se parece o se demora mucho) retorna -1 |
robinal | 2:b249143245d8 | 118 | que debera validarse con alguna expresion logica |
robinal | 2:b249143245d8 | 119 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 120 | int waitForResp(char *resp, int timeout){ |
tony63 | 0:f7aa7972da4d | 121 | int len = strlen(resp); |
tony63 | 0:f7aa7972da4d | 122 | int sum=0; |
tony63 | 0:f7aa7972da4d | 123 | t.start(); |
tony63 | 0:f7aa7972da4d | 124 | |
tony63 | 0:f7aa7972da4d | 125 | while(1) { |
tony63 | 0:f7aa7972da4d | 126 | if(GSM.readable()) { |
tony63 | 0:f7aa7972da4d | 127 | char c = GSM.getc(); |
tony63 | 0:f7aa7972da4d | 128 | sum = (c==resp[sum]) ? sum+1 : 0;// esta linea de C# sum se incrementa o se hace cero segun c |
tony63 | 0:f7aa7972da4d | 129 | if(sum == len)break; //ya acabo se sale |
tony63 | 0:f7aa7972da4d | 130 | } |
tony63 | 0:f7aa7972da4d | 131 | if(t.read() > timeout) { // time out chequea el tiempo minimo antes de salir perdiendo |
tony63 | 0:f7aa7972da4d | 132 | t.stop(); |
tony63 | 0:f7aa7972da4d | 133 | t.reset(); |
tony63 | 0:f7aa7972da4d | 134 | return -1; |
tony63 | 0:f7aa7972da4d | 135 | } |
tony63 | 0:f7aa7972da4d | 136 | } |
tony63 | 0:f7aa7972da4d | 137 | t.stop(); // stop timer antes de retornar |
tony63 | 0:f7aa7972da4d | 138 | t.reset(); // clear timer |
tony63 | 0:f7aa7972da4d | 139 | while(GSM.readable()) { // display the other thing.. |
tony63 | 0:f7aa7972da4d | 140 | char c = GSM.getc(); |
tony63 | 0:f7aa7972da4d | 141 | } |
tony63 | 0:f7aa7972da4d | 142 | |
tony63 | 0:f7aa7972da4d | 143 | return 0; |
tony63 | 0:f7aa7972da4d | 144 | } |
robinal | 2:b249143245d8 | 145 | |
robinal | 2:b249143245d8 | 146 | /******************************************************************************* |
robinal | 2:b249143245d8 | 147 | Se encarga de enviar el comando y esperar la respuesta si todo sale bien |
robinal | 2:b249143245d8 | 148 | retorna un cero(herencia de las funciones contenedoras) que en la |
robinal | 2:b249143245d8 | 149 | programacion hay que validar con alguna expresion logica |
robinal | 2:b249143245d8 | 150 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 151 | int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout){ |
tony63 | 0:f7aa7972da4d | 152 | sendCmd(cmd); |
tony63 | 0:f7aa7972da4d | 153 | return waitForResp(resp,timeout); |
tony63 | 0:f7aa7972da4d | 154 | } |
robinal | 2:b249143245d8 | 155 | |
robinal | 2:b249143245d8 | 156 | /******************************************************************************* |
robinal | 2:b249143245d8 | 157 | Chequea que el modem este vivo envia AT y le contesta con OK y espera 2 |
robinal | 2:b249143245d8 | 158 | segundos |
robinal | 2:b249143245d8 | 159 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 160 | int powerCheck(void){ |
tony63 | 0:f7aa7972da4d | 161 | return sendCmdAndWaitForResp("AT\r\n", "OK", 2); |
tony63 | 0:f7aa7972da4d | 162 | } |
tony63 | 0:f7aa7972da4d | 163 | |
robinal | 2:b249143245d8 | 164 | /******************************************************************************* |
robinal | 2:b249143245d8 | 165 | Chequea el estado de la sim card y si todo sale bien retorna un cero que en |
robinal | 2:b249143245d8 | 166 | la programacion hay que validar con alguna expresion logica |
robinal | 2:b249143245d8 | 167 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 168 | int checkSIMStatus(void){ |
tony63 | 0:f7aa7972da4d | 169 | char gprsBuffer[30]; |
tony63 | 0:f7aa7972da4d | 170 | int count = 0; |
tony63 | 0:f7aa7972da4d | 171 | cleanBuffer(gprsBuffer,30); |
tony63 | 0:f7aa7972da4d | 172 | while(count < 3) { |
tony63 | 0:f7aa7972da4d | 173 | sendCmd("AT+CPIN?\r\n"); |
tony63 | 0:f7aa7972da4d | 174 | readBuffer(gprsBuffer,30); |
tony63 | 0:f7aa7972da4d | 175 | if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) { |
tony63 | 0:f7aa7972da4d | 176 | break; |
tony63 | 0:f7aa7972da4d | 177 | } |
tony63 | 0:f7aa7972da4d | 178 | count++; |
tony63 | 0:f7aa7972da4d | 179 | wait(1); |
tony63 | 0:f7aa7972da4d | 180 | } |
tony63 | 0:f7aa7972da4d | 181 | |
tony63 | 0:f7aa7972da4d | 182 | if(count == 3) { |
tony63 | 0:f7aa7972da4d | 183 | return -1; |
tony63 | 0:f7aa7972da4d | 184 | } |
tony63 | 0:f7aa7972da4d | 185 | return 0; |
tony63 | 0:f7aa7972da4d | 186 | } |
robinal | 2:b249143245d8 | 187 | |
robinal | 2:b249143245d8 | 188 | /******************************************************************************* |
robinal | 2:b249143245d8 | 189 | Chequea la calidad de la señal y si todo sale bien retorna con el valor de |
robinal | 2:b249143245d8 | 190 | señal util o un -1 si no es aceptable, en la programacion hay que validar |
robinal | 2:b249143245d8 | 191 | con alguna expresion logica |
robinal | 2:b249143245d8 | 192 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 193 | int checkSignalStrength(void){ |
tony63 | 0:f7aa7972da4d | 194 | char gprsBuffer[100]; |
tony63 | 0:f7aa7972da4d | 195 | int index,count = 0; |
tony63 | 0:f7aa7972da4d | 196 | cleanBuffer(gprsBuffer,100); |
tony63 | 0:f7aa7972da4d | 197 | while(count < 3) { |
tony63 | 0:f7aa7972da4d | 198 | sendCmd("AT+CSQ\r\n"); |
tony63 | 0:f7aa7972da4d | 199 | readBuffer(gprsBuffer,25); |
tony63 | 0:f7aa7972da4d | 200 | if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) { |
tony63 | 0:f7aa7972da4d | 201 | break; |
tony63 | 0:f7aa7972da4d | 202 | } |
tony63 | 0:f7aa7972da4d | 203 | count++; |
tony63 | 0:f7aa7972da4d | 204 | wait(1); |
tony63 | 0:f7aa7972da4d | 205 | } |
tony63 | 0:f7aa7972da4d | 206 | if(count == 3) { |
tony63 | 0:f7aa7972da4d | 207 | return -1; |
tony63 | 0:f7aa7972da4d | 208 | } |
tony63 | 0:f7aa7972da4d | 209 | return index; |
tony63 | 0:f7aa7972da4d | 210 | } |
tony63 | 0:f7aa7972da4d | 211 | |
robinal | 2:b249143245d8 | 212 | /******************************************************************************* |
robinal | 2:b249143245d8 | 213 | Inicializa el modem |
robinal | 2:b249143245d8 | 214 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 215 | int init(){ |
tony63 | 0:f7aa7972da4d | 216 | if (0 != sendCmdAndWaitForResp("AT\r\n", "OK", 5)){ |
tony63 | 0:f7aa7972da4d | 217 | return -1; |
robinal | 2:b249143245d8 | 218 | } |
tony63 | 0:f7aa7972da4d | 219 | if (0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", 5)){ |
tony63 | 0:f7aa7972da4d | 220 | return -1; |
robinal | 2:b249143245d8 | 221 | } |
tony63 | 0:f7aa7972da4d | 222 | if (0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", 5)){ |
tony63 | 0:f7aa7972da4d | 223 | return -1; |
robinal | 2:b249143245d8 | 224 | } |
tony63 | 0:f7aa7972da4d | 225 | if (0 != sendCmdAndWaitForResp("AT+CBST=0,0,1\r\n", "OK", 5)){ |
tony63 | 0:f7aa7972da4d | 226 | return -1; |
robinal | 2:b249143245d8 | 227 | } |
robinal | 2:b249143245d8 | 228 | return 0; |
robinal | 2:b249143245d8 | 229 | } |
robinal | 2:b249143245d8 | 230 | |
robinal | 2:b249143245d8 | 231 | |
robinal | 2:b249143245d8 | 232 | /******************************************************************************* |
robinal | 2:b249143245d8 | 233 | Funciones para el manejo de las cadenas |
robinal | 2:b249143245d8 | 234 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 235 | |
robinal | 2:b249143245d8 | 236 | /******************************************************************************* |
robinal | 2:b249143245d8 | 237 | Pasa de septetos a octetos |
robinal | 2:b249143245d8 | 238 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 239 | void SepToOct(char *DE, char *DS){ |
robinal | 2:b249143245d8 | 240 | LENIN = strlen(DE); // Se mide el tamaño de la cadena de entrada |
robinal | 2:b249143245d8 | 241 | int K=0;int C=0; int i=0; |
robinal | 2:b249143245d8 | 242 | for (i=0;i < LENIN;i++){ |
robinal | 2:b249143245d8 | 243 | DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K); |
robinal | 2:b249143245d8 | 244 | if (DS[i]==0x00) {LENOUT=i; goto salir99;} // Fin de la transformacion |
robinal | 2:b249143245d8 | 245 | K++; |
robinal | 2:b249143245d8 | 246 | if (K==7) {K=0;C++;} // Se chequea que ya se acabaron los bits en un ciclo de conversion. |
robinal | 2:b249143245d8 | 247 | } |
robinal | 2:b249143245d8 | 248 | salir99: |
robinal | 2:b249143245d8 | 249 | for (i=0;i<LENOUT;i++){ |
robinal | 2:b249143245d8 | 250 | DS[i]=DS[i]&0x000000FF; |
tony63 | 0:f7aa7972da4d | 251 | } |
robinal | 2:b249143245d8 | 252 | return; |
robinal | 2:b249143245d8 | 253 | } |
tony63 | 0:f7aa7972da4d | 254 | |
robinal | 2:b249143245d8 | 255 | /******************************************************************************* |
robinal | 2:b249143245d8 | 256 | Pasa de octetos a septetos |
robinal | 2:b249143245d8 | 257 | *******************************************************************************/ |
robinal | 2:b249143245d8 | 258 | void OctToSep(char *DE, char *DS){ |
robinal | 2:b249143245d8 | 259 | int LENIN = strlen(DE); |
robinal | 2:b249143245d8 | 260 | int LENOUT = LENIN*8/7; |
robinal | 2:b249143245d8 | 261 | K = 7; |
robinal | 2:b249143245d8 | 262 | C = 0; |
robinal | 2:b249143245d8 | 263 | DS[0] = DE[0] & 0x7F; // la primera sola |
robinal | 2:b249143245d8 | 264 | for (i=1;i < LENOUT;i++){ // inicia el algoritmo |
robinal | 2:b249143245d8 | 265 | DS[i]=(DE[i-1-C]>>K | DE[i-C]<<(8-K))& 0x7F; //valido para todos |
robinal | 2:b249143245d8 | 266 | if (K==0) {K=8;C++;} |
robinal | 2:b249143245d8 | 267 | K--; |
robinal | 2:b249143245d8 | 268 | } |
robinal | 2:b249143245d8 | 269 | return; |
robinal | 2:b249143245d8 | 270 | } |
robinal | 2:b249143245d8 | 271 | |
robinal | 2:b249143245d8 | 272 | //*****************SE INICIA EL PROGRAMA PRINCIPAL****************************** |
robinal | 2:b249143245d8 | 273 | int main(){ |
robinal | 2:b249143245d8 | 274 | LedRojo = 0; |
robinal | 2:b249143245d8 | 275 | LedVerde = 1; |
robinal | 2:b249143245d8 | 276 | LedAzul = 1; |
robinal | 2:b249143245d8 | 277 | |
robinal | 2:b249143245d8 | 278 | pwm0 = 0; |
tony63 | 0:f7aa7972da4d | 279 | |
robinal | 2:b249143245d8 | 280 | //****************CONFIGURAMOS EL MODEM GSM (TELEFONO CELULAR SIEMENS A56i) |
robinal | 2:b249143245d8 | 281 | inicio1: |
tony63 | 0:f7aa7972da4d | 282 | ret = init(); |
tony63 | 0:f7aa7972da4d | 283 | if(ret==0){ |
robinal | 2:b249143245d8 | 284 | LedRojo = 1; |
robinal | 2:b249143245d8 | 285 | LedVerde = 0; |
robinal | 2:b249143245d8 | 286 | LedAzul = 1; |
tony63 | 0:f7aa7972da4d | 287 | } |
tony63 | 0:f7aa7972da4d | 288 | else{ |
robinal | 2:b249143245d8 | 289 | wait(5); |
robinal | 2:b249143245d8 | 290 | goto inicio1; |
tony63 | 0:f7aa7972da4d | 291 | } |
robinal | 2:b249143245d8 | 292 | |
robinal | 2:b249143245d8 | 293 | while(1){ |
robinal | 2:b249143245d8 | 294 | // Inicia la recepcion de un mensaje de texto |
robinal | 2:b249143245d8 | 295 | if (GSM.readable()){ |
tony63 | 1:9dc429267e43 | 296 | readBuffer(buffer,6); |
tony63 | 0:f7aa7972da4d | 297 | pc.printf("%s\r\n",buffer); |
robinal | 2:b249143245d8 | 298 | for(i=0;i<5;i++){ |
robinal | 2:b249143245d8 | 299 | resp[i]=buffer[i]; |
tony63 | 0:f7aa7972da4d | 300 | } |
tony63 | 0:f7aa7972da4d | 301 | pc.printf("%s\r\n",resp); |
robinal | 2:b249143245d8 | 302 | if(strcmp("$$+CM",resp) == 0){ // Compara respuesta con "+CMTI" |
robinal | 2:b249143245d8 | 303 | pc.printf("Llego MSG\r\n"); |
tony63 | 1:9dc429267e43 | 304 | cleanBuffer(buffer,6); |
robinal | 2:b249143245d8 | 305 | GSM.printf("AT+CMGL=0"); // Envio comando para leer mensaje |
robinal | 2:b249143245d8 | 306 | GSM.putc(0x0D); // Envio de caracterer \n |
tony63 | 0:f7aa7972da4d | 307 | pc.printf("AT+CMGL=0\r\n"); |
robinal | 2:b249143245d8 | 308 | loop1: |
robinal | 2:b249143245d8 | 309 | if (GSM.readable()){ |
tony63 | 1:9dc429267e43 | 310 | readBuffer(buffer,100); |
tony63 | 1:9dc429267e43 | 311 | pc.printf("%s\r\n",buffer); |
tony63 | 1:9dc429267e43 | 312 | goto seguir1; |
robinal | 2:b249143245d8 | 313 | } |
robinal | 2:b249143245d8 | 314 | goto loop1; |
robinal | 2:b249143245d8 | 315 | seguir1: |
robinal | 2:b249143245d8 | 316 | //leer telefono |
robinal | 2:b249143245d8 | 317 | for(i=0;i<10;i++){ |
robinal | 2:b249143245d8 | 318 | tel[i]=buffer[i+50]; |
robinal | 2:b249143245d8 | 319 | } |
robinal | 2:b249143245d8 | 320 | pc.printf("%s-\r\n",tel); |
robinal | 2:b249143245d8 | 321 | |
robinal | 2:b249143245d8 | 322 | // Leer tamaño |
robinal | 2:b249143245d8 | 323 | for(i=0;i<2;i++){ |
robinal | 2:b249143245d8 | 324 | tam[i]=buffer[i+78]; |
robinal | 2:b249143245d8 | 325 | } |
robinal | 2:b249143245d8 | 326 | pc.printf("%s-\r\n",tam); |
robinal | 2:b249143245d8 | 327 | |
robinal | 2:b249143245d8 | 328 | // Leer mensaje |
robinal | 2:b249143245d8 | 329 | for(i=0;i<14;i++){ |
robinal | 2:b249143245d8 | 330 | msg[i]=buffer[i+80]; |
robinal | 2:b249143245d8 | 331 | } |
robinal | 2:b249143245d8 | 332 | pc.printf("%s-\r\n",msg); |
robinal | 2:b249143245d8 | 333 | |
robinal | 2:b249143245d8 | 334 | // Dividir mensaje, facilita comparación de tramas |
robinal | 2:b249143245d8 | 335 | for(i=0;i<12;i++){ // Solo guarda 12 posiciones del |
robinal | 2:b249143245d8 | 336 | msg0[i]=buffer[i+80];; // mensaje porque los ultimos dos |
robinal | 2:b249143245d8 | 337 | } // caracteres pueden dañar la |
robinal | 2:b249143245d8 | 338 | pc.printf("%s-\r\n",msg0); // comparación por los cambios del |
robinal | 2:b249143245d8 | 339 | // operador. |
robinal | 2:b249143245d8 | 340 | for(i=0;i<6;i++){ |
robinal | 2:b249143245d8 | 341 | msg1[i]=buffer[i+80];; |
robinal | 2:b249143245d8 | 342 | } |
robinal | 2:b249143245d8 | 343 | pc.printf("%s-\r\n",msg1); |
robinal | 2:b249143245d8 | 344 | for(i=0;i<8;i++){ |
robinal | 2:b249143245d8 | 345 | msg2[i]=buffer[i+86];; |
robinal | 2:b249143245d8 | 346 | } |
robinal | 2:b249143245d8 | 347 | pc.printf("%s-\r\n",msg2); |
robinal | 2:b249143245d8 | 348 | |
robinal | 2:b249143245d8 | 349 | GSM.printf("AT+CMGD=0"); // Envio comando para borrar mensaje |
robinal | 2:b249143245d8 | 350 | GSM.putc(0x0D); // Envio de caracter \n |
robinal | 2:b249143245d8 | 351 | wait(1); |
robinal | 2:b249143245d8 | 352 | GSM.printf("AT+CMGD=1"); // Envio comando para borrar mensaje |
robinal | 2:b249143245d8 | 353 | GSM.putc(0x0D); // Envio de caracter \n |
robinal | 2:b249143245d8 | 354 | wait(1); |
robinal | 2:b249143245d8 | 355 | |
robinal | 2:b249143245d8 | 356 | // Comparar mensaje |
robinal | 2:b249143245d8 | 357 | /* |
robinal | 2:b249143245d8 | 358 | Cadenas compara 'Voltaje' |
robinal | 2:b249143245d8 | 359 | D6379B1E569701 |
robinal | 2:b249143245d8 | 360 | D6379B1E56971B |
robinal | 2:b249143245d8 | 361 | */ |
robinal | 2:b249143245d8 | 362 | if(strcmp("D6379B1E5697",msg0) == 0){ // Compara con "Voltaje" |
robinal | 2:b249143245d8 | 363 | LedRojo = 1; |
robinal | 2:b249143245d8 | 364 | LedVerde = 1; |
robinal | 2:b249143245d8 | 365 | LedAzul = 0; |
robinal | 2:b249143245d8 | 366 | |
robinal | 2:b249143245d8 | 367 | sprintf(input0_char,"%.2f",input0.read()*3.3); |
robinal | 2:b249143245d8 | 368 | cleanBuffer(gs,20); |
robinal | 2:b249143245d8 | 369 | SepToOct(input0_char,gs); |
robinal | 2:b249143245d8 | 370 | //pc.printf("%s\n",input0_char); |
robinal | 2:b249143245d8 | 371 | |
robinal | 2:b249143245d8 | 372 | // Envio del mensaje |
robinal | 2:b249143245d8 | 373 | GSM.printf("AT+CMGS=16\n\r"); |
robinal | 2:b249143245d8 | 374 | wait_ms(200); |
robinal | 2:b249143245d8 | 375 | GSM.printf(message); // Imprime cabecera |
robinal | 2:b249143245d8 | 376 | for (i=0;i<3;i++){ |
robinal | 2:b249143245d8 | 377 | GSM.printf("%2X",gs[i]&0x000000FF); // Imprime conversión |
tony63 | 1:9dc429267e43 | 378 | } |
robinal | 2:b249143245d8 | 379 | wait_ms(200); |
robinal | 2:b249143245d8 | 380 | GSM.putc((char)0x1A); |
robinal | 2:b249143245d8 | 381 | wait(10); |
robinal | 2:b249143245d8 | 382 | |
robinal | 2:b249143245d8 | 383 | ///si el operador contesta con mensaje borrar de nuevo |
robinal | 2:b249143245d8 | 384 | GSM.printf("AT+CMGD=0");//envio comando para borrar mensaje |
robinal | 2:b249143245d8 | 385 | GSM.putc(0x0D); //envio de caracter \n |
robinal | 2:b249143245d8 | 386 | wait(1); |
robinal | 2:b249143245d8 | 387 | GSM.printf("AT+CMGD=1");//envio comando para borrar mensaje |
robinal | 2:b249143245d8 | 388 | GSM.putc(0x0D); //envio de caracter \n |
robinal | 2:b249143245d8 | 389 | wait(1); |
robinal | 2:b249143245d8 | 390 | |
robinal | 2:b249143245d8 | 391 | //wait(5); |
robinal | 2:b249143245d8 | 392 | LedRojo = 1; |
robinal | 2:b249143245d8 | 393 | LedVerde = 0; |
robinal | 2:b249143245d8 | 394 | LedAzul = 1; |
tony63 | 0:f7aa7972da4d | 395 | } |
robinal | 2:b249143245d8 | 396 | |
robinal | 2:b249143245d8 | 397 | /* |
robinal | 2:b249143245d8 | 398 | Cadenas compara 'Pwm000' |
robinal | 2:b249143245d8 | 399 | D07B1B0683C100 |
robinal | 2:b249143245d8 | 400 | D07B1B0683C11A |
robinal | 2:b249143245d8 | 401 | */ |
robinal | 2:b249143245d8 | 402 | if(strcmp("D07B1B",msg1) == 0){ // Compara con "Pwm" |
robinal | 2:b249143245d8 | 403 | cleanBuffer(gs,20); |
robinal | 2:b249143245d8 | 404 | OctToSep(msg2,gs); |
robinal | 2:b249143245d8 | 405 | |
robinal | 2:b249143245d8 | 406 | pwm0 = gs[0]/100.0; |
robinal | 2:b249143245d8 | 407 | |
robinal | 2:b249143245d8 | 408 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 409 | wait(1); |
robinal | 2:b249143245d8 | 410 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 411 | wait(1); |
robinal | 2:b249143245d8 | 412 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 413 | wait(1); |
robinal | 2:b249143245d8 | 414 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 415 | wait(1); |
robinal | 2:b249143245d8 | 416 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 417 | wait(1); |
robinal | 2:b249143245d8 | 418 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 419 | wait(1); |
robinal | 2:b249143245d8 | 420 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 421 | wait(1); |
robinal | 2:b249143245d8 | 422 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 423 | wait(1); |
robinal | 2:b249143245d8 | 424 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 425 | wait(1); |
robinal | 2:b249143245d8 | 426 | LedRojo = 1; LedVerde = 0; LedAzul = 1; |
robinal | 2:b249143245d8 | 427 | } |
robinal | 2:b249143245d8 | 428 | |
robinal | 2:b249143245d8 | 429 | if(strcmp("D07B3B",msg1) == 0){ // Compara con "Pwm1000" |
robinal | 2:b249143245d8 | 430 | pwm0 = 1; |
robinal | 2:b249143245d8 | 431 | |
robinal | 2:b249143245d8 | 432 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 433 | wait(.5); |
robinal | 2:b249143245d8 | 434 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 435 | wait(.5); |
robinal | 2:b249143245d8 | 436 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 437 | wait(.5); |
robinal | 2:b249143245d8 | 438 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 439 | wait(.5); |
robinal | 2:b249143245d8 | 440 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 441 | wait(.5); |
robinal | 2:b249143245d8 | 442 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 443 | wait(.5); |
robinal | 2:b249143245d8 | 444 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 445 | wait(.5); |
robinal | 2:b249143245d8 | 446 | LedRojo = 1; LedVerde = 1; LedAzul = 1; |
robinal | 2:b249143245d8 | 447 | wait(.5); |
robinal | 2:b249143245d8 | 448 | LedRojo = 1; LedVerde = 1; LedAzul = 0; |
robinal | 2:b249143245d8 | 449 | wait(.5); |
robinal | 2:b249143245d8 | 450 | LedRojo = 1; LedVerde = 0; LedAzul = 1; |
robinal | 2:b249143245d8 | 451 | } |
robinal | 2:b249143245d8 | 452 | |
robinal | 2:b249143245d8 | 453 | cleanBuffer(buffer,100); |
tony63 | 0:f7aa7972da4d | 454 | } |
tony63 | 0:f7aa7972da4d | 455 | } |
robinal | 2:b249143245d8 | 456 | } |
robinal | 2:b249143245d8 | 457 | } |