Está en la página 1de 4

Lab 5 lógicos

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

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 B NAN NO XO NOT NOT
(A2) (A3) D R R (A) (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 B COMPUER
(A0)   (A1) TA
0 0 NAND
0 1 NOR
1 0 NOT
1 1 XOR

Montaje

Código

/*
 *
 * 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
     }
 }
}

También podría gustarte