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

// Adresa I2C a display-ului 2004
#define LCD_ADDR 0x27

// Configurație Keypad
const byte ROW_NUM = 4; // 4 rânduri
const byte COLUMN_NUM = 4; // 4 coloane

char keys[ROW_NUM][COLUMN_NUM] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte pin_rows[ROW_NUM] = {9, 8, 7, 6};       // Pini pentru rânduri
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};  // Pini pentru coloane

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
LiquidCrystal_I2C lcd(LCD_ADDR, 20, 4); // Configurație display 2004 I2C

// Variabile pentru stocarea ultimei valori introduse și starea tensiunii
int lastPressureValue = 0;
bool voltageOn = false;
int lastDesiredPressure = 0;
int pressureRead= A1;
String inputString;
long inputInt;

// Funcție pentru a porni sau opri tensiunea
void toggleVoltage(bool on) {
  voltageOn = on;
  if (voltageOn) {
    // Porniți tensiunea și setați presiunea la ultima valoare introdusă
    int analogValue = mapPressureToAnalog(lastPressureValue);
    // ... cod pentru a porni tensiunea ...
  } else {
    // Opriți tensiunea și stocați ultima valoare introdusă
    lastDesiredPressure = lastPressureValue;
    lastPressureValue = 0;
    // ... cod pentru a opri tensiunea ...
  }
}

// Funcție pentru a trimite o valoare analogică la modulul MCP4725 (înlocuim cu cod specific tensiunii)
void sendAnalogValue(int value) {
  // ... cod pentru a trimite tensiunea către supapa de aer ...
}

// Funcție pentru a mapa valoarea presiunii la valoarea analogică corespunzătoare (0 - 4095)
int mapPressureToAnalog(int pressure) {
  // Asigurați-vă că presiunea se încadrează în intervalul specificat
  pressure = constrain(pressure, 10, 2400);

  // Mapați presiunea în intervalul 0 - 4095
  return map(pressure, 10, 2400, 0, 4095);
}

void setup() {
  Wire.begin();
  Serial.begin(9600);
  inputString.reserve(4);
  lcd.begin(20, 4);  // Inițializați display-ul 2004 I2C
  lcd.backlight();
  lcd.print("Introduceti valoarea");
}

void loop() {
  // Presiunea dorită pentru supapă (între 10 și 2400)
  int desiredPressure = 0;
  
  // Verificați apăsarea unei taste pe tastatură
  char key = keypad.getKey();
   if (key) {
    Serial.println(key);
    lcd.print(key);
    if (key >= '0' && key <= '9') {     // only act on numeric keys
      inputString += key;               // append new character to input string
    } else if (key == 'C') {
      if (inputString.length() > 0) {
        inputInt = inputString.toInt(); // YOU GOT AN INTEGER NUMBER
        inputString = "";               // clear input
        // DO YOUR WORK HERE

      }
    } else if (key == 'D') {
      inputString = "";                 // clear input
      lcd.clear();
    }
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
keypad:R1
keypad:R2
keypad:R3
keypad:R4
keypad:C1
keypad:C2
keypad:C3
keypad:C4
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
NOCOMNCVCCGNDINLED1PWRRelay Module
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO