#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
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO