Ho trovato questo LCD TFT UART da 3.2 e credo che fà al caso mio, ha quattro pin 2 Alimentazione e 2 di comunicazione. Non riesco a trovare la keypad 4x4 e penso di comprarla di nuovo insieme al display tft..Ho scritto qualche riga di codice per esercitarmi con la tastiera e la Eeprom inserendo solo pochi comandi per capire se sbaglio qualcosa ma senza tastiera non ho modo di provare se funziona.. Chiedo a voi se ho iniziato bene o sto sbagliando
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define Sensore1 A0
#define Sensore2 A1
#define Pompa 12
#define fcS 24 // finecorsa snistro, premuto == LOW
#define fcD 25 // finecorsa destro, premuto == LOW
#define RELE_OFF_LEVEL HIGH // livello che spegne rele'
#define RELE_ON_LEVEL LOW // livello che accende rele'
#define FC_PRESS_LEVEL LOW // livello a finecorsa premuto
#define FC_OPEN_LEVEL HIGH // livello a finecorsa aperto
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {3, 2, 1, 0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
byte errore = 0;
int lettura;
int lettura1;
void setup() {
Serial.begin(9600);
pinMode(Sensore1, INPUT);
pinMode(Sensore2, INPUT);
pinMode(Pompa, OUTPUT);
// put your setup code here, to run once:
int val = 750;
EEPROM.write(0, val);
}
void loop() {
char customKey = customKeypad.getKey();
if (customKey) {
EEPROM.update(0, customKey);
}
}
void avviaPompa() {
digitalWrite(Pompa, RELE_ON_LEVEL);
}
void fermaPompa() {
digitalWrite(Pompa, RELE_OFF_LEVEL);
}
void letturaIgrometri() {
lettura = analogRead(Sensore1);
int sensorVal = map(lettura, 1020, 160, 0, 100); // converto in %
Serial.print("Umidità terra 1 : ");
Serial.print(sensorVal);
Serial.println ("%"); //Stampa a schermo il valore
lettura1 = analogRead(Sensore2);
sensorVal = map(lettura1, 1022, 178, 0, 100); // converto in %
Serial.print("Umidità terra 2 : ");
Serial.print(sensorVal);
Serial.println ("%"); //Stampa a schermo il valore
}
void logicaPompa() {
static unsigned long t = 0; // tempo processo
static byte s = 0; // stato processo
boolean fcS_Chiuso = (digitalRead(fcS) == FC_PRESS_LEVEL);
if (errore == 1) fermaPompa();
int val = EEPROM.read(0);
if (s == 0 && fcS_Chiuso && EEPROM.get(0, val)) {
avviaPompa();
}
}
Quello che intendo fare all'accensione è leggere l'ultimi due valori precedente impostati perchè i sensori sono 2, quando inserisco un valore da tastiera scelgo quale igrometro verrà modificato e questo verrà aggiornato in eeprom, quando all'interno della condizione if questi 2 valori vengono raggiunti esegue l'istruzione. Potrei usare un solo valore per i due igrometri sarebbe più semplice ma visto che hanno letture poco differenti meglio avere un valore per sensore.. Da quello che sto scrivendo qui e il codice postato non fà una piega lo sò ma almeno è un punto d'inizio