Bienvenido, Invitado
Nombre de Usuario: Contraseña: Recordarme

TEMA:

Un ROV de agua dulce, con mando de PS2 3 años 11 meses antes #1596

Lo siento pero o me estoy haciendo viejo, y duro de mollera, o no consigo encontrar una página que explique como Dios manda el tema de los "if anidados", y sigo sin entender nada.

Por lo que estoy viendo a cualquier función que contenga "if", seria cambiarla por "else if".
Si lo pongo junto no me lo reconoce como función predeterminada del Ide Arduino, y no sé si hace algo.
Si lo pongo separado me da error de compilación, seguro que lo estoy haciendo mal, pero como no encuentro ninguna solución válida, no sé ni cómo ni dónde encontrarla. Siempre me quedara el preguntarle a mi amigo Atilano Belinchón, pero tampoco es cuestión de pasarse)

Mientras tanto estoy arreglando (creo), el tener disponibles todos los botones del mando en los dos Arduinos, para que me realicen funciones de control de ROV, parece que ya estoy viendo la luz al final del túnel con este tema, pero aun me quedan bastantes líneas de programación.

A ver si término de una vez con todo esto y puedo empezar con la Nextion, que también tiene bastante trabajo.

Un saludo.

Por favor, Identificarse para unirse a la conversación.

Un ROV de agua dulce, con mando de PS2 3 años 11 meses antes #1597

No es mas que el primer if es normal y los demás else if:
Lee este enlace que te acabo de buscar y te lo explican muy bien, Te explica la sentencia if y else completa.
Haber si entre mañana y el finde te subo el codigo de la autocarabana, que lo quiero comentar entero para que lo entendáis.

programarfacil.com/blog/arduino-blog/if-else-arduino/
El siguiente usuario dijo gracias: asesorplaza1

Por favor, Identificarse para unirse a la conversación.

Un ROV de agua dulce, con mando de PS2 3 años 11 meses antes #1601

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.

Por favor, Identificarse para unirse a la conversación.

Última Edición: por asesorplaza1.

Un ROV de agua dulce, con mando de PS2 3 años 11 meses antes #1603

DEA, cuando en tu respuesta # 1597, comentas

No es mas que el primer if es normal y los demás else if:


te refieres al primer " if " del código que esta en el void setup
al primero que hay en el void setup y al primero que hay en el void loop
o solo al primer " if ", que hay en el void loop.

según entiendo del código de la pagina que pones seria el primer " if " del void loop, y todos los demás " if ", cambiarlos por " else if "

Un saludo.

Por favor, Identificarse para unirse a la conversación.

Última Edición: por asesorplaza1.

Un ROV de agua dulce, con mando de PS2 3 años 11 meses antes #1609

Bueno, pues después de toda la tarde cambiando " if " por " else if ", y depurando un montón de fallos de compilación, he conseguido cambiar muchos de los " if ", por los " else if ", también he conseguido incorporar todos los botones del mando en los dos programas, y he incluido el sistema de refrigeración del casco y de los tubos de los motores.

No he podido cambiar todos los "if " por " else if ", porque el error de compilación me decía que no puede haber un " else " delante de un " if ", aun así he cambiado muchos en los dos programas.

Adjunto los dos programas para ver si así os gustan más, (ya sé que no es cuestión de gustos, si no de eficiencia).

Tampoco he podido incluir las funciones del mando en el código " Esclavo ", en un bloque de trabajo como están el resto de los sensores, no sé por qué, pero no lo admite, por eso están dentro del void loop general.

Os ruego que le echéis un vistazo a los dos códigos, a ver si veis alguna otra cosa que se pueda mejorar

Un saludo
Adjuntos:

Por favor, Identificarse para unirse a la conversación.

Última Edición: por asesorplaza1.

Un ROV de agua dulce, con mando de PS2 3 años 11 meses antes #1610

Buenas
Acabo de ver el código y veo que ya has entendido lo de los if, lo tienes echo bien, te estaba buscando mas ejemplo para explicártelo, pero ya veo que lo entendiste.
Animo ya te queda poco.
El siguiente usuario dijo gracias: asesorplaza1

Por favor, Identificarse para unirse a la conversación.

Tiempo de carga de la página: 0.116 segundos
Gracias a Foro Kunena

Login