# Supervisor de Red no actualiza los mensajes

**URL:** <https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081>\
**Category:** Software\
**Created:** [October 10, 2025, 5:08pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081 "2025-10-10T17:08:45Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![cnoguesp](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cnoguesp/32/1127044_2.png) [@cnoguesp](https://forum.arduino.cc/u/cnoguesp)\
**Post date:** [October 10, 2025, 5:08pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/1 "2025-10-10T17:08:45Z")

</div>

Hola amigos:

Soy novato en el tema de la programación del Arduino, he realizado montajes con el, pero siempre modificando algún programa existente en la red.

En mi domicilio me ha pasado que, sin motivo aparente, ha saltado el diferencial que alimenta la nevera con el problema que genera.

Por ello he diseñado un programa que vigila los dos diferenciales de la instalación que funciona , pero aparentemente cuando hay un micro corte o un espurio señaliza correctamente la falta de tensión, pero no así su recuperación. Os mando el sketch por si podéis ayudarme.

```arduino
//Módulo de telefonia movil SIM800L
#include <SoftwareSerial.h> //libreria del SIM900

//Configuracion del SIM900
SoftwareSerial SIM900(7, 8);

const int Dif1 = 2; // objeto(1), representa el estado de un objeto tangible, como el estado de una puerta por ejemplo.
const int Dif2 = 4;

//Pin 10 Información estado nevera Dif1
//Pin 11 Informacion estado red Dif2

int enviar = 0;
String Mensaje;

unsigned long retardo = 300000; //retardo de 3 segundosd
unsigned long timing ; // Varaible para almacenar el punto de referencia en Void setup

boolean SMS_Open1 = true;
boolean SMS_Closed1 = true;
boolean SMS_Open2 = true;
boolean SMS_Closed2 = true;

void setup() {

  Serial.begin(19200);
  SIM900.begin(9600); //Velocidad de comunicacion con el modulo SIM800L
  pinMode(Dif1, INPUT_PULLUP);
  pinMode(Dif2, INPUT_PULLUP);
  pinMode(10, OUTPUT); //Sensor(1) representacion de la salida de un sensor monitoreando el objeto(1)
  pinMode(12, OUTPUT); //Sensor(2) representacion de la salida de un sensor monitoreando el objeto(2)
  SIM900.println("AT+CMGF=1\r"); // Configurar el módulo en modo de texto
  delay(500); //Tiempo de espera para que el modulo se conecte a una red
  SIM900.println("AT+CNMI=2,2,0,0,0\r"); //Configuracion de la forma como recibir mensajes
  Mensaje.reserve(100);

}

void loop() {
  
   // Cuando el sensor esta indicando que el diferencial1 Nevera esta CERRADO:
      timing = millis(); //Inicializa timing
  if ((digitalRead(Dif1) == HIGH) && (digitalRead(10) == LOW))
  {
    if (millis() - timing >= retardo); { //ajustar valor de retardo
      timing = millis();
    }

    digitalWrite(10, HIGH);
    SMSDif1_con_tension(); //Se envía la notificacion del evento
    SMS_Closed1 = true;
    //delay(300);

  }

  //Cuando el sensor esta indicando que el diferencial1 Nevera esta ABIERTO:

  else if ((digitalRead(Dif1) == LOW) && (digitalRead(10) == HIGH))
  {
    timing = millis();
    if (millis() - timing >= retardo); { //ajustar valor de retardo
      timing = millis();

    }
    digitalWrite(10, LOW);
    SMSDif1_sin_tension (); //Se envía la notificacion del evento
    SMS_Open1 = true;
    //delay (300);
  }

  // Cuando el sensor esta indicando que el diferencial1 General esta CERRADO:
  timing = millis();
  if ((digitalRead(Dif2) == HIGH) && (digitalRead(12) == LOW))
  {
    if (millis() - timing >= retardo); { //ajustar valor de retardo
      timing = millis();

    }
    digitalWrite(12, HIGH);
    SMSDif2_con_tension(); //Se envía la notificacion del evento
    SMS_Closed2 = true;
    //delay(300);
  }

  //Cuando el sensor esta indicando que el diferencial1 General esta ABIERTO:
  else if ((digitalRead(Dif2) == LOW) && (digitalRead(12) == HIGH))
  {
  timing = millis();
    if (millis() - timing >= retardo); { //ajustar valor de retardo
      timing = millis();

    }
    digitalWrite(12, LOW);
    SMSDif2_sin_tension (); //Se envía la notificacion del evento
    SMS_Open2 = true;
    //delay (300);
  }
}

//Lo que se escriba en el monitor serie, se trasladará al modulo SIM800L
void serialEvent() {
  if (Serial.available())
  {
    String text = Serial.readString();
    SIM900.println(text);
 
 }
}

//Rutina de servicio a la interrupcion para el monitor serie 1
void serialEvent1(){
  if (SIM900.available() > 0 )
  {
    Mensaje = SIM900.readStringUntil("\n");
    Serial.println("Nuevo Mensaje:");
    SIM900.println(Mensaje);
  }
}

//Funcion de alerta sobre Diferencial Nevera con tension por SMS
void SMSDif1_con_tension()
{
  if (SMS_Open1 == true)
  {
    envio_SMS("ZONA NEVERA NORMAL");
    SMS_Open1 = false;
  }
}  
 
//Funcion de notificacion de Diferencial Nevera sin tension SMS
void SMSDif1_sin_tension()
{
  if (SMS_Closed1 == true)
  {
    envio_SMS("ZONA NEVERA SIN TENSION");
    SMS_Closed1 = false;
  }
}  
 

//Funcion de alerta sobre Diferencial Red con tension por SMS
void SMSDif2_con_tension()
{
  if (SMS_Open2 == true)
  {   
    envio_SMS("ZONA NEVERA Y RED NORMAL");
    SMS_Open2 = false;
  }
}  

//Funcion de notificacion de Diferencial Red sin tension SMS
void SMSDif2_sin_tension()
{
  if (SMS_Closed2 == true)
  {   
  envio_SMS("ZONA NEVERA CON TENSION");
    SMS_Closed2 = false;
  }
}   

 void envio_SMS(const char *str) {
     SIM900.println("AT+CMGF=1");
     delay(200);
     SIM900.println("AT+CMGS=\"+34609778883\"");
     delay(200);     
     SIM900.print(str);
     delay(200);
     Serial.println(str);
     delay(200);
     SIM900.print((char)26);
     delay(200);
     SIM900.println("");
     delay(200);
     
 }

```

Otra cosa que me gustaría implementar es la posibilidad de interrogar al Arduino para que me refrescara la información, lo he intentado añadiendo alguna cosa para probar pero no consigo resultados.

Agradecería vuestra ayuda.

Gracias

Cesarnp

---

<div class="post-metadata">

**Author:** ![gilshultz](https://avatars.discourse-cdn.com/v4/letter/g/67e7ee/32.png) [@gilshultz](https://forum.arduino.cc/u/gilshultz)\
**Post date:** [October 10, 2025, 5:29pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/2 "2025-10-10T17:29:39Z")

</div>

Sorry I cannot follow what you want. The translation does not make any sense. This is the English area of the forum. Posting in the area where your language is spoken will help.

---

<div class="post-metadata">

**Author:** ![sterretje](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sterretje/32/391294_2.png) [@sterretje](https://forum.arduino.cc/u/sterretje)\
**Post date:** [October 10, 2025, 5:58pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/3 "2025-10-10T17:58:49Z")

</div>

Tu tema ha sido movido a la sección en español del foro. Utiliza el inglés en las secciones en inglés del foro.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [October 10, 2025, 6:21pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/4 "2025-10-10T18:21:49Z")

</div>

Agrega el esquema de conexiones y dinos que placa usas porque, por ahora, la clarividencia no es lo nuestro.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [October 13, 2025, 11:46pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/6 "2025-10-13T23:46:06Z")

</div>

Ya que parece que no lees lo que te responden y solo te limitas a repetir lo que ya has escrito, hago lo mismo

> [@MaximoEsfuerzo](#):
>
> **Agrega el esquema de conexiones y dinos que placa usas porque, por ahora, la clarividencia no es lo nuestro.**

O sea, **no somos adivinos**.

---

<div class="post-metadata">

**Author:** ![cnoguesp](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cnoguesp/32/1127044_2.png) [@cnoguesp](https://forum.arduino.cc/u/cnoguesp)\
**Post date:** [November 2, 2025, 8:04pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/7 "2025-11-02T20:04:02Z")

</div>

> [@cnoguesp](#):
>
> Como novato en el tema y que, a mis 79 años intento aprender a programarlos , os pido ayuda para resolver el problema. Gracias
> 
> Volviendo al caso con las aperturas intempestivas de los diferenciales, principalmente el que alimenta la nevera y congelador, he realizado este montaje y el sketch adjunto.
> 
> He podido resolver el problema que tenía con la señalización después de un microcorte mediante un debounce que funciona correctamente.
> 
> Ahora intento implementar poder interrogar al Arduino y que me responda con un mensaje según el estado de las salidas 10 y 12 que alimentan los leds pero no lo consigo .
> 
> Lo que busco es mandar un código SMS al Arduino y que este verifique que el mensaje recibido es el correcto y también que se cumple la condición que led 10 este en HIGH, entonces mandar un mensaje al SIM como “diferencial1 correcto”; en el caso de que el led 10 este LOW mandar un mensaje al SIM como “diferencial 1 abierto”. Mi intento es el último void “Void Preguntar”del sketch pero no me funciona.
> 
> Idéntica operación para el diferencial 2

ESQUEMA DEL CIRCUITO CON EAGLE

[ESQUEMA ARDUINO.pdf](https://forum.arduino.cc/uploads/short-url/lP9XHyZxc5DNGiVcGsu3vDclmd.pdf) (56.5 KB)

SKETCH

```arduino
#include <SoftwareSerial.h>
SoftwareSerial SIM900 (7,8);

const int Dif1 = 2; // Pin donde está conectado el diferencial 1
const int Dif2 = 4; // Pin donde esta conectado el diferencial 2
int estadoDif1; // Estado actual del diferencial 1
int estadoDif2; // Estado actual del diferencial 2
int ultimoEstadoDif1; // Estado anterior del diferencial 1
int ultimoEstadoDif2; // Estado anterior del diferencial 2
unsigned long ultimoTiempoDebounce1 = 0; // Tiempo en el que ocurrió el último cambio
unsigned long retardoDebounce1 = 3000; // Retardo en milisegundos
unsigned long ultimoTiempoDebounce2 = 0; // Tiempo en el que ocurrió el último cambio
unsigned long retardoDebounce2 = 3000; // Retardo en milisegundos

int enviar = 0;
String Mensaje;

boolean SMS_Open1 = true;
boolean SMS_Closed1 = true;
boolean SMS_Open2 = true;
boolean SMS_Closed2 = true;

void setup() {
pinMode(2, INPUT_PULLUP); // Configurar el pin como entrada con resistencia pull-up interna
pinMode(4, INPUT_PULLUP); // Configurar el pin como entrada con resistencia pull-up interna
pinMode (10,OUTPUT); //Estado diferencial 1
pinMode (12,OUTPUT); //Estado diferencial
// pinMode (13,OUTPUT); // Señalizacion recepcion SMS

Serial.begin(19200); //velocifdad comunicacion con monitor serial
SIM900.begin(9600); //velicidad comunicacion SIM
SIM900.println ("AT+CMGF=1\r"); //configurar SIM modo texto
delay (500); //tiempo espera acomodar SIM
SIM900.println ("AT+CNMI=2,2,0,0,0\r"); //Configura SIM para mostrar SMS por puerto serie
Mensaje.reserve(100);
}

void loop() {
loopDif1();
loopDif2();

}

// Leer el estado actual del diferencial 1
void loopDif1() {
int lectura1 = digitalRead(Dif1);

// Detectar si el estado ha cambiado
if (lectura1 != ultimoEstadoDif1) {
ultimoTiempoDebounce1 = millis(); // Reiniciar el temporizador
}

// Comprobar si ha pasado el tiempo de retardo
if ((millis() - ultimoTiempoDebounce1) > retardoDebounce1) {
// El botón se ha estabilizado, registrar el cambio
if (lectura1 != estadoDif1) {
estadoDif1 = lectura1;

  // Si el diferencial está cerrado (estado bajo, debido a INPUT_PULLUP)
  if (estadoDif1 == LOW) {
    digitalWrite (10, HIGH);
    SMSDif1_con_tension(); //Se envia notificación del evento
    SMS_Closed1 = true;
  }
 else if (estadoDif1 == HIGH) {
  digitalWrite (10, LOW);
  SMSDif1_sin_tension(); //Se envia notificación del evento
  SMS_Open1 = true;
 }
}

}
//Guardar la lectura actual para la siguiente iteración
ultimoEstadoDif1 = lectura1;
}

// Leer el estado actual del diferencial
void loopDif2() {
int lectura2 = digitalRead(Dif2);

// Detectar si el estado ha cambiado
if (lectura2 != ultimoEstadoDif2) {
ultimoTiempoDebounce2 = millis(); // Reiniciar el temporizador
}

// Comprobar si ha pasado el tiempo de retardo
if ((millis() - ultimoTiempoDebounce2) > retardoDebounce2) {
// El botón se ha estabilizado, registrar el cambio
if (lectura2 != estadoDif2) {
estadoDif2 = lectura2;

  // Si el diferencial está cerrado (estado bajo, debido a INPUT_PULLUP)
  if (estadoDif2 == LOW) {
    digitalWrite (12, HIGH);
   SMSDif2_con_tension(); //Se envia notificación del evento
   SMS_Closed2 = true;
  }
 else if (estadoDif2 == HIGH) {
  digitalWrite (12, LOW);
  SMSDif2_sin_tension(); //Se envia notificación del evento
  SMS_Open2 = true;
 }
}  

}
// Guardar la lectura actual para la siguiente iteración
ultimoEstadoDif2 = lectura2;

}

//Lo que se escriba en el monitor serie se traasladará al módulo SIM900
void serialEvent(){
if (Serial.available())
{
String text = Serial.readString();
SIM900.println(text);
}
}

//Rutina de servicio a la interrupción para el monitor serie
void serialEvent1(){
if (SIM900.available() > 0)
{
Mensaje = SIM900.readStringUntil ("\n");
Serial.println ("Nuevo Mensaje:");
SIM900.println(Mensaje);
}
}

//Funcion de alerta sobre Diferencial Nevera con tension por SMS
void SMSDif1_con_tension(){
if (SMS_Open1 == true)
{
envio_SMS("ZONA NEVERA NORMAL");
SMS_Open1 = false;
}
}

//Funcion de notificacion de Diferencial Nevera sin tension SMS
void SMSDif1_sin_tension(){
if (SMS_Closed1 == true)
{
envio_SMS("ZONA NEVERA SIN TENSION");
SMS_Closed1 = false;
}
}

//Funcion de alerta sobre Diferencial Red con tension por SMS
void SMSDif2_con_tension(){
if (SMS_Open2 == true)
{
envio_SMS("RED NORMAL");
SMS_Open2 = false;
}
}

//Funcion de notificacion de Diferencial Red sin tension SMS
void SMSDif2_sin_tension(){
if (SMS_Closed2 == true)
{
envio_SMS("RED SIN TENSION");
SMS_Closed2 = false;
}
}

void envio_SMS(const char *str) {
//SIM900.println("AT+CMGF=1/r");
//delay(200);
SIM900.println("AT+CMGS="+34609778883"");
delay(200);
SIM900.print(str);
delay(200);
Serial.println(str);
delay(200);
SIM900.print((char)26);
delay(200);
SIM900.println("");
delay(200);

}

void preguntar() {
if (SIM900.available() >0) {
String mensaje = SIM900.readString(); //Lee los datos del modulo SIM
Serial.println(mensaje);
if (mensaje.indexOf ("E") =0 && 10 = HIGH) { //Busca el codigo "E" en el mensaje
// digitalWrite (13,HIGH);
SIM900.println (" NEVERA CON TENSION");
}else {
// digitalWrite(13,LOW);
SIM900.println ("NEVERA SIN TENSIONo");
SIM900.println("AT+CMGS="+xxxxxxxxx""); // Reemplaza con el número de teléfono
SIM900.write(26);
}
}

```

Gracias

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [November 2, 2025, 8:37pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/8 "2025-11-02T20:37:11Z")

</div>

La sintaxis de la linea

```arduino
if (mensaje.indexOf ("E") =0 && 10 = HIGH) { 

```

es incorrecta.  
Pero además

```arduino
10 = HIGH

```

no tiene sentido, intenta asignar un valor a un literal (10 es 10 y no se puede cambiar).

Lo correcto es

```arduino
if (mensaje.indexOf ("E") == 0 && digitalRead(10) == HIGH) { 

```

Si embargo sería más apropiado usar el estado del diferencial en lugar del de su LED testigo.

```arduino
if (mensaje.indexOf ("E") == 0 && estadoDif1 == LOW) { 

```

Por otro lado

```arduino
  // Si el diferencial está cerrado (estado bajo, debido a INPUT_PULLUP)
  if (estadoDif1 == LOW) {
    digitalWrite (10, HIGH);
    SMSDif1_con_tension(); //Se envia notificación del evento
    SMS_Closed1 = true;
  }
 else if (estadoDif1 == HIGH) {
  digitalWrite (10, LOW);
  SMSDif1_sin_tension(); //Se envia notificación del evento
  SMS_Open1 = true;
 }

```

se puede simplificar a

```arduino
  // Si el diferencial está cerrado (estado bajo, debido a INPUT_PULLUP)
  if (estadoDif1 == LOW) {
    digitalWrite (10, HIGH);
    SMSDif1_con_tension(); //Se envia notificación del evento
    SMS_Closed1 = true;
  } else {
    digitalWrite (10, LOW);
    SMSDif1_sin_tension(); //Se envia notificación del evento
    SMS_Open1 = true;
  }

```

Ya que `estadoDif1` solo puede tener dos valores, `HIGH` y `LOW` y si no es `LOW` solo puede ser `HIGH`, no hay otros posibles valores que justifiquen una sentencia `else if()`.

Lo mismo para el otro diferencial.

---

<div class="post-metadata">

**Author:** ![cnoguesp](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cnoguesp/32/1127044_2.png) [@cnoguesp](https://forum.arduino.cc/u/cnoguesp)\
**Post date:** [November 3, 2025, 5:56pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/9 "2025-11-03T17:56:38Z")

</div>

Hola:

Corregido el primer error de sintaxis, y simplificado el sketch según tu consejo. Ahora si que me compila pero continúa sin responder a mi pregunta. Continuaré investigando el porqué.

Gracias por tu ayuda.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 2, 2026, 5:56pm UTC](https://forum.arduino.cc/t/supervisor-de-red-no-actualiza-los-mensajes/1409081/10 "2026-05-02T17:56:48Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
