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