Error Aletario

Buenas noches a todos. En esta ocasión recurro para ver si alguno de ustedes considera que estoy cometiendo un error de lógica en el código del arduino.

La consulta es: apreto un pulsador, este me dispara un msj de texto a través de un servicio en la nube mediante un metodo GET, que me indica que se genero este evento(llamemoslo incidencia). Hasta ahí todo ok. Si a los 5 minutos ese evento no fue resulto (no se presiono otro pulsador) se debe reenviar un mensaje diciendo esto.

Que me pasa? En ocasiones (muy aleatoriamente) ni bien presiono el pulsador que genera el evento(incidencia) no solo se me dispará el mensaje que indica esto, sino que también se dispara el mensaje que debería dispararse a los 5 minutos.......

La parte del código donde se ve esto es:

if (puls9IR and digitalRead(luzVerdeRoja9)) { //pusaldor Izq Rojo activado
    digitalWrite(luzVerdeRoja9, RELAY_ON); ///Activo rele señal luminosa roja y se apaga la señal luminosa verde
    digitalWrite(luzVerdeRojaMtto, RELAY_ON); //Activo rele señal luminosa mttto Roja y se apaga la señal luminosa verde
    digitalWrite(luzVerdeRojaJT, RELAY_ON); //Activo rele señal luminosa JT Roja y se apaga la señal luminosa verde
    presionado9IR = true;
    sprintf(aux, "9,'Izquierdo','VL','N'");
    client.publish("IncidenciaGenerada", aux);
    Serial.println("Registrando en base de datos la incidencia generada pasillo 9...");
    mensaje_sms_mtto(mensajeIzq);
    mensaje_sms_super(mensajeIzq);
    mensaje_sms_maes(mensajeIzq);
}
//REENVIO DE SMS SINO SE PULSO EL BOTON DE TRATAMIENTO DE ALARMA
  //SINO SE SOLUCIONO LA INCIDENCIA (NO SE APRETO PULSADOR VERDE EN UN PERIODO MAYOR A 5MIN, REDISPARO SMS
  if ((tiempo - previousMillisSMS9) >= tiempoReenvioSMS) {
    if (!digitalRead(luzVerdeRoja9) and (contadorReenvio9 <= cantidadSMSReenvio)) {
      contadorReenvio9 = contadorReenvio9 + 1;
      mensaje_sms_mtto(mensajeNoTratado);
      mensaje_sms_super(mensajeNoTratado);
      mensaje_sms_maes(mensajeNoTratado);
      //llamarMaestranza();
      previousMillisSMS9 = tiempo;
    }
  }

Adjunto código completo por exceder la longitud impuesta.

Un abrazo y gracias a todos

para_el_foro.ino (30.9 KB)

Hola,

Bajo mi punto de vista tu problema es donde realizas la asignación del tiempo.

previousMillisSMS9 = tiempo;

Lo haces después de enviar el mensaje de recordatorio, yo creo que tendrías que poner esa linea en el if donde se dispara la alarma ya que es en ese momento cuando tienes que contar el tiempo para enviar el recordatorio.
Tu problema que dices que es aleatorio yo creo que realmente sucede si hay una segunda incidencia y entre ambas a trascurrido mas de del tiempo para el reenvío.

Como estas rodripelto? Gracias por el aporte. Ahora que lo mencionas tiene mucha lógica lo que decís, debería tomar el instante de tiempo ni bien tengo el evento de incidencia(botón presionado).
Me imagino que esto me pasa porque el tiempo que tomo con millis es mayor al tiempo de reenvió(cuando dejo correr el código) entonces al presionar el pulsador esa condición ya esta cumplida y se me cumple la segunda.

Muchas gracias.

Mañana en el trabajo lo pruebo y les cuento.

Abz

Solucionado! Muchas gracias!