Inicio » Programación para Arduino » La condicional if

¿Qué es la instrucción condicional if?

La instrucción condicional if es un tipo de instrucción alternativa. Permite generar alternancia en el código en función de una o varias condiciones. ¿Qué significa esto? Pues que la instrucción if permite o evita que se ejecute un bloque de código dependiendo de si se cumple o no una condición lógica.

La instrucción if puede ser muy útil, por ejemplo, para evaluar el estado de una entrada de Arduino y ejecutar un código dependiendo del estado.

Por ejemplo, imagina que quieres que ocurra una determinada acción cuando leas valor HIGH de un pin digital. Puedes hacerlo con una instrucción if.

También puede ser muy útil para tomar decisiones en función del resultado de una operación previa y ejecutar ciertas instrucciones cuando se de un resultado especifico.

Supón que estás sumando dos números y si el resultado es 5 quieres que se ejecuten un conjunto de instrucciones. En este caso la instrucción if es la elección perfecta.

Sintaxis de la instrucción if

La sintaxis de la instrucción condicional if es la siguiente:

if (condición){
  //instrucciones que se ejecutan si se cumple la condición
}

La condición entre paréntesis es una operación lógica. Es decir, puedes construir una expresión utilizando cualquier operador siempre que el resultado final sea un valor lógico (true o false).

Veamos algunos ejemplos válidos de condiciones:

(5 + 3) == 8 //resultado true
8 > 2 //resultado true
digitalRead(3) == HIGH //dependiendo del valor por digitalRead puede ser true o false 
x <= y //dependiendo de los valores de las variables el resultado será true o false

Cuando el valor de la condición es true la instrucción if ejecuta el bloque de instrucciones que tiene entre llaves, el cuerpo del if. Por el contrario, si es false, ese bloque se lo salta continuando la ejecución después de la última llave.

La condicional if afecta solo al bloque entre llaves, que se ejecutará o no dependiendo del valor de la condición. El resto del código del sketch es totalmente independiente a ella por lo que su ejecución no se verá afectada.

Ejemplo de condicional if

Vamos a ver un ejemplo para que te quede mucho más claro:

int numero = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  numero++;
  if(numero%2==0){
    Serial.print(numero);
    Serial.println(" PAR");
  }
  delay(1000)
}

Fíjate que al principio del sketch he declarado una variable entera que he llamado numero y he inicializado con valor 0:

int numero = 0;

Dentro de la función loop utilizo la variable numero dentro de la condición de la instrucción if. Vamos a analizar esta parte con detenimiento.

Justo antes de la instrucción if incremento numero en una unidad:

numero++;

Esto hace que la variable numero pase a valer 1. Recuerda que estaba inicializada a 0.

A continuación se ejecuta la condicional if. Las instrucciones entre llaves ahora nos dan igual. Fíjate en la condición entre paréntesis:

if(numero%2==0){
 ...
}

¿La expresión numero % 2 == 0 es true? No, porque numero es 1 y el resto (%) de dividir 1 entre 2 es 1 y no 0, por tanto la evaluación de esta condición es false y no se ejecutarán las instrucciones que hay entre llaves.

¿Qué es lo siguiente que se ejecutará entonces? Pues las siguientes instrucciones que hubiese después de la llave de cierre del if. En este caso delay(1000), que es totalmente independiente de la instrucción if.

Como hemos llegado al final de la función loop, y esta se repite, volvería a ejecutarse esta instrucción:

numero++;

Ten en cuenta que en la ejecución anterior la variable numero tenía valor 1, por lo tanto ahora se incrementa en una unidad y pasa a tener valor 2.

Si ahora se ejecuta la instrucción if, ¿Qué crees que pasará?:

if(numero%2==0){
 ...
}

Vamos a analizar la condición con el nuevo valor de la variable numero. Ahora el valor es 2, por lo que el resto (%) de dividir 2 entre 2 es 0, así que la condición de igualdad (==) es true. Como ahora el resultado si es true, el bloque de código entre llaves del if si se ejecuta:

Serial.print(numero);
Serial.println(" PAR");

Por lo que en el monitor serie se mostrará el valor de la variable numero y la palabra PAR. En este caso el resultado es: “2 PAR”.

La función loop se vuelve a ejecutar y en esta tercera iteración la variable numero pasa a valer 3. Si evalúas de nuevo la condición de la instrucción if verás que es false, por lo que no se ejecutará el bloque de instrucciones entre llaves.
¿Qué pasará con la cuarta iteración de la función loop? Pues que la variable numero se vuelve a incrementar y pasa a ser 4, por lo que la condición de la instrucción if si será cierta (true) y se imprimirá en el monitor serie el texto: “4 PAR”.

¿Sabrías analizar las siguientes instrucciones? Supongo que te habrás dado cuenta que la condición de la instrucción if solo se cumple con los valores pares de la variable numero.

Mira el resultado que he obtenido yo después de algunas iteraciones:

resultado ejecución if en Arduino

Espero que lo hayas entendido. Piensa en otros casos en los que puedas utilizar una condicional if y haz pruebas.