#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();
}
}
}