Entrega tarea GSM grupo verde procesadores 2019-1

Dependencies:   mbed GPS Library DebounceIn DebouncedIn

Committer:
SusanaBM
Date:
Fri Aug 30 20:56:39 2019 +0000
Revision:
0:e593335ac27d
Termple;

Who changed what in which revision?

UserRevisionLine numberNew 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 }