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

// Define the I2C LCD object
LiquidCrystal_I2C lcd(0x27, 20, 4);  // I2C address may vary, adjust if necessary


// Definirea pinilor pentru keypad
const byte ROW_NUM = 4; // Numărul de linii
const byte COLUMN_NUM = 4; // Numărul de 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}; // Pinii pentru linii
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // Pinii pentru coloane

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);

const int pressureMin = 10; // Presiunea minimă de lucru (în milibari)
const int pressureMax = 2500; // Presiunea maximă de lucru (în milibari)
const int pwmMin = 0; // Valoarea minimă a PWM-ului
const int pwmMax = 255; // Valoarea maximă a PWM-ului

int mapPressureToPWM(int pressure) {
  // Maparea presiunii la valoarea PWM
  return map(pressure, pressureMin, pressureMax, pwmMin, pwmMax);
}

void setup() {
  // Inițializarea Serial Monitor pentru debug (opțional)
  Serial.begin(9600);
}

void loop() {
  char key = keypad.getKey();

  if (key) {
    // Când este apăsată o tastă de pe keypad
    if (key >= '0' && key <= '9') {
      // Dacă este o cifră, adăugăm-o la valoarea introdusă
      static int pressureValue = 0;
      pressureValue = pressureValue * 10 + (key - '0');

      // Verificăm dacă valoarea introdusă depășește intervalul
      if (pressureValue > pressureMax) {
        pressureValue = pressureMax;
      }

      // Transformăm valoarea presiunii în PWM
      int pwmValue = mapPressureToPWM(pressureValue);

      // Setăm valoarea PWM pe supapa proportională de aer
      analogWrite(10, pwmValue); // Pinul pentru PWM

      // Afisam valorile pe Serial Monitor (opțional)
      Serial.print("Presiune introdusa: ");
      Serial.print(pressureValue);
      Serial.print(" mbar | PWM: ");
      Serial.println(pwmValue);
    }
  }
}
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