Problema EEPROM

Ciao ragazzi, ho un problema, sto utilizzando la eeprom per memorizzare dei valori, per semplificarmi la sorgente a inizio loop assegno una sola volta ad alcune variabili i valori della eeprom e fin qua tutto ok, il problema è quando utilizzo queste variabili: fino adesso non ho avuto problemi ma oggi stranamente mi bloccavo scoprendo in seguito che il valore di una variabile andava a "255" pur avendo il byte della eeprom a "11", provando varie cose ancora piu stranamente ho scoperto che in alcune funzioni la variabile aveva il valore corretto mentre in altre funzioni aveva il valore "255", il tutto verificato con la seriale, sapreste dirmi il motivo?
grazie in anticipo,
Andrea

... e di grazia, ce lo fai vedere il codice o dobbiamo immaginarlo?

Federico

Se metti il programma ed evidenzi i pezzi che danno il problema, magari capiamo

Forse cerchi di assegnare int a byte o qualcosa di simile.
Mostra il codice!

Si scusate, la sorgente è lunghetta ed è divisa in tanti tab, ho scritto un codice striminzito per dare l'idea se prima non si capiva niente:

#include<EEPROM.h>

byte Val1, TypeMenu = 1;
void setup() {
  EEPROM.write(1, 14);
}

bool EP = true;
void loop() {
  while(EP){
    Gestione_EEPROM();
    EP = false;
  }
  switch(TypeMenu){
    case 1: FunzioneA(); break;
    case 2: FunzioneB(); break;
    case 3: FunzioneC(); break;
  }
}

void Gestione_EEPROM(){
  Val1 = EEPROM.read(1);
}

void FunzioneA(){
  //...
  Serial.print(Val1);
  //Restituisce 14
}

void FunzioneB(){
  //...
  Serial.print(Val1);
  //Restituisce 14
}

void FunzioneC(){
  //...
  Serial.print(Val1);
  //Restituisce 255
}

L' impostazione della sorgente è la medesima con le differenze che è molto piu lunga e la EEPROM.write() la uso in altre funzioni e non nella setup
Come potete vedere nella FunzioneC() la variabile Val1 prende il valore di 255 e non 14 come nella altre, ho controllato tutto e non c'erano errori
grazie,
Andrea

Così come lo hai scritto ti restituisce 255?

Vedi tutte le funzioni che scrivono sulla EEPROM e le relative variabili.

No in questo va bene, nel mio in una funzione restituisce 255, mentre nelle altre restituisce il giusto, ho controllato tutta ieri sera e non c'erano errori, ho risolto mettento la EEPROM.read() nella funzione stessa ma non fidandomi ho modificato sta mattina e adesso utilizzo i valori memorizzati direttamente con EEPROM.read() senza passare per le variabili, sembrava che la cpu facesse un'operazione & bit a bit quando la richiamavo nella funzione che mi dava errore

AndreAndre:
No in questo va bene...

Perdonami, ma come è possibile darti una mano se posti un codice funzionante!!

AndreAndre:
... utilizzo i valori memorizzati direttamente con EEPROM.read() senza passare per le variabili ...

Non mi sembra sia una soluzione al problema, per vari motivi:

  • la eeprom non è infinita (Write/Erase Cycles EEPROM: 100,000), che non è poco se usata correttamente, ma se a ogni ciclo la leggi una decina di volte, beh io mi farei qualche conto
  • la read è veloce, ma non quanto leggere una variabile, quindi stai rallentando il programma
  • e infine, forse il più importante, se c'è un errore nel codice, va identificato e corretto, non aggirato con soluzioni che innescano altri problemi

Federico