Sentencia if con Arduino, controla la ejecución de tu código Deja un comentario

Las sentencias condicionales if con Arduino son las más utilizadas en programación de proyectos Maker. Sirven para que tu programa haga una cosa u otra dependiendo de cada situación.

Imagínate la función loop() de un código de Arduino que se repite indefinidamente dentro de nuestro programa. Es donde realmente suceden las cosas. Se repite muy rápido y la velocidad depende directamente del reloj de la CPU del microcontrolador.

Si hablamos de Arduino UNO su velocidad es de 20 MHz es decir, 20.000.000 de instrucciones por segundo. Y en un ESP8266 la velocidad del reloj es 80 MHz (80.000.000 de instrucciones por segundo).

Seguramente te estés preguntando, si se repite una y otra vez el mismo código que está dentro de la función loop() ¿por qué obtenemos resultados diferentes?

Pues en gran medida es debido a las sentencias condicionales if con Arduino. En este tutorial aprenderás los siguientes conceptos:

  • Sintaxis de la sentencia if else y else if
  • Operadores de comparación (>, >=, <=, ==, !=)
  • Operadores booleanos (||, &&, !)

Y por supuesto, aprenderás cómo utilizar la sentencia if con Arduino a través de un caso práctico.

Saca la placa de la caja y comencemos con este tutorial.

else if arduino

if con Arduino material necesario

Aunque todo esto lo veremos más adelante, en este tutorial con las sentencias if else y Arduino necesitarás el siguiente material.

  • Un Arduino UNO o derivado. Puede valer cualquier placa compatible incluso un ESP8266.
  • Una protoboard para conectar los componentes.
  • Un potenciómetro da lo mismo el valor de la resistencia.
  • Y cables para conectar todo.

El circuito que utilizaremos es muy sencillo. Sólo requiere de un potenciómetro conectado a un pin analógico de la placa de Arduino. El esquema eléctrico sería el siguiente.

Vamos a ver ahora la sintaxis que se esconde detrás de la sentencia if else con Arduino.

Sintaxis de la sentencia if con Arduino

La sintaxis de la sentencia if con Arduino es muy sencilla. Comenzamos escribiendo la palabra reservada if (en español se traduce como si condicional). Luego entre paréntesis ponemos la condición y por último abrimos y cerramos las llaves.

sintaxis if else arduino

La condición es la que hará que se ejecute el código que hay entre las llaves. Si es verdadera, el flujo del código de Arduino entrará dentro de las llaves y ejecutará todo lo que hay dentro. Pero claro ¿qué es una condición?

Imagínate que le dices a tu hijo, “si apruebas todas las asignaturas te regalo una bicicleta”. Eso sería una condición. Dentro de los paréntesis irá la condición o sentencia condicional. Es algo que puede ser evaluado como verdadero o falso (en inglés es truefalse).

Si tu hijo aprueba todas las asignaturas es verdadero (true) y por lo tanto tiene una bicicleta. Si tu hijo no aprueba todas las asignaturas es falso (false) y por lo tanto se queda sin bicicleta.

sintaxis if else arduino

Estas condiciones se llaman booleanas debido al gran matemático inglés George Boole creador de la lógica booleana. Con esta lógica sólo hay dos estados posibles 0 o 1 que equivalen a falso (false) y verdadero (true).

Vale, tenemos claro que una sentencia if con Arduino nos permite ejecutar un código dependiendo de una condición. Ahora vamos a ver cómo podemos hacer condicionales con los operadores de comparación.

Operadores de comparación en sentencias if con Arduino

Realmente, para que algo sea verdadero o falso necesitamos compararlo con algo. Lo típico es utilizar la sentencia condicional if con Arduino con números pero se pueden utilizar otro tipo de datos.

Podemos comparar temperatura, presión atmosférica, radiación ultravioleta, tiempo, intensidad, voltaje, nivel de agua y cualquier magnitud susceptible de ser medida.

Algo que creo que todos entendemos es la temperatura. Por ejemplo, podemos escribir un código donde dependiendo de la temperatura mueva un servomotor que activa un ventilador.

sintaxis if else arduino

En este caso estamos diciendo que siempre que la temperatura sea mayor que 25, mueva un servomotor. Pero también podríamos haber programado si la temperatura es menor que 30 o si es mayor o igual que 25.

Más o menos creo que vas pillando donde quiero llegar.

Todo lo expuesto anteriormente son comparaciones. Lo único que hacemos es comparar dos valores y evaluamos si es verdadero o falso. Para poder comparar se utilizan los operadores de comparación.

Con la sentencia if con Arduino se pueden utilizar 6 operadores de comparación:

  • > Mayor que
  • < Menor que
  • >= Mayor o igual que
  • <= Menor o igual que
  • == Igual a
  • != Diferente a

Estoy seguro que más de un operador de comparación te suena. Se suelen utilizar para expresar fórmulas matemáticas.

Los 4 primeros (mayor que, menor que, mayor o igual que o menor o igual que) son bastante explícitos. Sin embargo, los dos últimos (igual a y diferente a) requieren de una pequeña explicación.

Vamos a ver algunos ejemplos de cada uno de ellos.

Operador de comparación mayor que (>)

Siempre que el número a la izquierda sea mayor que el número a la derecha la condición de la sentencia if con Arduino es verdadera. En caso contrario es falsa.

  • 50>10 -> verdadero
  • 15>80 -> falso

Operador de comparación menor que (<)

Siempre que el número a la izquierda sea menor que el número a la derecha la condición de la sentencia if con Arduino es verdadera. En caso contrario es falsa.

  • 10<50 -> verdadero
  • 80<15 -> falso

Operador de comparación mayor o igual que (>=)

Siempre que el número a la izquierda sea mayor o igual que el número a la derecha la condición de la sentencia if con Arduino es verdadera. En caso contrario es falsa.

  • 50>=50 -> verdadero
  • 50>=49 -> verdadero
  • 15>=90 -> falso

Operador de comparación menor o igual que (<=)

Siempre que el número a la izquierda sea menor o igual que el número a la derecha la condición de la sentencia if con Arduino es verdadera. En caso contrario es falsa.

  • 50<=50 -> verdadero
  • 49<=50 -> verdadero
  • 90<=15 -> falso

Operador de comparación igual a (==)

Siempre que el número a la izquierda sea igual que el número a la derecha la condición de la sentencia if con Arduino es verdadera. En caso contrario es falsa.

  • 20==20 -> verdadero
  • 15==20 -> falso

Fíjate en el símbolo del operador igual a (==) ¿por qué se usa un doble signo igual?¿hace falta verificar dos veces que son iguales? La respuesta es más sencilla de lo que parece.

El signo igual ya tiene una función, la de asignación. Cuando asignamos un valor a una variable por ejemplo. Se utiliza el doble signo igual como comparador de igualdad para no confundir al compilador ya que de otra forma, no sabría si estamos comparando o estamos asignando un valor.

Operador de comparación diferente a (!=)

Siempre que el número a la izquierda sea diferente que el número a la derecha la condición de la sentencia if con Arduino es verdadera. En caso contrario es falsa.

  • 20!=10 -> verdadero
  • 10!=10 -> falso

Este operador de comparación es el contrario de igual a.

Aunque en los ejemplos estoy utilizando números, en las condiciones de las sentencias if con Arduino también puedes utilizar variables como veremos en los ejemplos que vienen a continuación.

Con esto ya tenemos todo lo necesario para empezar a utilizar la sentencia if con Arduino. Vamos a ver un ejemplo muy sencillo.

Ejemplo sentencia if con Arduino

En este ejemplo vamos a utiliza la sentencia if con Arduino utilizando el esquema eléctrico del potenciómetro que hemos visto al principio de este tutorial. La idea es poder mostrar por el monitor serie cuando el valor analógico supera un valor.

Te recuerdo que el pin analógico tiene un rango de valores que va de 0 a 1023 en un Arduino UNO. Cuando a la entrada tenemos 0V, analogRead devuelve 0. Cuando a la entrada tenemos 5V, analogRead devuelve 1023.

El código tiene que ser capaz de mostrar un texto en el monitor serie cuando supere los 300.

El código comienza declarando una variable constante del tipo byte que se llama pinAnalogico. Esta variable contiene el pin anlógico donde tenemos conectado el potenciómetro.

En la función setup() iniciamos la comunicación serie con Serial.begin().

En la función loop() lo primero que debes hacer es leer el pin analógico con la función analogRead. El resultado lo almacenas en la variable valor del tipo int. Este valor lo muestras por el monitor serie con la función Serial.println().

Luego comienza la declaración de la sentencia if con Arduino. Como hemos visto, se pone la palabra reservada if y a continuación apertura y cierre de paréntesis. Dentro de los paréntesis va la condición.

Si queremos saber si el valor del pin analógico es mayor que 300 utilizamos el operador de comparación mayor que (>). A la izquierda tienes el valor que quieres evaluar y a la derecha el valor umbral que determina la condición.

A continuación abre y cierra llaves y dentro va el código que se ejecutará si la condición del if con Arduino es verdadera. En este caso utiliza la sentencia Serial.println() para mostrar por el monitor serie un texto (da lo mismo el que sea).

Por último pon un delay de 100 milisegundos para que podamos apreciar cuando escribe en el monitor serie y cuando no.

Ahora, si cargas el código a la placa verás como aparece el valor del pin analógico y siempre que esté por encima de 300, mostrará el texto Valor superado en el monitor serie.

A sido sencillo ¿verdad? Prueba con diferentes operadores de comparación y mira cuando aparece el texto en el monitor serie.

Ahora piensa cómo lo harías si lo que quieres es que se ejecute el código cuando está entre dos valores. Por ejemplo, si el valor está entre 300 y 500 que muestre en el monitor serie un texto.

Con solo la sentencia if con Arduino no podrás hacerlo. Para ello necesitas los operadores booleanos.

Tu primer proyecto con Arduino

CONSTRUYE UN SISTEMA DE RIEGO AUTOMÁTICO

Accede al curso gratuito paso a paso.

Operadores booleanos if con Arduino

Un operador booleano nos permite hacer combinaciones entre condiciones dentro de un if en Arduino. Esta herramienta de programación es muy potente y se utiliza en muchos casos.

Existen 3 operadores booleanos

  • || or (0)
  • && and (y)
  • ! not (no)

Como ya he dicho sirven para combinar condiciones. Por ejemplo, puedes saber si el valor obtenido de analogRead está entre 300 y 500.

Es algo así como cuando pulsas dos teclas de tu teclado. Si pulsas la tecla c escribe en un documento esa letra por ejemplo. Pero si pulsas la tecla control (Ctrl) y la tecla c lo que haces es copiar lo que tengas seleccionado. Más o menos es algo parecido.

Vamos a ver cada uno de estos operadores booleanos con ejemplos para que así lo entiendas mejor.

Operador booleano or (||)

En español se puede traducir como “o esto o lo otro”. Se representa con dos líneas verticales (||) que las encuentras en la tecla 1 del teclado. Para utilizarla tienes que pulsar primero Alt Gr y luego la tecla 1.

Este operador hace que la condición del if con Arduino sea cierta si se cumple alguna de las dos o varias condiciones. Por ejemplo, si tenemos este código

operador or if else arduino

Estamos diciendo que siempre que el valor sea mayor que 300 o que el valor sea menor que 200, muestre un texto por el monitor serie. Esto quiere decir que siempre que el valor esté entre 201 y 299 no mostrará ningún texto.

operador or if else arduino

En el resto de los casos, mostrará el texto en el monitor serie.

Operador booleano and (&&)

En español se puede traducir por “esto y aquello”. Se representa con dos símbolos ampersand (&&) que se encuentra en la tecla 6 del teclado. Pulsando mayúsculas y 6 podrás utilizarlo en tus códigos.

Este operador hace que la condición del if con Arduino sea cierta sólo si se cumplen las dos o varias condiciones. Por ejemplo, si tenemos el código

operador and if else arduino

Quiere decir que sólo será cierta si el valor es mayor que 300 y el valor es menor de 500. Esto nos da un rango de valores de entre 301 y 499 (no olvides que los símbolos > y < excluyen a los números a la derecha).

Por lo tanto, sólo cuando se encuentre en ese rango mostrará el texto en el monitor serie.

operador and if else arduino

Operador booleano not (!)

En español se traduce como “no”. Se representa con el signo de admiración final (!) situado en la tecla 1. Lo puedes utilizar pulsando la tecla de mayúsculas más la tecla 1.

Lo que hace este operador es algo extraño. Si una expresión es verdadera devuelve falso y si es falsa devuelve verdadero.

Para entender el siguiente ejemplo también tienes que entender qué es verdadero y qué es falso. No dejan de ser dos estados, como el código binario del que te he hablado anteriormente. Podemos tener un 0 (false) o un 1 (true).

Pero la realidad es que existen más números. La pregunta es ¿2 es verdadero o falso? Según explico en el curso de Arduino, los tipos de datos booleanos son siempre falsos siempre y cuando valga 0. En caso contrario es verdadero. Por lo tanto 2 y cualquier otro número son verdaderos si se evalúan en una condición. Esto es sólo a modo de recordatorio.

En un pin digital también tenemos dos valores, LOW y HIGH. Si entras dentro del código del core de Arduino, puedes comprobar que estas dos palabras reservadas en realidad son dos constantes cuyo valor es 0 para LOW y 1 para HIGH.

Por lo tanto, si tenemos un pin digital conectado a un pulsador y a la entrada hay 0V el estado será LOW. Si ese valor lo almacenamos en una variable, podríamos evaluar su valor si es falso o verdadero en una sentencia condicional if con Arduino.

Por ejemplo, nos puede servir para saber si un botón no está pulsado. En su uso normal, cuando esté pulsado tendrá un estado HIGH que, como hemos visto, es verdadero. Mientras que cuando no está pulsado tiene un estado de LOW, falso.

operador not if else arduino

Esta sería la manera que tendríamos de detectar si un pulsador no está pulsado. En este caso, pasará dentro del if con Arduino y ejecutará el código que hay dentro.

Otras consideraciones de los operadores booleanos con un if de Arduino

Por último, quiero añadir que se pueden unir tantas condiciones como queramos a un if con Arduino. Es conveniente, en la medida de lo posible, no añadir muchas condicionales ya que esto haría que nuestro código fuera poco legible.

También hay que destacar el uso del operador not (!) con otros operadores de comparación. Por ejemplo, una misma expresión se puede expresar de diferentes maneras gracias al operador not. Si quieres saber si un número está entre 300 y 500 puedes utilizar estas dos condiciones:

  • (numero>=300 && numero<=500)
  • !(numero<300 && numero>500)

Estas dos expresiones devuelven el mismo valor para el mismo número.

Ahora vamos a continuar viendo cómo se puede ejecutar diferentes trozos de código dependiendo de diferentes condiciones con if else en Arduino.

if else con Arduino

Hasta ahora lo que hemos visto es que si cumple una condición ejecuta el código que hay dentro de un if con Arduino. Pero ¿qué pasa si tenemos más de una condición? Por ejemplo, si la temperatura es mayor de 25 mueve el servomotor 135º, si es menor de 25 mueve el servomotor 45º.

Con lo que sabemos hasta ahora, podríamos hacer dos if con Arduino.

if else arduino

No estaría mal pero hay una forma más óptima de hacerlo, utilizando la sentencia condicional else con Arduino.

Else se puede traducir en español como “si no”. Siempre va unido a una sentencia condicional if de Arduino, nunca puede ir sólo. Por lo tanto if else se traduciría como si se cumple la condición ejecuta el código, si no ejecuta este otro código.

Es lógico pensar que cuando estamos evaluando la misma variable, no puede tener dos valores. En este caso, la temperatura o es mayor que 25 o es menor o igual que 25, no queda otra.

La mayor ventaja de utilizar if else con Arduino es que haremos nuestro código más eficiente. En el primer caso (con dos if), siempre se evaluarán las dos condiciones aunque una de ellas sea cierta.

Si por ejemplo la temperatura es 27º, cuando llegue al primer if, al ser la temperatura mayor que 25 ejecutará el código que hay dentro. Cuando termine, saldrá del if e irá al siguiente if. Comprobará si la temperatura es menor o igual que 25 algo absurdo si no se ha modificado nada dentro del primer if.

Aquí es donde entra en juego if else.

if else arduino

Se sustituye el segundo if con la condición por un else. Esta sentencia condicional no tienen ninguna condición es decir, si no se cumple la condición o condiciones anteriores, siempre entrará por el else.

La ventaja es que si se cumple la primera condición, dejará de comprobar el resto de condiciones. A esta estructura de programación se le llama if anidados.

Mucho ojo con este tipo de estructuras ya que nos pueden llevar a lo que se conoce como código espagueti. Se trata de un código tan ofuscado que parece un plato de espagueti.

Vamos a verlo con un ejemplo.

Ejemplo sentencia if else con Arduino

Vamos a seguir con el mismo esquema eléctrico del potenciómetro. La idea con este ejercicio práctico es encender el LED integrado en la placa de Arduino (está conectado al pin 13) cuando el valor analógico supere los 500. En caso contrario, que apague el LED.

El código sería el siguiente.

La primera parte del código es la declaración de variables. Necesitamos dos para almacenar el número de los pines. Son constantes del tipo byte.

La variable pinAnalogico almacena el pin analógico donde está conectado el potenciómetro, el pin A0.

La variable pinLed almacena el pin digital donde está conectado el LED, el pin 13.

En la función setup() iniciamos la comunicación serie con Serial.begin() y ponemos en modo OUTPUT el pin del LED.

Dentro de la función loop() leemos el pin analógico con analogRead() y lo almacenamos en la variable del tipo int valor. Luego la mostramos por el monitor serie.

En la siguiente línea empieza la sentencia condicional if else con Arduino. Como siempre, ponemos la palabra if y entre paréntesis la condición. En este caso es si valor (es el valor obtenido del pin analógico) es mayor que 500, entonces entra dentro del if.

Entre llaves ponemos el código que queremos que se ejecute cuando se cumpla la condición. En este caso que se encienda el LED con la sentencia digitalWrite().

Luego ponemos el else y entre llaves el código que queremos que se ejecute. En este caso que se apague el LED con la sentencia digitalWrite().

Por último un delay de 100 ms para que podamos seguir lo que se muestra por el monitor serie.

Si cargas el código a la placa y juegas con el potenciómetro verás como se enciende y apaga cuando pasas de 500 o bajas de 500.

Lo último que nos queda por ver es si queremos tener 3 o más sentencias condicionales if else anidadas. Eso lo podemos hacer con else if, otra forma de escribir un if con Arduino.

else if con Arduino

La sentencia condicional else if con Arduino nos va a permitir tener 2 o más condiciones dentro de un bloque de if anidados.

La sentencia condicional else es muy útil en los casos donde solo tengamos dos posibilidades pero qué pasa si por ejemplo quieres que cuando el valor del potenciómetro sea mayor que 800 parpadee el LED. Cuando esté entre 501 y 800, se quede encendido y cuando sea menor o igual que 500, se apague.

Podemos optar por poner todo lleno de if sin anidar es decir, sentencias if separadas. Ya hemos visto que esa no es una buena idea cuando estamos trabajando con la misma variable.

La sentencia else se nos queda corta porque no permite poner una condición.

Pero existe la sentencia else if que, como ocurre con la sentencia else, siempre va unida a un if con Arduino. Se podría traducir como si no ha cumplido lo anterior, comprueba si se cumple esta otra.

Realmente es como si fuera otro if pero al poner la palabra reservada else delante, estamos uniendo todos los if. La sintaxis es muy similar.

sintaxis else if 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.

else if arduino

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 se más eficiente.

Ejemplo sentencia else if con Arduino

Para terminar vamos con el ejemplo. Sólo tienes que sustituir los if que hemos visto en el ejemplo anterior por esta serie de if anidados.

El código completo quedaría de la siguiente manera.

Prueba a cargarlo y a jugar con el potenciómetro. Verás como pasa de estar apagado a encendido y por último a parpadear.

Conclusiones sentencia else if else con Arduino

En este tutorial práctico hemos visto una de las herramientas más potentes que tienen los lenguajes de programación, las sentencias else if else con Arduino.

Has podido comprobar que, aunque la función loop() se repita una y otra vez muy rápidamente e indefinidamente, podemos cambiar el resultado utilizando las sentencia condicionales if else con Arduino.

Es una herramienta más dentro de la programación pero no es la única. Esto te puede servir para controlar la temperatura o el nivel de agua con Arduino.

Además, funciona de la misma forma ya sea en otra placa de Arduino como en un ESP8266. Es más, en todos los lenguajes de programación existen las sentencias if, if else y else if.

Dominando las sentencias condicionales en Arduino dominarás la ejecución de tu programa.

Si tienes dudas sobre el uso de las sentencias if con Arduino puedes dejar un comentario aquí abajo.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?