![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Entrega tarea GSM grupo verde procesadores 2019-1
Dependencies: mbed GPS Library DebounceIn DebouncedIn
main.cpp@0:e593335ac27d, 2019-08-30 (annotated)
- Committer:
- SusanaBM
- Date:
- Fri Aug 30 20:56:39 2019 +0000
- Revision:
- 0:e593335ac27d
Termple;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
SusanaBM | 0:e593335ac27d | 1 | //Librerias |
SusanaBM | 0:e593335ac27d | 2 | #include "mbed.h" |
SusanaBM | 0:e593335ac27d | 3 | #include "DebouncedIn.h" |
SusanaBM | 0:e593335ac27d | 4 | #include "stdio.h" |
SusanaBM | 0:e593335ac27d | 5 | #include "string.h" |
SusanaBM | 0:e593335ac27d | 6 | #include "GPS.h" |
SusanaBM | 0:e593335ac27d | 7 | |
SusanaBM | 0:e593335ac27d | 8 | // Temporizador |
SusanaBM | 0:e593335ac27d | 9 | Timer t; |
SusanaBM | 0:e593335ac27d | 10 | |
SusanaBM | 0:e593335ac27d | 11 | ////////////////////////////// ASIGNACIÓN DE PINES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ |
SusanaBM | 0:e593335ac27d | 12 | |
SusanaBM | 0:e593335ac27d | 13 | // SALIDAS: digitales |
SusanaBM | 0:e593335ac27d | 14 | DigitalOut LedVerde(LED2); // GSM |
SusanaBM | 0:e593335ac27d | 15 | DigitalOut LedRojo(LED1); // Conexión incorrecta |
SusanaBM | 0:e593335ac27d | 16 | DigitalOut LedAzul(LED3); // GPS |
SusanaBM | 0:e593335ac27d | 17 | DigitalOut valvula(PTC4); // Salida de la valvula |
SusanaBM | 0:e593335ac27d | 18 | DigitalOut puerta(PTC6); // Salida de la puerta |
SusanaBM | 0:e593335ac27d | 19 | |
SusanaBM | 0:e593335ac27d | 20 | // ENTRADAS: digital y análoga |
SusanaBM | 0:e593335ac27d | 21 | DigitalIn sin_gps(PTA13); |
SusanaBM | 0:e593335ac27d | 22 | AnalogIn v(PTB0); |
SusanaBM | 0:e593335ac27d | 23 | float medi; |
SusanaBM | 0:e593335ac27d | 24 | |
SusanaBM | 0:e593335ac27d | 25 | // PUERTOS: Modem GSM SIMENS y el GPS virtual |
SusanaBM | 0:e593335ac27d | 26 | Serial GSM(PTE0, PTE1); // TX y RX para el Modem |
SusanaBM | 0:e593335ac27d | 27 | Serial pc(USBTX, USBRX); // Comunicación del PC al dongle, para comunicar el FPS |
SusanaBM | 0:e593335ac27d | 28 | GPS gps(PTE22, PTE23); // TX y RX para el Dongle |
SusanaBM | 0:e593335ac27d | 29 | |
SusanaBM | 0:e593335ac27d | 30 | ////////////////////////////// VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ |
SusanaBM | 0:e593335ac27d | 31 | |
SusanaBM | 0:e593335ac27d | 32 | // VARIABLES: cadenas de caracteres |
SusanaBM | 0:e593335ac27d | 33 | char DE1[255]; |
SusanaBM | 0:e593335ac27d | 34 | char DS1[255]; |
SusanaBM | 0:e593335ac27d | 35 | char DE2[255]; |
SusanaBM | 0:e593335ac27d | 36 | char DS2[255]; |
SusanaBM | 0:e593335ac27d | 37 | char buffer[512]; |
SusanaBM | 0:e593335ac27d | 38 | char resp[6]; |
SusanaBM | 0:e593335ac27d | 39 | char tam[2]; |
SusanaBM | 0:e593335ac27d | 40 | char mensaje[100]; |
SusanaBM | 0:e593335ac27d | 41 | char gprsBuffer[30]; |
SusanaBM | 0:e593335ac27d | 42 | |
SusanaBM | 0:e593335ac27d | 43 | // VARIABLES: enteras y caracteres |
SusanaBM | 0:e593335ac27d | 44 | int g = 0; |
SusanaBM | 0:e593335ac27d | 45 | int count; |
SusanaBM | 0:e593335ac27d | 46 | int i, K, LENOUT1, LENIN1, LENOUT2, LENIN2, C; |
SusanaBM | 0:e593335ac27d | 47 | int c = 0; |
SusanaBM | 0:e593335ac27d | 48 | char r[] = ""; |
SusanaBM | 0:e593335ac27d | 49 | char msg[256]; |
SusanaBM | 0:e593335ac27d | 50 | char char1; |
SusanaBM | 0:e593335ac27d | 51 | int ind; |
SusanaBM | 0:e593335ac27d | 52 | float med; |
SusanaBM | 0:e593335ac27d | 53 | char outmed[16], outmedn[16]; |
SusanaBM | 0:e593335ac27d | 54 | int ret = 1; |
SusanaBM | 0:e593335ac27d | 55 | |
SusanaBM | 0:e593335ac27d | 56 | // VARIABLES: adquisición de números de teléfono emisor |
SusanaBM | 0:e593335ac27d | 57 | char tel[15]; |
SusanaBM | 0:e593335ac27d | 58 | |
SusanaBM | 0:e593335ac27d | 59 | // VARIABLES: coordenadas en latitud y longitud |
SusanaBM | 0:e593335ac27d | 60 | float lo, la; |
SusanaBM | 0:e593335ac27d | 61 | char clo[255], cla[255]; // Cadenas a capturar para latitud y longitud. |
SusanaBM | 0:e593335ac27d | 62 | char la_lo[255], volt[255]; |
SusanaBM | 0:e593335ac27d | 63 | |
SusanaBM | 0:e593335ac27d | 64 | // VARIABLES: cadena de google maps |
SusanaBM | 0:e593335ac27d | 65 | char http2[255]; |
SusanaBM | 0:e593335ac27d | 66 | char http[] = "http://maps.google.com/maps?q="; |
SusanaBM | 0:e593335ac27d | 67 | char buf[100]; |
SusanaBM | 0:e593335ac27d | 68 | |
SusanaBM | 0:e593335ac27d | 69 | // VARIABLES: relleno de datos propio del protocolo de SMS. |
SusanaBM | 0:e593335ac27d | 70 | char relle1[] = "0011000A91"; |
SusanaBM | 0:e593335ac27d | 71 | char relle2[] = "0000AA"; |
SusanaBM | 0:e593335ac27d | 72 | |
SusanaBM | 0:e593335ac27d | 73 | //*********************************************************************** |
SusanaBM | 0:e593335ac27d | 74 | // Reverses a string 'str' of length 'len' |
SusanaBM | 0:e593335ac27d | 75 | // driver program to test above funtion. |
SusanaBM | 0:e593335ac27d | 76 | void reverse(char *str, int len) |
SusanaBM | 0:e593335ac27d | 77 | { |
SusanaBM | 0:e593335ac27d | 78 | int i = 0, j = len - 1, temp; |
SusanaBM | 0:e593335ac27d | 79 | while (i < j) |
SusanaBM | 0:e593335ac27d | 80 | { |
SusanaBM | 0:e593335ac27d | 81 | temp = str[i]; |
SusanaBM | 0:e593335ac27d | 82 | str[i] = str[j]; |
SusanaBM | 0:e593335ac27d | 83 | str[j] = temp; |
SusanaBM | 0:e593335ac27d | 84 | i++; |
SusanaBM | 0:e593335ac27d | 85 | j--; |
SusanaBM | 0:e593335ac27d | 86 | } |
SusanaBM | 0:e593335ac27d | 87 | } |
SusanaBM | 0:e593335ac27d | 88 | |
SusanaBM | 0:e593335ac27d | 89 | // Converts a given integer x to string str[]. d is the number |
SusanaBM | 0:e593335ac27d | 90 | // of digits required in output. If d is more than the number |
SusanaBM | 0:e593335ac27d | 91 | // of digits in x, then 0s are added at the beginning. |
SusanaBM | 0:e593335ac27d | 92 | int intToStr(int x, char str[], int d) |
SusanaBM | 0:e593335ac27d | 93 | { |
SusanaBM | 0:e593335ac27d | 94 | int i = 0; |
SusanaBM | 0:e593335ac27d | 95 | while (x) |
SusanaBM | 0:e593335ac27d | 96 | { |
SusanaBM | 0:e593335ac27d | 97 | str[i++] = (x % 10) + '0'; |
SusanaBM | 0:e593335ac27d | 98 | x = x / 10; |
SusanaBM | 0:e593335ac27d | 99 | } |
SusanaBM | 0:e593335ac27d | 100 | |
SusanaBM | 0:e593335ac27d | 101 | // If number of digits required is more, then |
SusanaBM | 0:e593335ac27d | 102 | // add 0s at the beginning |
SusanaBM | 0:e593335ac27d | 103 | while (i < d) |
SusanaBM | 0:e593335ac27d | 104 | str[i++] = '0'; |
SusanaBM | 0:e593335ac27d | 105 | |
SusanaBM | 0:e593335ac27d | 106 | reverse(str, i); |
SusanaBM | 0:e593335ac27d | 107 | str[i] = '\0'; |
SusanaBM | 0:e593335ac27d | 108 | return i; |
SusanaBM | 0:e593335ac27d | 109 | } |
SusanaBM | 0:e593335ac27d | 110 | |
SusanaBM | 0:e593335ac27d | 111 | // Converts a floating point number to string. |
SusanaBM | 0:e593335ac27d | 112 | void ftoa(float n, char *res, int afterpoint) |
SusanaBM | 0:e593335ac27d | 113 | { |
SusanaBM | 0:e593335ac27d | 114 | // Extract integer part |
SusanaBM | 0:e593335ac27d | 115 | int ipart = (int)n; |
SusanaBM | 0:e593335ac27d | 116 | |
SusanaBM | 0:e593335ac27d | 117 | // Extract floating part |
SusanaBM | 0:e593335ac27d | 118 | float fpart = n - (float)ipart; |
SusanaBM | 0:e593335ac27d | 119 | |
SusanaBM | 0:e593335ac27d | 120 | // convert integer part to string |
SusanaBM | 0:e593335ac27d | 121 | int i = intToStr(ipart, res, 0); |
SusanaBM | 0:e593335ac27d | 122 | |
SusanaBM | 0:e593335ac27d | 123 | // check for display option after point |
SusanaBM | 0:e593335ac27d | 124 | if (afterpoint != 0) |
SusanaBM | 0:e593335ac27d | 125 | { |
SusanaBM | 0:e593335ac27d | 126 | res[i] = '.'; // add dot |
SusanaBM | 0:e593335ac27d | 127 | |
SusanaBM | 0:e593335ac27d | 128 | // Get the value of fraction part upto given no. |
SusanaBM | 0:e593335ac27d | 129 | // of points after dot. The third parameter is needed |
SusanaBM | 0:e593335ac27d | 130 | // to handle cases like 233.007 |
SusanaBM | 0:e593335ac27d | 131 | float fp = 10; |
SusanaBM | 0:e593335ac27d | 132 | fpart = fpart * pow(fp, afterpoint); |
SusanaBM | 0:e593335ac27d | 133 | |
SusanaBM | 0:e593335ac27d | 134 | intToStr((int)fpart, res + i + 1, afterpoint); |
SusanaBM | 0:e593335ac27d | 135 | } |
SusanaBM | 0:e593335ac27d | 136 | } |
SusanaBM | 0:e593335ac27d | 137 | //************************************************************************* |
SusanaBM | 0:e593335ac27d | 138 | |
SusanaBM | 0:e593335ac27d | 139 | ////////////////////////////// FUNCIONES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ |
SusanaBM | 0:e593335ac27d | 140 | |
SusanaBM | 0:e593335ac27d | 141 | //FUNCIÓN: libreria para vaciar el modem |
SusanaBM | 0:e593335ac27d | 142 | void FlushGSM(void) |
SusanaBM | 0:e593335ac27d | 143 | { |
SusanaBM | 0:e593335ac27d | 144 | char1 = 0; |
SusanaBM | 0:e593335ac27d | 145 | while (GSM.readable()) |
SusanaBM | 0:e593335ac27d | 146 | { |
SusanaBM | 0:e593335ac27d | 147 | char1 = GSM.getc(); |
SusanaBM | 0:e593335ac27d | 148 | } |
SusanaBM | 0:e593335ac27d | 149 | return; |
SusanaBM | 0:e593335ac27d | 150 | } |
SusanaBM | 0:e593335ac27d | 151 | |
SusanaBM | 0:e593335ac27d | 152 | void callback() |
SusanaBM | 0:e593335ac27d | 153 | { |
SusanaBM | 0:e593335ac27d | 154 | pc.printf("%c\n", GSM.getc()); |
SusanaBM | 0:e593335ac27d | 155 | } |
SusanaBM | 0:e593335ac27d | 156 | |
SusanaBM | 0:e593335ac27d | 157 | // FUNCIÓN: lee un bufer hasta encontrar CR o LF, rellenando el resto de $ |
SusanaBM | 0:e593335ac27d | 158 | int readBuffer(char *buffer, int count) |
SusanaBM | 0:e593335ac27d | 159 | { |
SusanaBM | 0:e593335ac27d | 160 | int i = 0; |
SusanaBM | 0:e593335ac27d | 161 | t.start(); // Iniciar temporizador |
SusanaBM | 0:e593335ac27d | 162 | while (1) |
SusanaBM | 0:e593335ac27d | 163 | { |
SusanaBM | 0:e593335ac27d | 164 | while (GSM.readable()) |
SusanaBM | 0:e593335ac27d | 165 | { |
SusanaBM | 0:e593335ac27d | 166 | char c = GSM.getc(); |
SusanaBM | 0:e593335ac27d | 167 | if (c == '\r' || c == '\n') c = '$'; |
SusanaBM | 0:e593335ac27d | 168 | buffer[i++] = c; |
SusanaBM | 0:e593335ac27d | 169 | if (i > count) |
SusanaBM | 0:e593335ac27d | 170 | break; |
SusanaBM | 0:e593335ac27d | 171 | } |
SusanaBM | 0:e593335ac27d | 172 | if (i > count) |
SusanaBM | 0:e593335ac27d | 173 | break; |
SusanaBM | 0:e593335ac27d | 174 | if (t.read() > 3) |
SusanaBM | 0:e593335ac27d | 175 | { |
SusanaBM | 0:e593335ac27d | 176 | t.stop(); |
SusanaBM | 0:e593335ac27d | 177 | t.reset(); |
SusanaBM | 0:e593335ac27d | 178 | break; |
SusanaBM | 0:e593335ac27d | 179 | } |
SusanaBM | 0:e593335ac27d | 180 | } |
SusanaBM | 0:e593335ac27d | 181 | wait(0.5); |
SusanaBM | 0:e593335ac27d | 182 | while (GSM.readable()) |
SusanaBM | 0:e593335ac27d | 183 | { // display the other thing.. |
SusanaBM | 0:e593335ac27d | 184 | char c = GSM.getc(); |
SusanaBM | 0:e593335ac27d | 185 | } |
SusanaBM | 0:e593335ac27d | 186 | return 0; |
SusanaBM | 0:e593335ac27d | 187 | } |
SusanaBM | 0:e593335ac27d | 188 | |
SusanaBM | 0:e593335ac27d | 189 | // FUNCIÓN: limpia/borra todo un "buffer" de tamaño "count" |
SusanaBM | 0:e593335ac27d | 190 | void cleanBuffer(char *buffer, int count) |
SusanaBM | 0:e593335ac27d | 191 | { |
SusanaBM | 0:e593335ac27d | 192 | for (int i = 0; i < count; i++) |
SusanaBM | 0:e593335ac27d | 193 | { |
SusanaBM | 0:e593335ac27d | 194 | buffer[i] = '\0'; |
SusanaBM | 0:e593335ac27d | 195 | } |
SusanaBM | 0:e593335ac27d | 196 | } |
SusanaBM | 0:e593335ac27d | 197 | |
SusanaBM | 0:e593335ac27d | 198 | // FUNCIÓN: envia un comando parametrizado como cadena (puede ser un |
SusanaBM | 0:e593335ac27d | 199 | // comando tipo AT) |
SusanaBM | 0:e593335ac27d | 200 | void sendCmd(char *cmd) |
SusanaBM | 0:e593335ac27d | 201 | { |
SusanaBM | 0:e593335ac27d | 202 | GSM.puts(cmd); |
SusanaBM | 0:e593335ac27d | 203 | } |
SusanaBM | 0:e593335ac27d | 204 | |
SusanaBM | 0:e593335ac27d | 205 | // FUNCIÓN: espera la respuesta de un comando que debe ser idéntica a la |
SusanaBM | 0:e593335ac27d | 206 | // cadena "resp" y un tiempo "timeout" |
SusanaBM | 0:e593335ac27d | 207 | int waitForResp(char *resp, int timeout) |
SusanaBM | 0:e593335ac27d | 208 | { |
SusanaBM | 0:e593335ac27d | 209 | int len = strlen(resp); |
SusanaBM | 0:e593335ac27d | 210 | int sum = 0; |
SusanaBM | 0:e593335ac27d | 211 | t.start(); |
SusanaBM | 0:e593335ac27d | 212 | |
SusanaBM | 0:e593335ac27d | 213 | while (1) |
SusanaBM | 0:e593335ac27d | 214 | { |
SusanaBM | 0:e593335ac27d | 215 | if (GSM.readable()) |
SusanaBM | 0:e593335ac27d | 216 | { |
SusanaBM | 0:e593335ac27d | 217 | char c = GSM.getc(); |
SusanaBM | 0:e593335ac27d | 218 | sum = (c == resp[sum]) ? sum + 1 : 0; // esta linea de C# sum se incrementa o se hace cero segun c |
SusanaBM | 0:e593335ac27d | 219 | if (sum == len) |
SusanaBM | 0:e593335ac27d | 220 | break; //ya acabo se sale |
SusanaBM | 0:e593335ac27d | 221 | } |
SusanaBM | 0:e593335ac27d | 222 | if (t.read() > timeout) |
SusanaBM | 0:e593335ac27d | 223 | { // time out chequea el tiempo minimo antes de salir perdiendo |
SusanaBM | 0:e593335ac27d | 224 | t.stop(); |
SusanaBM | 0:e593335ac27d | 225 | t.reset(); |
SusanaBM | 0:e593335ac27d | 226 | return -1; |
SusanaBM | 0:e593335ac27d | 227 | } |
SusanaBM | 0:e593335ac27d | 228 | } |
SusanaBM | 0:e593335ac27d | 229 | t.stop(); // stop timer antes de retornar |
SusanaBM | 0:e593335ac27d | 230 | t.reset(); // clear timer |
SusanaBM | 0:e593335ac27d | 231 | while (GSM.readable()) |
SusanaBM | 0:e593335ac27d | 232 | { // display the other thing.. |
SusanaBM | 0:e593335ac27d | 233 | char c = GSM.getc(); |
SusanaBM | 0:e593335ac27d | 234 | } |
SusanaBM | 0:e593335ac27d | 235 | return 0; |
SusanaBM | 0:e593335ac27d | 236 | } |
SusanaBM | 0:e593335ac27d | 237 | |
SusanaBM | 0:e593335ac27d | 238 | // FUNCIÓN: envia el comando y espera la respuesta |
SusanaBM | 0:e593335ac27d | 239 | int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout) |
SusanaBM | 0:e593335ac27d | 240 | { |
SusanaBM | 0:e593335ac27d | 241 | sendCmd(cmd); |
SusanaBM | 0:e593335ac27d | 242 | return waitForResp(resp, timeout); |
SusanaBM | 0:e593335ac27d | 243 | } |
SusanaBM | 0:e593335ac27d | 244 | |
SusanaBM | 0:e593335ac27d | 245 | // FUNCIÓN: chequea que el modem este conectado |
SusanaBM | 0:e593335ac27d | 246 | int powerCheck(void) |
SusanaBM | 0:e593335ac27d | 247 | { // Este comando se manda para verificar si el módem esta vivo o conectado. |
SusanaBM | 0:e593335ac27d | 248 | return sendCmdAndWaitForResp("AT\r\n", "OK", 2); |
SusanaBM | 0:e593335ac27d | 249 | } |
SusanaBM | 0:e593335ac27d | 250 | |
SusanaBM | 0:e593335ac27d | 251 | // FUNCIÓN: chequea el estado de la SimCard |
SusanaBM | 0:e593335ac27d | 252 | int checkSIMStatus(void) |
SusanaBM | 0:e593335ac27d | 253 | { |
SusanaBM | 0:e593335ac27d | 254 | char gprsBuffer[30]; |
SusanaBM | 0:e593335ac27d | 255 | int count = 0; |
SusanaBM | 0:e593335ac27d | 256 | cleanBuffer(gprsBuffer, 30); |
SusanaBM | 0:e593335ac27d | 257 | while (count < 3) |
SusanaBM | 0:e593335ac27d | 258 | { |
SusanaBM | 0:e593335ac27d | 259 | sendCmd("AT+CPIN?\r\n"); |
SusanaBM | 0:e593335ac27d | 260 | readBuffer(gprsBuffer, 30); |
SusanaBM | 0:e593335ac27d | 261 | if ((NULL != strstr(gprsBuffer, "+CPIN: READY"))) |
SusanaBM | 0:e593335ac27d | 262 | { |
SusanaBM | 0:e593335ac27d | 263 | break; |
SusanaBM | 0:e593335ac27d | 264 | } |
SusanaBM | 0:e593335ac27d | 265 | count++; |
SusanaBM | 0:e593335ac27d | 266 | wait(1); |
SusanaBM | 0:e593335ac27d | 267 | } |
SusanaBM | 0:e593335ac27d | 268 | |
SusanaBM | 0:e593335ac27d | 269 | if (count == 3) |
SusanaBM | 0:e593335ac27d | 270 | { |
SusanaBM | 0:e593335ac27d | 271 | return -1; |
SusanaBM | 0:e593335ac27d | 272 | } |
SusanaBM | 0:e593335ac27d | 273 | return 0; |
SusanaBM | 0:e593335ac27d | 274 | } |
SusanaBM | 0:e593335ac27d | 275 | |
SusanaBM | 0:e593335ac27d | 276 | // FUNCIÓN: chequea la calidad de la señal |
SusanaBM | 0:e593335ac27d | 277 | int checkSignalStrength(void) |
SusanaBM | 0:e593335ac27d | 278 | { |
SusanaBM | 0:e593335ac27d | 279 | char gprsBuffer[100]; |
SusanaBM | 0:e593335ac27d | 280 | int index, count = 0; |
SusanaBM | 0:e593335ac27d | 281 | cleanBuffer(gprsBuffer, 100); |
SusanaBM | 0:e593335ac27d | 282 | while (count < 3) |
SusanaBM | 0:e593335ac27d | 283 | { |
SusanaBM | 0:e593335ac27d | 284 | sendCmd("AT+CSQ\r\n"); |
SusanaBM | 0:e593335ac27d | 285 | readBuffer(gprsBuffer, 25); |
SusanaBM | 0:e593335ac27d | 286 | if (sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index) > 0) |
SusanaBM | 0:e593335ac27d | 287 | { |
SusanaBM | 0:e593335ac27d | 288 | break; |
SusanaBM | 0:e593335ac27d | 289 | } |
SusanaBM | 0:e593335ac27d | 290 | count++; |
SusanaBM | 0:e593335ac27d | 291 | wait(1); |
SusanaBM | 0:e593335ac27d | 292 | } |
SusanaBM | 0:e593335ac27d | 293 | if (count == 3) |
SusanaBM | 0:e593335ac27d | 294 | { |
SusanaBM | 0:e593335ac27d | 295 | return -1; |
SusanaBM | 0:e593335ac27d | 296 | } |
SusanaBM | 0:e593335ac27d | 297 | return index; |
SusanaBM | 0:e593335ac27d | 298 | } |
SusanaBM | 0:e593335ac27d | 299 | |
SusanaBM | 0:e593335ac27d | 300 | // FUNCIÓN: inicializa el modem |
SusanaBM | 0:e593335ac27d | 301 | // 1) Chequea que el modem este conectado |
SusanaBM | 0:e593335ac27d | 302 | // 2) Chequea el estado de la SimCard |
SusanaBM | 0:e593335ac27d | 303 | // 3) Chequea la intenciada de la señal |
SusanaBM | 0:e593335ac27d | 304 | // 4) Aplica la configuración |
SusanaBM | 0:e593335ac27d | 305 | int init() |
SusanaBM | 0:e593335ac27d | 306 | { |
SusanaBM | 0:e593335ac27d | 307 | if (0 != sendCmdAndWaitForResp("AT\r\n", "OK", 3)) |
SusanaBM | 0:e593335ac27d | 308 | { |
SusanaBM | 0:e593335ac27d | 309 | return -1; |
SusanaBM | 0:e593335ac27d | 310 | } |
SusanaBM | 0:e593335ac27d | 311 | if (0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", 3)) |
SusanaBM | 0:e593335ac27d | 312 | { |
SusanaBM | 0:e593335ac27d | 313 | return -1; |
SusanaBM | 0:e593335ac27d | 314 | } |
SusanaBM | 0:e593335ac27d | 315 | if (0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", 3)) |
SusanaBM | 0:e593335ac27d | 316 | { |
SusanaBM | 0:e593335ac27d | 317 | return -1; |
SusanaBM | 0:e593335ac27d | 318 | } |
SusanaBM | 0:e593335ac27d | 319 | if (0 != sendCmdAndWaitForResp("AT+CBST=7,0,1\r\n", "OK", 3)) |
SusanaBM | 0:e593335ac27d | 320 | { //velocidad fija a 9600, modem asincronico no transparente |
SusanaBM | 0:e593335ac27d | 321 | return -1; |
SusanaBM | 0:e593335ac27d | 322 | } |
SusanaBM | 0:e593335ac27d | 323 | if (0 != sendCmdAndWaitForResp("ATE\r\n", "OK", 3)) |
SusanaBM | 0:e593335ac27d | 324 | { //se le quita el eco al modem GSM |
SusanaBM | 0:e593335ac27d | 325 | return -1; |
SusanaBM | 0:e593335ac27d | 326 | } |
SusanaBM | 0:e593335ac27d | 327 | LedVerde = 0; |
SusanaBM | 0:e593335ac27d | 328 | return 0; |
SusanaBM | 0:e593335ac27d | 329 | } |
SusanaBM | 0:e593335ac27d | 330 | |
SusanaBM | 0:e593335ac27d | 331 | // FUNCIÓN: intenta leer un mensaje de texto en formato PDU o HEX |
SusanaBM | 0:e593335ac27d | 332 | int readSMSpdu(char *message, int index) |
SusanaBM | 0:e593335ac27d | 333 | { |
SusanaBM | 0:e593335ac27d | 334 | int i = 0; |
SusanaBM | 0:e593335ac27d | 335 | char gprsBuffer[100]; |
SusanaBM | 0:e593335ac27d | 336 | char *p, *s; |
SusanaBM | 0:e593335ac27d | 337 | GSM.printf("AT+CMGR=%d\r\n", index); |
SusanaBM | 0:e593335ac27d | 338 | cleanBuffer(gprsBuffer, 100); |
SusanaBM | 0:e593335ac27d | 339 | readBuffer(gprsBuffer, 100); |
SusanaBM | 0:e593335ac27d | 340 | if (NULL == (s = strstr(gprsBuffer, "+CMGR"))) |
SusanaBM | 0:e593335ac27d | 341 | { |
SusanaBM | 0:e593335ac27d | 342 | return -1; |
SusanaBM | 0:e593335ac27d | 343 | } |
SusanaBM | 0:e593335ac27d | 344 | if (NULL != (s = strstr(gprsBuffer, "+32"))) |
SusanaBM | 0:e593335ac27d | 345 | { |
SusanaBM | 0:e593335ac27d | 346 | p = s + 6; |
SusanaBM | 0:e593335ac27d | 347 | while ((*p != '$') && (i < 5)) |
SusanaBM | 0:e593335ac27d | 348 | { |
SusanaBM | 0:e593335ac27d | 349 | message[i++] = *(p++); |
SusanaBM | 0:e593335ac27d | 350 | } |
SusanaBM | 0:e593335ac27d | 351 | message[i] = '\0'; |
SusanaBM | 0:e593335ac27d | 352 | } |
SusanaBM | 0:e593335ac27d | 353 | return 0; |
SusanaBM | 0:e593335ac27d | 354 | } |
SusanaBM | 0:e593335ac27d | 355 | |
SusanaBM | 0:e593335ac27d | 356 | // FUNCIÓN: borra mensajes SMS del modem |
SusanaBM | 0:e593335ac27d | 357 | int deleteSMS(int index) |
SusanaBM | 0:e593335ac27d | 358 | { |
SusanaBM | 0:e593335ac27d | 359 | char cmd[32]; |
SusanaBM | 0:e593335ac27d | 360 | snprintf(cmd, sizeof(cmd), "AT+CMGD=%d\r\n", index); |
SusanaBM | 0:e593335ac27d | 361 | sendCmd(cmd); |
SusanaBM | 0:e593335ac27d | 362 | return 0; |
SusanaBM | 0:e593335ac27d | 363 | } |
SusanaBM | 0:e593335ac27d | 364 | |
SusanaBM | 0:e593335ac27d | 365 | // FUNCIÓN: devuelve la confirmación del mensaje a quien lo envio |
SusanaBM | 0:e593335ac27d | 366 | int recibe_ok() |
SusanaBM | 0:e593335ac27d | 367 | { |
SusanaBM | 0:e593335ac27d | 368 | pc.printf("AT+CMGS=27\n\r"); |
SusanaBM | 0:e593335ac27d | 369 | GSM.printf("AT+CMGS=27\n\r"); |
SusanaBM | 0:e593335ac27d | 370 | wait(1); |
SusanaBM | 0:e593335ac27d | 371 | GSM.printf("0011000A91%s0000AA10CDB27B1E569741F2F2382D4E93DF", tel); |
SusanaBM | 0:e593335ac27d | 372 | GSM.printf("\n\r"); |
SusanaBM | 0:e593335ac27d | 373 | pc.printf("0011000A91%s0000AA10CDB27B1E569741F2F2382D4E93DF\n\r", tel); |
SusanaBM | 0:e593335ac27d | 374 | pc.printf("\n\r"); //control+Z |
SusanaBM | 0:e593335ac27d | 375 | wait(1); |
SusanaBM | 0:e593335ac27d | 376 | return 0; |
SusanaBM | 0:e593335ac27d | 377 | } |
SusanaBM | 0:e593335ac27d | 378 | |
SusanaBM | 0:e593335ac27d | 379 | ////////////////////////////// MAIN \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ |
SusanaBM | 0:e593335ac27d | 380 | |
SusanaBM | 0:e593335ac27d | 381 | int main() |
SusanaBM | 0:e593335ac27d | 382 | { |
SusanaBM | 0:e593335ac27d | 383 | //configuramos los puertos seriales |
SusanaBM | 0:e593335ac27d | 384 | GSM.baud(9600); //configura los baudios de la FRDMKL25Z en 9600 |
SusanaBM | 0:e593335ac27d | 385 | GSM.format(8, Serial::None, 1); //configura el formato de los datos de la UART |
SusanaBM | 0:e593335ac27d | 386 | LedVerde = 1; // APAGO LOS LEDS |
SusanaBM | 0:e593335ac27d | 387 | LedRojo = 1; |
SusanaBM | 0:e593335ac27d | 388 | LedAzul = 1; |
SusanaBM | 0:e593335ac27d | 389 | LedRojo = 0; // PRENDO EL LED ROJO |
SusanaBM | 0:e593335ac27d | 390 | valvula = 0; // se enciende la valvula por defecto |
SusanaBM | 0:e593335ac27d | 391 | |
SusanaBM | 0:e593335ac27d | 392 | // CONFIGURACIÓN DEL MODEM GSM |
SusanaBM | 0:e593335ac27d | 393 | inicio1: |
SusanaBM | 0:e593335ac27d | 394 | ret = init(); |
SusanaBM | 0:e593335ac27d | 395 | if (ret == 0) |
SusanaBM | 0:e593335ac27d | 396 | { // esta bien conectado el modem GSM......................................................................... |
SusanaBM | 0:e593335ac27d | 397 | LedRojo = 1; // apagar led rojo |
SusanaBM | 0:e593335ac27d | 398 | LedVerde = 0; // Enciende LED Verde para confirmar la comunicación OK con el módem. |
SusanaBM | 0:e593335ac27d | 399 | pc.printf("Modem configurado\n"); // Envia mensaje a la terminal |
SusanaBM | 0:e593335ac27d | 400 | } |
SusanaBM | 0:e593335ac27d | 401 | else |
SusanaBM | 0:e593335ac27d | 402 | { |
SusanaBM | 0:e593335ac27d | 403 | wait(1); |
SusanaBM | 0:e593335ac27d | 404 | goto inicio1; // se hace un reintento de conexion o el sistema no funcionara |
SusanaBM | 0:e593335ac27d | 405 | } |
SusanaBM | 0:e593335ac27d | 406 | |
SusanaBM | 0:e593335ac27d | 407 | //Luego se verifica GPS bien conectado (si esta habilitado por dip sw)y recibiendo satelites |
SusanaBM | 0:e593335ac27d | 408 | if (!sin_gps) |
SusanaBM | 0:e593335ac27d | 409 | { |
SusanaBM | 0:e593335ac27d | 410 | pc.printf("SIN GPS\n\r"); //confirma con teminal que no se habilito el gps |
SusanaBM | 0:e593335ac27d | 411 | goto seguir9; // de inmediato funcionara sin gps |
SusanaBM | 0:e593335ac27d | 412 | } |
SusanaBM | 0:e593335ac27d | 413 | //*****************************************Test para un GPS bien instalado*********************************************** |
SusanaBM | 0:e593335ac27d | 414 | |
SusanaBM | 0:e593335ac27d | 415 | //******************************************esta bien el GPS***************************************************************** |
SusanaBM | 0:e593335ac27d | 416 | pc.printf("CON GPS\n\r"); |
SusanaBM | 0:e593335ac27d | 417 | g = gps.sample(); |
SusanaBM | 0:e593335ac27d | 418 | if (g) |
SusanaBM | 0:e593335ac27d | 419 | { |
SusanaBM | 0:e593335ac27d | 420 | LedAzul = 0; |
SusanaBM | 0:e593335ac27d | 421 | pc.printf("GPS--OK\n\r"); |
SusanaBM | 0:e593335ac27d | 422 | } |
SusanaBM | 0:e593335ac27d | 423 | else |
SusanaBM | 0:e593335ac27d | 424 | { |
SusanaBM | 0:e593335ac27d | 425 | pc.printf("GPS--Not_OK\n\r"); |
SusanaBM | 0:e593335ac27d | 426 | } |
SusanaBM | 0:e593335ac27d | 427 | |
SusanaBM | 0:e593335ac27d | 428 | // LECTURA MENSAJE ENTRANTE |
SusanaBM | 0:e593335ac27d | 429 | seguir9: |
SusanaBM | 0:e593335ac27d | 430 | // Inicia código ciclico leyendo cualquier mensaje SMS entrante |
SusanaBM | 0:e593335ac27d | 431 | while (1) |
SusanaBM | 0:e593335ac27d | 432 | { |
SusanaBM | 0:e593335ac27d | 433 | if (GSM.readable()) |
SusanaBM | 0:e593335ac27d | 434 | { |
SusanaBM | 0:e593335ac27d | 435 | readBuffer(buffer, 110); |
SusanaBM | 0:e593335ac27d | 436 | pc.printf("%s\r\n", buffer); |
SusanaBM | 0:e593335ac27d | 437 | for (i = 0; i < 5; i++) |
SusanaBM | 0:e593335ac27d | 438 | { |
SusanaBM | 0:e593335ac27d | 439 | resp[i] = buffer[i]; |
SusanaBM | 0:e593335ac27d | 440 | } |
SusanaBM | 0:e593335ac27d | 441 | |
SusanaBM | 0:e593335ac27d | 442 | pc.printf("%s\r\n", resp); |
SusanaBM | 0:e593335ac27d | 443 | if (strcmp("$$+CM", resp) == 0) |
SusanaBM | 0:e593335ac27d | 444 | { //COMPARA resp con "+CMTI" |
SusanaBM | 0:e593335ac27d | 445 | pc.printf("Llego MSG\r\n"); |
SusanaBM | 0:e593335ac27d | 446 | cleanBuffer(buffer, 10); |
SusanaBM | 0:e593335ac27d | 447 | GSM.printf("AT+CMGL=0\r\n"); // Envío comando para leer mensaje |
SusanaBM | 0:e593335ac27d | 448 | pc.printf("AT+CMGL=0\r\n"); |
SusanaBM | 0:e593335ac27d | 449 | //GSM.printf("AT+CMGD=0\r\n"); // Envío comando para borrar el mensaje. |
SusanaBM | 0:e593335ac27d | 450 | readBuffer(buffer, 110); |
SusanaBM | 0:e593335ac27d | 451 | pc.printf("%s\r\n", buffer); |
SusanaBM | 0:e593335ac27d | 452 | |
SusanaBM | 0:e593335ac27d | 453 | // LECTURA TELÉFONO EMISOR |
SusanaBM | 0:e593335ac27d | 454 | for (i = 0; i < 10; i++) |
SusanaBM | 0:e593335ac27d | 455 | { |
SusanaBM | 0:e593335ac27d | 456 | tel[i] = buffer[i + 40]; |
SusanaBM | 0:e593335ac27d | 457 | } |
SusanaBM | 0:e593335ac27d | 458 | pc.printf("Telefono: %c%c%c%c%c%c%c%c%c%c\r\n", tel[1], tel[0], tel[3], tel[2], tel[5], tel[4], tel[7], tel[6], tel[9], tel[8]); |
SusanaBM | 0:e593335ac27d | 459 | |
SusanaBM | 0:e593335ac27d | 460 | // Lectura del tamaño |
SusanaBM | 0:e593335ac27d | 461 | for (i = 0; i < 2; i++) |
SusanaBM | 0:e593335ac27d | 462 | { |
SusanaBM | 0:e593335ac27d | 463 | tam[i] = buffer[i + 68]; |
SusanaBM | 0:e593335ac27d | 464 | } |
SusanaBM | 0:e593335ac27d | 465 | pc.printf("%s-\r\n", tam); |
SusanaBM | 0:e593335ac27d | 466 | |
SusanaBM | 0:e593335ac27d | 467 | // LECTURA DEL MENSAJE |
SusanaBM | 0:e593335ac27d | 468 | for (i = 0; i < 26; i++) |
SusanaBM | 0:e593335ac27d | 469 | { |
SusanaBM | 0:e593335ac27d | 470 | msg[i] = buffer[i + 70]; // Lee un mensaje de 26 caracteres máximo desde la posición 70 del buffer. |
SusanaBM | 0:e593335ac27d | 471 | } |
SusanaBM | 0:e593335ac27d | 472 | pc.printf("%s-\r\n", msg); |
SusanaBM | 0:e593335ac27d | 473 | |
SusanaBM | 0:e593335ac27d | 474 | // DECODIFICACIÓN DEL MENSAJE |
SusanaBM | 0:e593335ac27d | 475 | // Comparar el mensaje |
SusanaBM | 0:e593335ac27d | 476 | deleteSMS(1); // Se borran los mensajes por medio de una función |
SusanaBM | 0:e593335ac27d | 477 | readBuffer(buffer, 110); |
SusanaBM | 0:e593335ac27d | 478 | |
SusanaBM | 0:e593335ac27d | 479 | //************************************************************************** |
SusanaBM | 0:e593335ac27d | 480 | //SEGUNDO CASO ACTIVAR SALIDAS } |
SusanaBM | 0:e593335ac27d | 481 | //.................activar valvula de combustible...............On..on....................... |
SusanaBM | 0:e593335ac27d | 482 | if ((strncmp("4F37", msg, 4) == 0) || (strncmp("6F37", msg, 4) == 0)) |
SusanaBM | 0:e593335ac27d | 483 | { |
SusanaBM | 0:e593335ac27d | 484 | recibe_ok(); |
SusanaBM | 0:e593335ac27d | 485 | valvula = 1; // Encender valvula. |
SusanaBM | 0:e593335ac27d | 486 | } |
SusanaBM | 0:e593335ac27d | 487 | // ...................................................... off y Off........................ |
SusanaBM | 0:e593335ac27d | 488 | if ((strncmp("4FB319", msg, 6) == 0) || (strncmp("6FB319", msg, 6) == 0)) |
SusanaBM | 0:e593335ac27d | 489 | { |
SusanaBM | 0:e593335ac27d | 490 | recibe_ok(); |
SusanaBM | 0:e593335ac27d | 491 | valvula = 0; // apagar valvula. |
SusanaBM | 0:e593335ac27d | 492 | } |
SusanaBM | 0:e593335ac27d | 493 | |
SusanaBM | 0:e593335ac27d | 494 | //............................Envia un Pulso Para Puerta Pulso...D03A7BFE06 pulso.F03A7BFE06.............. |
SusanaBM | 0:e593335ac27d | 495 | if ((strncmp("D03A7BFE06", msg, 10) == 0) || (strncmp("F03A7BFE06", msg, 10) == 0)) |
SusanaBM | 0:e593335ac27d | 496 | { |
SusanaBM | 0:e593335ac27d | 497 | recibe_ok(); //CONFIRMACION DE RECEPCION REMOTA |
SusanaBM | 0:e593335ac27d | 498 | puerta = 1; // Encender Puerta. |
SusanaBM | 0:e593335ac27d | 499 | wait(7); //pulso de 7 segundos |
SusanaBM | 0:e593335ac27d | 500 | puerta = 0; //apaga puerta |
SusanaBM | 0:e593335ac27d | 501 | } |
SusanaBM | 0:e593335ac27d | 502 | //************************************************************************* |
SusanaBM | 0:e593335ac27d | 503 | |
SusanaBM | 0:e593335ac27d | 504 | // COMPARA resp con "E3F75B4E2EBBC3E4F01C" que es "coordenadas", |
SusanaBM | 0:e593335ac27d | 505 | // o "C3F75B4E2EBBC3E4F01C" que es "Coordenadas". |
SusanaBM | 0:e593335ac27d | 506 | if ((strncmp("E3F75B4E2EBBC3E4F01C", msg, 20) == 0) || (strncmp("C3F75B4E2EBBC3E4F01C", msg, 20) == 0)) |
SusanaBM | 0:e593335ac27d | 507 | { |
SusanaBM | 0:e593335ac27d | 508 | recibe_ok(); |
SusanaBM | 0:e593335ac27d | 509 | LedVerde = 1; // Encender LED azul. |
SusanaBM | 0:e593335ac27d | 510 | LedAzul = 0; |
SusanaBM | 0:e593335ac27d | 511 | wait(2); |
SusanaBM | 0:e593335ac27d | 512 | |
SusanaBM | 0:e593335ac27d | 513 | if (gps.sample()) |
SusanaBM | 0:e593335ac27d | 514 | { |
SusanaBM | 0:e593335ac27d | 515 | lo = gps.longitude; |
SusanaBM | 0:e593335ac27d | 516 | la = gps.latitude; |
SusanaBM | 0:e593335ac27d | 517 | pc.printf("\nLongitud entera = %f, Latitud entera = %f\n", lo, la); |
SusanaBM | 0:e593335ac27d | 518 | //wait(0.5); |
SusanaBM | 0:e593335ac27d | 519 | |
SusanaBM | 0:e593335ac27d | 520 | //LONGITUD |
SusanaBM | 0:e593335ac27d | 521 | sprintf(clo, "%f", lo); |
SusanaBM | 0:e593335ac27d | 522 | pc.printf("\nLongitud = %s\n", clo); |
SusanaBM | 0:e593335ac27d | 523 | //wait(0.5); |
SusanaBM | 0:e593335ac27d | 524 | |
SusanaBM | 0:e593335ac27d | 525 | // LATITUD |
SusanaBM | 0:e593335ac27d | 526 | sprintf(cla, "%f", la); |
SusanaBM | 0:e593335ac27d | 527 | pc.printf("\nLatitud = %s\n", cla); |
SusanaBM | 0:e593335ac27d | 528 | //wait(0.5); |
SusanaBM | 0:e593335ac27d | 529 | |
SusanaBM | 0:e593335ac27d | 530 | // Concatenando las cadenas de Latitud y Longitud |
SusanaBM | 0:e593335ac27d | 531 | strcpy(la_lo, cla); |
SusanaBM | 0:e593335ac27d | 532 | strcat(la_lo, ","); |
SusanaBM | 0:e593335ac27d | 533 | strcat(la_lo, clo); |
SusanaBM | 0:e593335ac27d | 534 | pc.printf("\nLatitud, Longitud: %s\n", la_lo); |
SusanaBM | 0:e593335ac27d | 535 | |
SusanaBM | 0:e593335ac27d | 536 | // Ahora se juntan las cadenas obtenidas y se agrega el protocolo de |
SusanaBM | 0:e593335ac27d | 537 | // transferencia de hipertextos http |
SusanaBM | 0:e593335ac27d | 538 | strcpy(DE1, http); |
SusanaBM | 0:e593335ac27d | 539 | strcat(DE1, la_lo); |
SusanaBM | 0:e593335ac27d | 540 | pc.printf("\nDireccion: %s\n", DE1); |
SusanaBM | 0:e593335ac27d | 541 | pc.printf("\n"); |
SusanaBM | 0:e593335ac27d | 542 | LENIN1 = strlen(DE1); |
SusanaBM | 0:e593335ac27d | 543 | |
SusanaBM | 0:e593335ac27d | 544 | //Conversión a octetos. |
SusanaBM | 0:e593335ac27d | 545 | K = 0; |
SusanaBM | 0:e593335ac27d | 546 | C = 0; |
SusanaBM | 0:e593335ac27d | 547 | for (i = 0; i < LENIN1; i++) |
SusanaBM | 0:e593335ac27d | 548 | { |
SusanaBM | 0:e593335ac27d | 549 | DS1[i] = DE1[i + C] >> K | DE1[i + C + 1] << (7 - K); |
SusanaBM | 0:e593335ac27d | 550 | if (DS1[i] == 0x00) |
SusanaBM | 0:e593335ac27d | 551 | { |
SusanaBM | 0:e593335ac27d | 552 | LENOUT1 = i; |
SusanaBM | 0:e593335ac27d | 553 | goto salir1; |
SusanaBM | 0:e593335ac27d | 554 | } |
SusanaBM | 0:e593335ac27d | 555 | K++; |
SusanaBM | 0:e593335ac27d | 556 | if (K == 7) |
SusanaBM | 0:e593335ac27d | 557 | { |
SusanaBM | 0:e593335ac27d | 558 | K = 0; |
SusanaBM | 0:e593335ac27d | 559 | C++; |
SusanaBM | 0:e593335ac27d | 560 | } // se chequea que ya se acabaron los bits en un ciclo de conversion. |
SusanaBM | 0:e593335ac27d | 561 | } |
SusanaBM | 0:e593335ac27d | 562 | |
SusanaBM | 0:e593335ac27d | 563 | salir1: |
SusanaBM | 0:e593335ac27d | 564 | for (i = 0; i < LENIN1; i++) |
SusanaBM | 0:e593335ac27d | 565 | { |
SusanaBM | 0:e593335ac27d | 566 | pc.printf("%X", DE1[i]); |
SusanaBM | 0:e593335ac27d | 567 | } |
SusanaBM | 0:e593335ac27d | 568 | |
SusanaBM | 0:e593335ac27d | 569 | pc.printf(":\r\n"); |
SusanaBM | 0:e593335ac27d | 570 | for (i = 0; i < LENOUT1; i++) |
SusanaBM | 0:e593335ac27d | 571 | { |
SusanaBM | 0:e593335ac27d | 572 | pc.printf("%2X", DS1[i] & 0x000000FF); |
SusanaBM | 0:e593335ac27d | 573 | } |
SusanaBM | 0:e593335ac27d | 574 | pc.printf("\r\nLENOUT GPS: %d, LENIN GPS: %2X\r\n", LENOUT1, LENIN1); |
SusanaBM | 0:e593335ac27d | 575 | |
SusanaBM | 0:e593335ac27d | 576 | // Concatenación del mensaje en formato PDU y envío del mismo. |
SusanaBM | 0:e593335ac27d | 577 | ind = 14 + LENOUT1 - 1; |
SusanaBM | 0:e593335ac27d | 578 | |
SusanaBM | 0:e593335ac27d | 579 | GSM.printf("AT+CMGS=%d\r\n", ind); |
SusanaBM | 0:e593335ac27d | 580 | pc.printf("AT+CMGS=%d\r\n", ind); |
SusanaBM | 0:e593335ac27d | 581 | pc.printf(relle1); |
SusanaBM | 0:e593335ac27d | 582 | GSM.printf(relle1); |
SusanaBM | 0:e593335ac27d | 583 | |
SusanaBM | 0:e593335ac27d | 584 | for (i = 0; i <= 9; i++) |
SusanaBM | 0:e593335ac27d | 585 | { |
SusanaBM | 0:e593335ac27d | 586 | pc.printf("%c", tel[i]); |
SusanaBM | 0:e593335ac27d | 587 | GSM.printf("%c", tel[i]); |
SusanaBM | 0:e593335ac27d | 588 | } |
SusanaBM | 0:e593335ac27d | 589 | |
SusanaBM | 0:e593335ac27d | 590 | pc.printf(relle2); |
SusanaBM | 0:e593335ac27d | 591 | GSM.printf(relle2); |
SusanaBM | 0:e593335ac27d | 592 | pc.printf("%2X", LENIN1); |
SusanaBM | 0:e593335ac27d | 593 | GSM.printf("%2X", LENIN1); |
SusanaBM | 0:e593335ac27d | 594 | |
SusanaBM | 0:e593335ac27d | 595 | for (i = 0; i < LENOUT1; i++) |
SusanaBM | 0:e593335ac27d | 596 | { |
SusanaBM | 0:e593335ac27d | 597 | pc.printf("%02X", DS1[i] & 0x000000FF); |
SusanaBM | 0:e593335ac27d | 598 | GSM.printf("%02X", DS1[i] & 0x000000FF); |
SusanaBM | 0:e593335ac27d | 599 | } |
SusanaBM | 0:e593335ac27d | 600 | wait(1); |
SusanaBM | 0:e593335ac27d | 601 | GSM.putc((char)0x1A); // Ctrl - Z. |
SusanaBM | 0:e593335ac27d | 602 | GSM.scanf("%s", buf); // Estado del mensaje (Envió o Error). |
SusanaBM | 0:e593335ac27d | 603 | pc.printf(">%s\n", buf); |
SusanaBM | 0:e593335ac27d | 604 | pc.printf("\n"); |
SusanaBM | 0:e593335ac27d | 605 | } |
SusanaBM | 0:e593335ac27d | 606 | |
SusanaBM | 0:e593335ac27d | 607 | wait(2); |
SusanaBM | 0:e593335ac27d | 608 | LedAzul = 1; |
SusanaBM | 0:e593335ac27d | 609 | LedVerde = 0; |
SusanaBM | 0:e593335ac27d | 610 | GSM.printf("AT+CMGD=0\r\n"); // Borra el mensaje actual (Posición "0"). |
SusanaBM | 0:e593335ac27d | 611 | //pc.printf("\n%s\n\n", "Borro mensaje"); |
SusanaBM | 0:e593335ac27d | 612 | } |
SusanaBM | 0:e593335ac27d | 613 | |
SusanaBM | 0:e593335ac27d | 614 | // COMPARA resp con "F6379B1E569701" que es "voltaje", o "F6379B1E569701" que es "Voltaje". |
SusanaBM | 0:e593335ac27d | 615 | if ((strncmp("F6379B1E569701", msg, 14) == 0) || (strncmp("D6379B1E569701", msg, 14) == 0)) |
SusanaBM | 0:e593335ac27d | 616 | { |
SusanaBM | 0:e593335ac27d | 617 | //recibe_ok(); |
SusanaBM | 0:e593335ac27d | 618 | LedRojo = 0; // Encender LED amarillo. |
SusanaBM | 0:e593335ac27d | 619 | LedVerde = 0; |
SusanaBM | 0:e593335ac27d | 620 | LedAzul = 1; |
SusanaBM | 0:e593335ac27d | 621 | wait(2); |
SusanaBM | 0:e593335ac27d | 622 | |
SusanaBM | 0:e593335ac27d | 623 | med = v.read() * 3.3; |
SusanaBM | 0:e593335ac27d | 624 | medi = v.read(); |
SusanaBM | 0:e593335ac27d | 625 | pc.printf("\n%f\n", medi); |
SusanaBM | 0:e593335ac27d | 626 | |
SusanaBM | 0:e593335ac27d | 627 | cleanBuffer(outmed, 16); |
SusanaBM | 0:e593335ac27d | 628 | if (med < 1) |
SusanaBM | 0:e593335ac27d | 629 | { // Se convierte la Medida a caracter. |
SusanaBM | 0:e593335ac27d | 630 | strcat(outmed, "0"); |
SusanaBM | 0:e593335ac27d | 631 | ftoa(med, outmedn, 5); |
SusanaBM | 0:e593335ac27d | 632 | strcat(outmed, outmedn); |
SusanaBM | 0:e593335ac27d | 633 | } |
SusanaBM | 0:e593335ac27d | 634 | else |
SusanaBM | 0:e593335ac27d | 635 | { |
SusanaBM | 0:e593335ac27d | 636 | ftoa(med, outmed, 5); |
SusanaBM | 0:e593335ac27d | 637 | } |
SusanaBM | 0:e593335ac27d | 638 | strcpy(DE2, "Voltaje: "); |
SusanaBM | 0:e593335ac27d | 639 | strcat(DE2, outmed); |
SusanaBM | 0:e593335ac27d | 640 | pc.printf("\n%s\n\n", DE2); |
SusanaBM | 0:e593335ac27d | 641 | LENIN2 = strlen(DE2); |
SusanaBM | 0:e593335ac27d | 642 | |
SusanaBM | 0:e593335ac27d | 643 | //Conversión a octetos. |
SusanaBM | 0:e593335ac27d | 644 | K = 0; |
SusanaBM | 0:e593335ac27d | 645 | C = 0; |
SusanaBM | 0:e593335ac27d | 646 | for (i = 0; i < LENIN2; i++) |
SusanaBM | 0:e593335ac27d | 647 | { |
SusanaBM | 0:e593335ac27d | 648 | DS2[i] = DE2[i + C] >> K | DE2[i + C + 1] << (7 - K); |
SusanaBM | 0:e593335ac27d | 649 | if (DS2[i] == 0x00) |
SusanaBM | 0:e593335ac27d | 650 | { |
SusanaBM | 0:e593335ac27d | 651 | LENOUT2 = i; |
SusanaBM | 0:e593335ac27d | 652 | goto salir2; |
SusanaBM | 0:e593335ac27d | 653 | } |
SusanaBM | 0:e593335ac27d | 654 | K++; |
SusanaBM | 0:e593335ac27d | 655 | if (K == 7) |
SusanaBM | 0:e593335ac27d | 656 | { |
SusanaBM | 0:e593335ac27d | 657 | K = 0; |
SusanaBM | 0:e593335ac27d | 658 | C++; |
SusanaBM | 0:e593335ac27d | 659 | } // se chequea que ya se acabaron los bits en un ciclo de conversion. |
SusanaBM | 0:e593335ac27d | 660 | } |
SusanaBM | 0:e593335ac27d | 661 | |
SusanaBM | 0:e593335ac27d | 662 | salir2: |
SusanaBM | 0:e593335ac27d | 663 | for (i = 0; i < LENIN2; i++) |
SusanaBM | 0:e593335ac27d | 664 | { |
SusanaBM | 0:e593335ac27d | 665 | pc.printf("%X", DE2[i]); |
SusanaBM | 0:e593335ac27d | 666 | } |
SusanaBM | 0:e593335ac27d | 667 | |
SusanaBM | 0:e593335ac27d | 668 | pc.printf(":\r\n"); |
SusanaBM | 0:e593335ac27d | 669 | for (i = 0; i < LENOUT2; i++) |
SusanaBM | 0:e593335ac27d | 670 | { |
SusanaBM | 0:e593335ac27d | 671 | pc.printf("%2X", DS2[i] & 0x000000FF); |
SusanaBM | 0:e593335ac27d | 672 | } |
SusanaBM | 0:e593335ac27d | 673 | pc.printf("\r\nLENOUT VOLTAJE: %d, LENIN VOLTAJE: %2X\r\n", LENOUT2, LENIN2); |
SusanaBM | 0:e593335ac27d | 674 | |
SusanaBM | 0:e593335ac27d | 675 | // Concatenación del mensaje en formato PDU y envío del mismo. |
SusanaBM | 0:e593335ac27d | 676 | ind = 14 + LENOUT2 - 1; |
SusanaBM | 0:e593335ac27d | 677 | |
SusanaBM | 0:e593335ac27d | 678 | GSM.printf("AT+CMGS=%d\r\n", ind); |
SusanaBM | 0:e593335ac27d | 679 | pc.printf("AT+CMGS=%d\r\n", ind); |
SusanaBM | 0:e593335ac27d | 680 | pc.printf(relle1); |
SusanaBM | 0:e593335ac27d | 681 | GSM.printf(relle1); |
SusanaBM | 0:e593335ac27d | 682 | |
SusanaBM | 0:e593335ac27d | 683 | for (i = 0; i <= 9; i++) |
SusanaBM | 0:e593335ac27d | 684 | { |
SusanaBM | 0:e593335ac27d | 685 | pc.printf("%c", tel[i]); |
SusanaBM | 0:e593335ac27d | 686 | GSM.printf("%c", tel[i]); |
SusanaBM | 0:e593335ac27d | 687 | } |
SusanaBM | 0:e593335ac27d | 688 | |
SusanaBM | 0:e593335ac27d | 689 | pc.printf(relle2); |
SusanaBM | 0:e593335ac27d | 690 | GSM.printf(relle2); |
SusanaBM | 0:e593335ac27d | 691 | pc.printf("%2X", LENIN2); |
SusanaBM | 0:e593335ac27d | 692 | GSM.printf("%2X", LENIN2); |
SusanaBM | 0:e593335ac27d | 693 | /*pc.printf("0F"); |
SusanaBM | 0:e593335ac27d | 694 | GSM.printf("0F");*/ |
SusanaBM | 0:e593335ac27d | 695 | |
SusanaBM | 0:e593335ac27d | 696 | for (i = 0; i < LENOUT2; i++) |
SusanaBM | 0:e593335ac27d | 697 | { |
SusanaBM | 0:e593335ac27d | 698 | pc.printf("%02X", DS2[i] & 0x000000FF); |
SusanaBM | 0:e593335ac27d | 699 | GSM.printf("%02X", DS2[i] & 0x000000FF); |
SusanaBM | 0:e593335ac27d | 700 | } |
SusanaBM | 0:e593335ac27d | 701 | |
SusanaBM | 0:e593335ac27d | 702 | wait(1); |
SusanaBM | 0:e593335ac27d | 703 | GSM.putc((char)0x1A); // Ctrl - Z |
SusanaBM | 0:e593335ac27d | 704 | GSM.scanf("%s", buf); // Estado del mensaje (Envió o Error). |
SusanaBM | 0:e593335ac27d | 705 | pc.printf(">%s\n\n", buf); |
SusanaBM | 0:e593335ac27d | 706 | pc.printf("\n"); |
SusanaBM | 0:e593335ac27d | 707 | |
SusanaBM | 0:e593335ac27d | 708 | wait(2); |
SusanaBM | 0:e593335ac27d | 709 | LedRojo = 1; |
SusanaBM | 0:e593335ac27d | 710 | LedVerde = 0; |
SusanaBM | 0:e593335ac27d | 711 | GSM.printf("AT+CMGD=0\r\n"); // Borra el mensaje actual (Posición "0"). |
SusanaBM | 0:e593335ac27d | 712 | //pc.printf("\n%s\n\n", "Borro mensaje"); |
SusanaBM | 0:e593335ac27d | 713 | } |
SusanaBM | 0:e593335ac27d | 714 | } |
SusanaBM | 0:e593335ac27d | 715 | } |
SusanaBM | 0:e593335ac27d | 716 | } |
SusanaBM | 0:e593335ac27d | 717 | } |