Termoregolazione casa Aiuto!

Vi ringrazio in anticipo per il vostro aiuto

Visto che hai combinato un casino immane, perche' non cancelli tutti i post e ne lasci solo uno, con lo sketch messo come allegato ?

Ho realizzato questo programmino per la Termoregolazione di casa. Ve lo allego

Ho i seguenti problemi:

1- la navigazione nel menù è molto lenta; per passare da una pagina all' altra ci vogliono 10 secondi con il pulsante premuto;
2-ho il bisogno di incrementare tSetPoint1 e tSetPoint2 attraverso i pulsandi selezionando la variabile dal display e non so come fare;

Vi rigrazio e non voglio dare l' impressione di cercare di farmi completare il programma ma cerco consigli.
I miei limiti di programmazione sicuramente sono evidenti, per questo chiedo aiuto a voi.

Termoregolazione_1_1Senza_seriale.ino (20.6 KB)

Secondo me la EEprom ha finito il ciclo vita.

No, non credo dato che arduino è nuovo, ma non avevo calcolato questo problema.
Come si può leggere dal programma carico le variabili nella eeprom e le faccio leggere quando inizia la gestione del menù.
Faccio in questo modo perchè le funzioni che gestiscono il menu sono fuori dal void loop, invece le variabili tra cui letture di sensori avvengono nel void loop e quindi al di fuori del void loop non vengono riconosciute.
Come posso fare se non volessi necessariamente caricarle nella eeprom?

//scrittura eeprom
EEPROM.write(addrT3, t3);
EEPROM.write(addrT4, t4);

queste sono nel loop() basta poco tempo per distruggere quelle celle ... lo sai quanti cicli loop fai in un minuto? tanti ma tanti :roll_eyes:
Anche una SD la distruggi se ci scrivi in modo ostinato

Come posso fare se non volessi necessariamente caricarle nella eeprom?

una ram I2c esterna con batteria tampone

Nn avevo calcolato questo fattore.
Dato che devo eliminare la scrittura eeprom, come posso usare una variabile presente nel loop e che viene aggiornata nel loop dato che è una lettura di un sensore ( per esempio t1), al di fuori del loop?

Perchè salvi 2 temperature su eeprom che leggi al momento dai sensori? non serve mi pare

Sulla eeprom puoi salvare i valori temp Min - Max una volta sola quando imposti il cronotermostato una specie di setup che fai poche volte l'anno.

Se proprio devi scriverci leggi prima il byte presente sulla eeprom e se è diverso allora scrivi.

come posso usare una variabile presente nel loop e che viene aggiornata nel loop dato che è una lettura di un sensore ( per esempio t1), al di fuori del loop?

la dichiari globale al di fuori delle funzioni setup() e loop()

int t3;
int t4;

void setup() {
Serial.begin(9600);
}

void loop() {
 t3 = temp1.getTemp();
 t4 = temp2.getTemp();
 stampa_temp(); //faccio un salto alla funzione stampa_temp
}

void stampa_temp() {
 Serial.println(t3);
 Serial.println(t4);
}

t3 e t4 sono pubbliche, puoi leggere e cambiarle da qualsiasi punto e da qualsiasi funzione void

oppure le variabili le puoi passare da un void all'altro ....
nota: il void non da return

void setup() {
  Serial.begin(9600);
}

void loop() {
 int t3 = temp1.getTemp();
 int t4 = temp2.getTemp();
 stampa_temp(t3,t4); // faccio un salto alla funz. stampa_temp passandogli i valori
}

void stampa_temp(int pt3, int pt4) {
 Serial.println(pt3);
 Serial.println(pt4);
}

Ma forse non ho capito, tu usavi la eeprom per prendere i valori delle variabili da altri punti del programma?

ciao

Ti ringrazio per la risposta. Adesso che so come passare da un void all'altro non caricherò più sulla eeprom.
Ma ho un' altra cosa da chiedervi:
ho creato due variabili, SetPoint1 e SetPoint2; quando rilevo attraverso la lettura dello stato del pin 32 se mi trovo in Estate o Inverno cambio il valore di queste due variabili in questo modo:

if INVERNO SetPoint1 e SetPoint2 =22;
if ESTATE SetPoint1 e SetPoint2 =25;

fin qui ci siamo e tutto funziona. Il problema è che ho bisogno di incrementare queste variabili con due pulsanti. Quando incremento le variabili il valore incrementato resta fino a quando viene verificato dinuovo l'if e chiaramente ritorna al valore iniziale.
Cosa mi consigliate di fare per ovviare al problema?