...La cuestión es que al recabar información para plantearme la construcción de la placa, los responsables de la residencia de ancianos sólo me dijeron que debería avisar a un teléfono de los cuidadores, sin añadir nada más ...Pero cuando puse el sistema en marcha añadieron que en realidad debía avisar a tres teléfonos, correspondientes a los cuidadores repartidos entre las tres plantas, y entonces me encontré que al aumentar el número de llamadas sucesivas, los envíos SMS comenzaron a fallar. Siempre pasaba bien el primero y casi siempre el segundo, pero el tercero solía fallar mucho, y el cuarto o se perdía en el limbo digital de las señales perdidas o aparecía en el teléfono de destino a los cuatro o cinco minutos de haber sido enviado...
Sin duda era un problema de saturación de peticiones, pero no en mi placa ni en módulo GSM, si no en el operador, y eso, con pocas diferencias, me pasaba tanto en las pruebas realizadas con Movistar, como con Vodafone y Orange. Al fin jugando con las pausas entre órdenes conseguí una buena fiabilidad en los envíos, en que el primer mensaje apareciera sobre los 8 segundos de la alarma inicial, y los sucesivos unos 10 segundos después de cada mensaje anterior.
Esta función modificada la probé incluso con 8 mensajes seguidos, sin que fallara nunca ninguno, y por tanto, considerando que normalmente sólo serían 4, podría esperar más estabilidad y que nunca se perdieran avisos.
Pero esto no fue todo. Luego, cuando tuve software corregido, me vinieron con otra historia que el orden de los mensajes no fuera siempre el mismo dependiendo del piso de origen de la llamada, porque al parecer no todos los grupos de cuidadores tenían el mismo estatus, por ejemplo, si llaman desde los baños asistidos de la planta baja (donde no hay cuidadores), han de avisar primero los del 2º piso, que siempre son más y tienen estos baños a su cargo, luego hay que avisar a los del 3º y finalmente a los del 1º... La tabla de orden de envío según las plantas sería la siguiente:
Llamada desde planta baja: 2, 3, 1 y supervisora
Llamada desde planta 1ª: 1, 2, 3 y supervisora
Llamada desde planta 2ª: 2, 3, 1 y supervisora
Llamada desde planta 3ª: 3, 2, 1 y supervisora
...Entonces, para no complicarme la vida añadí una línea más a la matriz de habitaciones, que indicaba a qué planta pertenecía cada llamada, y ese valor cargado en una variable seleccionaba con varios if() el orden de llamada, teniendo en cuenta que el orden para las opciones primera y tercera era el mismo...
Código: Seleccionar todo
void EnviaSMS() //Funcion para el envio SMS múltiples
{
if (mensaje!="" && envSMS==1) //Si mensaje distinto de "vacío" y hay permiso de envío
{
digitalWrite(52, HIGH); //Enciende LED ROJO de la placa, indicador de envío en curso
Serial2.println("AT+CBAND=ALL"); //Seleccionamos banda GSM
delay(1000);
Serial2.println("AT+CMGF=1\r"); //Activamos envio SMS
delay(2000); //Pequeña pausa
for(int f=1; f<(numSMS+1); f++) //Envía mensaje a Nº teléfonos en numSMS (actualmente 4)
{
mensajeFin = "T" + String(f) + '\n' + '\r' + mensaje; //Añade indicador de teléfono al que llama
if (planta == 0 || planta == 2)
{
if (f == 1){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 2
if (f == 2){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 3
if (f == 3){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 1
if (f == 4){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. supervisora
}
if (planta == 1)
{
if (f == 1){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 1
if (f == 2){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 2
if (f == 3){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 3
if (f == 4){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. supervisora
}
if (planta == 3)
{
if (f == 1){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 3
if (f == 2){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 2
if (f == 3){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. cuidadores Planta 1
if (f == 4){Serial2.println("AT+CMGS=\"+34*********\"");} //SMS a telef. supervisora
}
delay(2000); //Pequeña pausa entre mensajes
Serial2.print(mensajeFin); //Enviamos mensaje a módulo GSM
delay(2000); //Pequeña pausa
Serial2.print(char(26)); //Enviamos el equivalente a Control+Z
delay(2000); //Pequeña pausa
Serial2.println(""); //Enviamos un fin de linea
delay(2000); //Pequeña pausa
Serial2.println("ATH"); //Enviamos colgar llamadas
delay(5000); //Espera para próximo envío
}
digitalWrite(52, LOW); //Apaga LED ROJO indicador de envio SMS
}
return;
}
Un saludo a todos