#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Adresa I2C a display-ului LCD
#define LCD_ADDRESS 0x27

// Numărul de pini GPIO utilizați pentru butoane
#define BUTTON_1_PIN 14
#define BUTTON_2_PIN 27
#define BUTTON_3_PIN 26
#define BUTTON_4_PIN 25

// Numărul de pini GPIO utilizați pentru LED-uri
#define LED_1_PIN 19
#define LED_2_PIN 18
#define LED_3_PIN 5
#define LED_4_PIN 17

// Obiectul pentru controlul display-ului LCD
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);

void setup() {
  // Inițializarea porturilor GPIO pentru butoane
  pinMode(BUTTON_1_PIN, INPUT_PULLUP);
  pinMode(BUTTON_2_PIN, INPUT_PULLUP);
  pinMode(BUTTON_3_PIN, INPUT_PULLUP);
  pinMode(BUTTON_4_PIN, INPUT_PULLUP);

  // Inițializarea porturilor GPIO pentru LED-uri
  pinMode(LED_1_PIN, OUTPUT);
  pinMode(LED_2_PIN, OUTPUT);
  pinMode(LED_3_PIN, OUTPUT);
  pinMode(LED_4_PIN, OUTPUT);

  // Inițializarea comunicării cu display-ul LCD
  lcd.init();
  lcd.backlight();
}

void loop() {
  // Citirea stării butoanelor
  int button1 = digitalRead(BUTTON_1_PIN);
  int button2 = digitalRead(BUTTON_2_PIN);
  int button3 = digitalRead(BUTTON_3_PIN);
  int button4 = digitalRead(BUTTON_4_PIN);

  // Setarea stării LED-urilor în funcție de butoane
  digitalWrite(LED_1_PIN, button1);
  digitalWrite(LED_2_PIN, button2);
  digitalWrite(LED_3_PIN, button3);
  digitalWrite(LED_4_PIN, button4);

  // Afisarea stării butoanelor și a LED-urilor pe LCD
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Butoane: ");
  lcd.print(button1);
  lcd.print(button2);
  lcd.print(button3);
  lcd.print(button4);
  lcd.setCursor(0,1);
  lcd.print("LED-uri: ");
  lcd.print(digitalRead(LED_1_PIN));
  lcd.print(digitalRead(LED_2_PIN));
  lcd.print(digitalRead(LED_3_PIN));
  lcd.print(digitalRead(LED_4_PIN));

  // Opritul procesorului pentru o clipă, pentru a reduce consumul de energie
  delay(100);
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C