eeprom

ciao a tutti. Ho realizzato un termometro con schermo lcd dove con due pulsanti si puo impostare un valore il quale mi abilita un’uscita. Avevo necessita di salvare questo dato sulla eeprom interna. Funziona tutto pero come ho fatto il programma mi va a scrivere sempre sulla spessa posizione quindi tra 10000 pressioni dei pulsanti la mia eeprom muore. =(
So come scrivere in “diverse posizioni” ma come faccio a richiamarle dopo un reset? spero di essermi spiegato bene.
Grazie mille.

#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h> //include la libreria per il funzionamento dell’lcd
LiquidCrystal_I2C lcd(0x27,16,2);
int CpuMax; // soglia allrme
int CpuPiu;// aumenta valore
int CpuMeno;// diminuisce valore
float tempCpu; //dichiarazione di variabile
float tempVga; //dichiarazione di variabile
int tempPin1 = 0; //inizializzazione del pin di Arduino
int tempPin2 = 1; //inizializzazione del pin di Arduino
int posizione = 0; // posizione EEprom
int valore = 0; // valore EEprom
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
pinMode(6,OUTPUT);
pinMode(2,INPUT);// CpuPiu
pinMode(3,INPUT); // CpuMeno
valore= EEPROM.read(posizione); //lettura eeprom
}

void loop() {
lcd.setCursor(0, 0); // setta il cursore sulla prima riga al primo carattere
lcd.print("cpu "); // stampa della prima riga sull’lcd
tempCpu = analogRead(tempPin1); //lettura valore del sensore
tempCpu = (5* tempCpu*100)/1024 ; //conversione del dato analogico in temperatura
lcd.print(tempCpu); // stampa la temperatura
lcd.print( (char) 223 ); //stampa il pallino//
lcd.setCursor(12, 0);// setta il cursore sulla prima riga al 12 carattere
lcd.print(“T”);// stampa della prima riga sull’lcd
lcd.print(valore);// stampa della prima riga sull’lcd
lcd.print( (char) 223 );
lcd.setCursor(0, 1); // setta il cursore sulla seconda riga al primo carattere
lcd.print("Vga "); // stampa della seconda riga sull’lcd
tempVga = analogRead(tempPin2);//lettura valore del sensore
tempVga = (5 * tempVga * 100)/1024;//conversione del dato analogico in temperatura
lcd.print(tempVga); // stampa la temperatura
lcd.print( (char) 223 );
delay(2000);
if (tempCpu > CpuMax)
{
digitalWrite(6, HIGH); // abilita peltier

}

if (tempCpu < CpuMax-2)
{
digitalWrite(6, LOW); // disabilita peltier

}
CpuPiu=digitalRead(2);
if (CpuPiu==HIGH)
{
CpuMax=CpuMax+1;
valore=valore+1;
EEPROM.write(posizione,valore); // scrittura eeprom

}
CpuMeno=digitalRead(3);
if (CpuMeno==HIGH)
{
CpuMax=CpuMax-1;
valore=valore-1;
EEPROM.write(posizione,valore); // scrittura eeprom

}

}

La eeprom parte dopo 100.000 riscritture. Potresti cmq formattare la memoria con $00 e poi al reset leggere dalla prima locazione e prendere l'indirizzo della 1a cella vuota che incontrj

grazie...sinceramente non ho capito molto bene :sleeping: :sleeping: :sleeping: :sleeping: il reset della eeprom non mi cambierebbe le cose o sbaglio? Quindi cercare la prima cella vuota tornare in dietro di una e leggere il valore...

Formatti la eeprom per dargli un valore nullo ($00). Poi ad ogni avvio leggi finché non trovi una cella con. $00: quella è la prina cella libera. ovviamente questo modo non funziona se hai delle letture a zero.

veroda:
ciao a tutti. Ho realizzato un termometro con schermo lcd dove con due pulsanti si puo impostare un valore il quale mi abilita un’uscita. Avevo necessita di salvare questo dato sulla eeprom interna. Funziona tutto pero come ho fatto il programma mi va a scrivere sempre sulla spessa posizione quindi tra 10000 pressioni dei pulsanti la mia eeprom muore. =(
So come scrivere in “diverse posizioni” ma come faccio a richiamarle dopo un reset? spero di essermi spiegato bene.
Grazie mille.

se controlli se

Ti fai problemi che non lo sono.
Quante volte premi il pulsante?
Se ogni secondo l’EEPROM regge 2,7 ore e sei nelle grane perché ti é venuta una tensdinite dal premere di continuo il pulsante.
Se lo premi ogni minute l’EEPROM regge 7 giorni e giri come uno zombie perchße non hai dormito per una settimana
Se lo premi ogni ora l’EEprom regge 1,1 anni Ti sei stufato premere ogni ora e hai mollato il test la sera perché sei uscito con gli amici a bere una birra.
Se lo imposti ogni settimana e cambi 5 numeri l’EEprom Ti vive 38 anni

Ciao Uwe

quindi mi consigli di lasciare il programma come lo fatto ...effettivamente e che a volte sono un po maniacale...perfezzione perfezzione.. grazie

Sí, Ti consiglio di lasciarlo. Non cambierai spesso la soglia di temperatura. Ciao Uwe