Compuertas lógicas en Arduino
Los sistemas digitales son aquellos que funcionan con valores discretos; estos, pueden representarse de diversas formas e inclusive, tener mas de un estado. En lo que nos corresponde, trabajaremos con sistemas binarios, donde solo pueden presentarse dos estados, Alto – bajo, 5V – 0V, True – False. Para trabajar con variables este tipo variables, utilizamos el álgebra de Boole:
En Arduino, disponemos de los siguientes operadores lógicos:
- && Operador lógico AND
- || Operador lógico OR
- ! Operador lógico NOT
- & Operador de referencia AND
- | Operador de referencia OR
- ^ Operador Lógico XOR
- ~ Operador negador bit a bit
Te puede interesar (Comportamiento de los operadores lógicos en Arduino)
En el siguiente proyecto vamos a simular el comportamiento de las compuertas AND, OR, XOR y NOT empleando el arduino.
Para realizar esta práctica necesitaremos una protoboard, un LED y un dipswitch. Con la ayuda de la sentencia “if – else”, utilizando pines de entrada con PULLUP habilitado (INPUT_PULLUP) y tomando como referencia el montaje de la figura que aparece al final, se implementa un programa en Arduino que cumple con los siguientes requerimientos:
• Utilizar dos (2) Switch para la selección de la función lógica deseada (NAND, OR , NOT y XOR).
• Las entradas A y B, de la función lógica seleccionada (en el caso de la operación NOT, solo se tendrá en cuenta una de las entradas) se harán a través de dos (2) Switch.
• La salida se desplegara mediante un LED, donde un TRUE en la salida de la operación lógica seleccionada, lo representara el encendido del LED y, cuando la salida es FALSE, el LED estará apagado.
Tablas de Verdad
ENTRADA | SALIDA | |||||
A (A2) | B (A3) | NAND | NOR | XOR | NOT (A) | NOT (B) |
0 | 0 | 1 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 0 | 0 | 0 |
Para las entradas A y B se utilizaron como entrada los pines A2 y A3, respectivamente.
Para seleccionar el tipo de compuerta a simular se utilizaron los pines A0 y A1 con la siguiente configuración:
A (A0) | B (A1) | COMPUERTA |
0 | 0 | NAND |
0 | 1 | NOR |
1 | 0 | NOT |
1 | 1 | XOR |
Montaje
Código
/*
* Diseñado por Juan David Gallego García y Juan Esteban Pulgarín Arango
* El programa puede ser descargado y modificado
*
* LOGICA COMBINACIONAL PARA NAND NOR NOT y XOR
* Pines para seleccionar tipo de compuerta
* A0(a) A1(b)
* 0 0 NAND
* 0 1 NOR
* 1 0 NOT
* 1 1 XOR
*
*¨Pines para operaciones lógicas
* A2(c) A3(d) NAND NOR NOT(A2) XOR
* 0 0 1 1 1 0
* 0 1 1 0 1 1
* 1 0 1 0 0 1
* 1 1 0 0 0 0
*/
void setup() {
/*Salida para la combinación lógica*/
pinMode(2,OUTPUT); //Salida del led
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
digitalWrite(2,HIGH); //Se configura led como apagado
}
void loop() {
bool a = !digitalRead(A0);
bool b = !digitalRead(A1);
bool c = !digitalRead(A2);
bool d = !digitalRead(A3);
if(!a&&!b){//Compuerta NAND
if(!(c&&d)){
digitalWrite(2,LOW);//Al menos una de las entradas c y d están en LOW, Prende led
}else{
digitalWrite(2,HIGH);//En caso de que las dos estén en HIGH, apaga el LED
}
}else if(!a&&b){//Compuerta NOR
if(!(c||d)){
digitalWrite(2,LOW);//Entradas c y d están en LOW Prende led
}else{
digitalWrite(2,HIGH);//En caso de que al menos de las dos estén en HIGH apaga el LED
}
}else if(a&&!b){//Compuerta NOT
if(!c){
digitalWrite(2,LOW);//Entrada c está en LOW Prende led
}else{
digitalWrite(2,HIGH);//Entrada c está en HIGH Apaga led
}
}else{//Compuerta XOR
if(c^d){
digitalWrite(2,LOW); //Cuando c y d son diferentes enciende led
}else{
digitalWrite(2,HIGH); //Cuando c y d son iguales apaga led
}
}
}
DESCARGAR
q bueno eres quiero tuya guapo me encantaria conocerte manin
ResponderBorrarexcelente trabajo
ResponderBorrarIncreible, me ha gustado tu articulo sobre las Compuertas lógicas.
ResponderBorrarbuenas noches
ResponderBorraresta muy interesante el post
tengo una pregunta
si solo necesitara hacer la compuerta xor como serie?
No funciona al probar toda la tabla de verdad
ResponderBorrarSe debe verificar la lógica no está correcta.
ResponderBorrar