#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin Definitions
const int btn = 8;
const int ss1 = 2;
const int ss2 = 4;
const int led = 9;
int ss1state = 0;
int ss2state = 0;
int outputY = 0;
int bstate= 0;
int lbstate= LOW;
bool gateisand = false;
bool gatechanged = false;
void setup() {
// Initialize pins
pinMode(btn, INPUT);
pinMode(ss1, INPUT_PULLUP);
pinMode(ss2, INPUT_PULLUP);
pinMode(led, OUTPUT);
lcd.init();
lcd.backlight();
// Initial display
lcd.setCursor(0, 0);
lcd.print("OR GATE");
}
void loop() {
ss1state = !digitalRead(ss1);
ss2state = !digitalRead(ss2);
bstate= digitalRead(btn);
if (bstate== HIGH && lbstate== LOW) {
gateisand = !gateisand;
gatechanged = true;
delay(200);
}
lbstate= bstate;
if (gatechanged) {
lcd.clear();
if (gateisand) {
lcd.setCursor(0, 0);
lcd.print("AND GATE");
} else {
lcd.setCursor(0, 0);
lcd.print("OR GATE");
}
gatechanged = false;
}
if (gateisand) {
outputY = ss1state && ss2state;
} else {
outputY = ss1state || ss2state;
}
if (outputY == 1) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
delay(100);
}