#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Crear el objeto lcd dirección 0x27 y 20 columnas x 4 filas
LiquidCrystal_I2C lcd(0x27,20,4);
float h,bias;
int Sa=2,y;
void escalon_unitario();
byte la,lb;//pin 12 y 13 son las entradas
void inicio();
int AND=11;//AND
int OR=10;//OR
int XOR=9;//XOR
int NOT=8;//NOT
void setup() {
// Inicializar el LCD
lcd.init();
//Encender la luz de fondo.
lcd.backlight();
lcd.begin (20, 4);//configuracion de LCD 20x4
pinMode(la,INPUT);
pinMode(lb,INPUT);
pinMode(Sa,OUTPUT);
pinMode(AND,INPUT);
pinMode(OR,INPUT);
pinMode(XOR,INPUT);
pinMode(NOT,INPUT);
}
void loop() {
inicio();
la=digitalRead(13);
lb=digitalRead(12);
bias=-1;
///////AND/////
if(digitalRead(AND)==HIGH){//AND
lcd.setCursor(1,2);
lcd.print(la);
lcd.setCursor(4,2);
lcd.print(lb);
h=(la*0.5+lb*0.5+bias);//AND
escalon_unitario();
lcd.setCursor(7,2);
lcd.print(h);
lcd.setCursor(14,2);
lcd.print(y);
}
///////////OR////////
if(digitalRead(OR)==HIGH){
lcd.setCursor(1,2);
lcd.print(la);
lcd.setCursor(4,2);
lcd.print(lb);
h=(la*1+lb*1+bias);
escalon_unitario();
lcd.setCursor(7,2);
lcd.print(h);
lcd.setCursor(14,2);
lcd.print(y);
}
//////////XOR///aun no
if(digitalRead(XOR)==HIGH){
lcd.setCursor(1,2);
lcd.print(la);
lcd.setCursor(4,2);
lcd.print(lb);
h=(la*-1+lb*-1+bias); //NOT
escalon_unitario();
lcd.setCursor(7,2);
lcd.print(h);
lcd.setCursor(14,2);
lcd.print(y);
}
//////////NOT////////
if(digitalRead(NOT)==HIGH){
lcd.setCursor(1,2);
lcd.print(la);
lcd.setCursor(4,2);
lcd.print(lb);
h=(la*-1+lb*-1+bias); //NOT
escalon_unitario();
lcd.setCursor(7,2);
lcd.print(h);
lcd.setCursor(14,2);
lcd.print(y);
}
}
void inicio(){
lcd.setCursor(1,0);
lcd.print("A");
lcd.setCursor(4,0);
lcd.print("B");
lcd.setCursor(8,0);
lcd.print("H");
lcd.setCursor(14,0);
lcd.print("Y");
}
void escalon_unitario(){
if(h>=0){
y=1;
digitalWrite(Sa,HIGH);
}
else{
y=0;
digitalWrite(Sa,LOW);
}
}