Gracias DEA por el enlace, pero sigo en las mismas, el colega lo explica muy bien, pero cuanto más lo leo, menos entiendo como lo puedo implementar en mi código.
Cito de la página del enlace
programarfacil.com/blog/arduino-blog/if-else-arduino/
"Primero ponemos el " else ", luego " if " y entre paréntesis la condición. Entre las llaves el código que queremos que se ejecute cuando se cumple la condición.
Por ejemplo, este sería el código si queremos controlar 3 rangos en un pin analógico.
// Sentencia if con Arduino
If (valor > 800){ // Parpadear LED
digitalWrite (pinLed, HIGH;
delay (500);
digitalWrite (pinLed, LOW);
} else if (valor <= 88 && valor >500){ // Encender LED
digitalWrite(pinLed, HIGH;
} else { // Apagar LED
digitalWrite(pinLed, LOW);
}
El primer " if " comprueba si el valor del pin analógico es mayor que 800. Como sólo tiene el símbolo mayor que, empezará en 801. De 801 a 1023 ejecutará el código que hay dentro es decir, hará parpadear el LED.
La segunda condición empieza con " else if " y luego entre paréntesis la condición. Siempre que el valor analógico sea menor o igual que 800 o mayor que 500 (empezará en el 501) encenderá el LED y lo dejará fijo.
Por último, si no se cumplen las dos condiciones anteriores, entrará dentro del " else " y apagará el LED.
Vuelvo a repetir que cuando se anidan varios " if ", si uno de ellos cumple con la condición el resto de " if " no se ejecutarán. Esto hará que nuestro código sea más eficiente."
Hasta aquí es parte de lo que dice la pagina del enlace, que lo entiendo perfectamente
Pero yo no tengo en el código varios condicionantes en el mismo bloque del sensor, solo tengo un condicionante
"if si se cumple una condición haz algo"
" else si no se cumple la condición, haz otra cosa"
Por lo tanto no entiendo como lo puedo implementar en mi código.
En el único sitio que tengo varios condicionantes seguidos y relacionados es en el "Maestro", en el bloque de la recepción de datos de los DHT22, líneas 436 y siguientes hasta la línea 458, que como son 6 lecturas, 3 de temperatura y 3 de humedad, le digo que si alguno de los 3 datos de temperatura pasa de 50 ºC, enciende el LED de alarma.
Lo único que se me ocurre es poner en el código del "Maestro" estos 3 condicionantes en uno de alguna manera, por ejemplo así están ahora
if (ROVTMP > 50)
if (ROVTMP1 > 50)
if (ROVTMP2 > 50)
{
digitalWrite(TwarnLEDpin, HIGH); // Si la temperatura interior del ROV es demasiado alta (más de 50 grados C) enciende el led de advertencia
Serial.print(" \n TEMPERATURA ELEVADA !"); // hay que modificarlo para que a demás, dispare el relé de la bomba de refrigeración
}
else
{
digitalWrite(TwarnLEDpin, LOW);
Serial.print(" \n Temperatura Normal"); // de lo contrario, si la temperatura interior está en un nivel aceptable deje el led apagado y deje el relé de la bomba de refrigeración apagado
}
Cambiarlo por esto, que no se si funcionará, que creo que sí
if (ROVTMP > 50 || ROVTMP1 > 50 || ROVTMP2 > 50) // de 3 "if", hacer solo 1, lo demás no se toca
De esta forma en vez de tener 3 " if " seguidos, solo tendría 1, que hace lo mismo, pero solo elimino 2 " if ", no consigo nada mas, el resto de los " if " se quedarían como están.
Esto en el código del "Maestro", en el código del "Esclavo", no veo como eliminar ni un solo " if ", que no estoy diciendo que no se pueda, porque si me lo advertido DEA, es porque ha visto que si puede hacer, solo comento que yo no veo, o no entiendo cómo hacerlo.
De no ser que me quieras decir que cambie todos los " if ", por " else if ", sin eliminar ninguno, porque se ejecute mejor el código y que el código sea mas ágil para el Arduino, con los " else if ", que con el " if " solo, aunque solo haya un condicionante en el bloque, por ejemplo así
else if (ROVTMP > 50 || ROVTMP1 > 50 || ROVTMP2 > 50)
{
digitalWrite(TwarnLEDpin, HIGH); // Si la temperatura interior del ROV es demasiado alta (más de 50 grados C) enciende el led de advertencia
Serial.print(" \n TEMPERATURA ELEVADA !"); // hay que modificarlo para que a demás, dispare el relé de la bomba de refrigeración
}
else
{
digitalWrite(TwarnLEDpin, LOW);
Serial.print(" \n Temperatura Normal"); // de lo contrario, si la temperatura interior está en un nivel aceptable deje el led apagado y deje el relé de la bomba de refrigeración apagado
}
No le veo otra explicación, ni otra forma de implementarlo en mi código.
Un saludo a todos.