Para este post se tratará de analizar los operadores lógicos en Arduino, elementos muy importantes en programación, capaces de recrear la lógica del ser humano a partir de instrucciones escritas en el código de un programa.
En el lenguaje de programación Arduino, así como en cualquier otro lenguaje de programación (como Java) existen las llamadas estructuras de control. La principal estructura de control, de la cual se derivan las demás es la estructura secuencial, donde todo las instrucciones se ejecutan una tras otra en orden descendente, de principio a fin.
Luego de la estructura secuencial, creo que la más utilizada es la estructura selectiva, el llamado if. Su funcionamiento es sencillo y su uso permite utilizar la lógica en la creación de algoritmos.
La sintaxis es básicamente la siguiente:
1 2 3 4 5 6 7 |
<span style="color: #cc6600;">if</span> (condición){ <span style="color: #7e7e7e;">//código que se ejecuta si se cumple la condición</span> } <span style="color: #cc6600;">else</span> { <span style="color: #7e7e7e;">//código que se ejecuta si no se cumple la condición</span> } |
El código mostrado representa una estructura selectiva con instrucciones para cuando se cumple una condición y las instrucciones para cuando no se cumple la condición.
Pero, en ocasiones es necesaria que se cumpla más de una condición para lograr determinados resultados. Es aquí donde entran en juego los Operadores Lógicos.
En el siguiente cuadro se muestran los operadores más utilizados a la hora de programar.

En programación se usa básicamente las estructuras AND y OR y a partir de ellas se derivan las demás.
Veamos algunos ejemplos donde se usan los operadores lógicos.
- Operador AND
1 2 3 |
<span style="color: #cc6600;">if</span> ((condición1) && (condición2)){ <span style="color: #7e7e7e;">//código a ejecutar si ambas condiciones se cumplen</span> } |
Este operador permite validar 2 o más condiciones, las cuales se deben cumplir todas a la vez para que se ejecute el código que se escribe dentro de las llaves.
-
- Operador OR
1 2 3 |
<span style="color: #cc6600;">if</span> ((condición1) || (condición2)){ <span style="color: #7e7e7e;">//código a ejecutar si alguna de las condiciones se cumple</span> } |
Este operador permite que cuando cualquiera de las condiciones establecidas se cumpla, entonces se ejecuta el código entre las llaves. Solamente se necesita que al menos 1 sea verdadera para que se devuelva un valor true y se ejecute las instrucciones establecidas.
- Operador NAND
Se cumple cuando ninguna de las instrucciones se cumple. Supongamos que hay 5 personas en una casa. Si se les pregunta si poseen un Arduino y NINGUNO de ellos tiene, entonces se ha cumplido una condición y el NAND devolverá un valor true.
En programación, esto se puede representar de dos formas, ambas utilizando la compuerta AND.
Caso 1:
1 2 3 |
<span style="color: #cc6600;">if</span> ((condición1 != <span style="color: #cc6600;">true</span>) && (condición2 != <span style="color: #cc6600;">true</span>)){ <span style="color: #7e7e7e;">//código a ejecutar si AMBAS condiciones se cumplen</span> } |
El operador != se lee como diferente de. Si las dos condiciones establecidas son diferentes de true, entonces se entra al bloque de código entre llaves. Se podría decir que la expresión !=true, podría ser remplazada por ==false, lo cual sería perfectamente válido.
Caso 2:
1 2 3 4 5 6 7 |
<span style="color: #cc6600;">if</span> ((condición1) && (condición2)){ } <span style="color: #cc6600;">else</span> { <span style="color: #7e7e7e;">//código a ejecutar si NO se cumplen las dos condiciones a la vez</span> } |
En esta sintaxis se evalúan dos condiciones con el operador AND. Si ninguna de las dos se cumple, entonces el else entra en ejecución. Esto equivale a una NAND donde las condiciones, al no cumplirse todas a la vez, desencadenan una serie de instrucciones.
- Operador NOR
De la misma forma como el NAND se deriva del operador AND, el NOR se deriva del OR y posee dos casos en los que puede decir que se utiliza. Se cumplirá cuando en algunas de las condiciones se devuelva un valor false.
Caso 1:
1 2 3 |
<span style="color: #cc6600;">if</span> ((condición1!=true) || (condición2!=true)){ <span style="color: #7e7e7e;">//código a ejecutar si ALGUNA de las condiciones se cumple</span> } |
Si alguna de las condiciones no se cumple entonces se ejecuta el bloque entre las llaves. Esto es una NOR.
Caso 2:
1 2 3 4 5 6 7 |
<span style="color: #cc6600;">if</span> ((condición1) || (condición2)){ } <span style="color: #cc6600;">else</span> { <span style="color: #7e7e7e;">//código a ejecutar si ALGUNA de las condiciones NO se cumple</span> } |
Si alguna de las condiciones se cumple, se ejecuta entre las llaves, pero si no es así, entonces entra en ejecución el bloque else. Esto equivale a una NOR.
- Operador NOT
Se puede expresar de dos maneras:
1 2 3 |
<span style="color: #cc6600;">if</span> (condición!=<span style="color: #cc6600;">true</span>){ <span style="color: #7e7e7e;">//código que se ejecuta si se cumple la condición</span> } |
O bien…
1 2 3 4 5 6 7 |
<span style="color: #cc6600;">if</span> (condición){ } <span style="color: #cc6600;">else</span> { <span style="color: #7e7e7e;">//código que se ejecuta si NO se cumple la condición</span> } |
En ambos casos se ejecutará el código entre las llaves cuando la condición sea falsa, es decir, solo funciona cuando hay una negación, cuando algo no se da.
***
Básicamente estos son los operadores más utilizados en programación. A partir de ellos nacen los algoritmos y de los algoritmos nacen los programas.
Espero que la información suministrada sea de utilidad para ustedes.
Saludos.
Muy buen artículo, soy principiante llevo como un año pero tengo una duda solo se pueden programar esas 5 compuertas?
Hay algunas que resultan de la combinación entre ellas. Todo depende de lo que necesites
hola, fijate que en un sketch encontre este arreglo por ejemplo decia asi:
ledstate = !ledstate
a que se refiere cuando esta escrito asi?????
Con eso se invierte el estado lógico de una variable. Funciona con los booleans. Si la variable está en HIGH se cambia a LOW, y vice versa
Hombre esta pagina esta estupenda para nosotros los aprendices, quisiera poner un error q aparece en mi ide arduino cuando cargo el programa para nodeMCUesp82661.0
Para servidor web, lo cargo y me aparece solo 0.0.0.0 en la ip address y no se porque, quisiera ayuda porfavor
Hola. Te invito a postear tu duda en https://panamahitek.com/foro/