RECURSO .- La estructura de control IF y los operadores lógicos

Una de las mayores características del uso de microcontroladores la capacidad de automatización de procesos. La automatización involucra acciones en las que el microcontrolador toma decisiones.

Una de las formas de decirle al microcontrolador que tome una decisión es mediante la estructura de control if.

if se usa para que nuestro programa realice una serie de acciones si determinada condición es cierta o para que realice otra serie diferente de acciones si una determinada condición es falsa.

Por ejemplo, un sistema automático que encendiese las farolas cuando fuese de noche podría codificarse con la sentencia if de la siguiente manera:

if( es_de_noche == 1) {
    enciende_farolas();
}


En este caso es_de_noche es una variable digitial que se pondría a 1 cuando fuese de noche, típicamente realizando la lectura digital de un sensor de luz

es_de_noche = digitalRead(PIN_SENSOR_LUZ);



if siempre está seguido de un paréntesis. Lo que hay dentro del paréntesis es evaluado de forma digital, de manera que sólo puede tener dos valores, verdadero o falso. Si es verdadero, todo lo que hay dentro del bloque definido tras los paréntesis se ejecuta, si es falso, no se ejecuta.

Lo normal es que en la condición del if aparezcan dos valores, constantes o variables, que son comparados mediante los operadores de comparación y relacionales siguientes



 operador  Descripición
==  Igual a
!= Diferente a
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que

Uno de los errores más frecuentes cuando se comienza a programar es confundir el operador de comparación "igual a" ( == ) con el operador de asignación "igual a" ( = ).

Por ejemplo, si escribimos

if( es_de_noche = 1) {
    enciende_farolas();
}


Lo que realmente estamos haciendo es asignando a la variable es_de_noche el valor 1. !Eso está mal!. No estamos comparando el valor de es_de_noche con el valor 1.

Si escribimos

if( es_de_noche != 1) {
    enciende_farolas();
}


entonces estaríamos encendiendo las farolas sólo cuando no fuese de noche.