[ RISOLTO ] Funzione I2C EEprom

Sto cercando di far funzionare la una funzione per lettura dati di una EEProm 24LC65 senza riuscirci

#include <Wire.h>

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

}

void loop() {

   W_EEprom ( 1 , 45 ) ;
   delay(100);
   Serial.println (R_EEprom ( 1 ),DEC) ;

}

void W_EEprom ( unsigned int indirizzo , int data ) {

    Wire.beginTransmission ( 0x50 ) ;
    Wire.write ( highByte ( indirizzo )) ;
    Wire.write ( lowByte ( indirizzo )) ;
    Wire.write (data) ;
    Wire.endTransmission () ;
    delay(5);
   
}

int R_EEprom ( unsigned int indirizzo ) {
    Serial.println ( indirizzo ) ;
    Wire.beginTransmission ( 0x50 ) ;
    Wire.write ( highByte ( indirizzo )) ;
    Wire.write ( lowByte ( indirizzo )) ;
    Wire.endTransmission () ;
    Wire.requestFrom ( 0x50 , 1 ) ;
    
    while ( Wire.available () ) {
     byte e = Wire.read () ;
     Serial.println ( e );
      }
      
   Wire.endTransmission () ;
    //return e ;
}

Lo stesso codice usato direttamente nel loop e non come funzione va una meraviglia .
Dove sbaglio ?

Perché hai commentato il return? E perché se ritorni un byte hai dichiarato la funzione come int?

Perchè con il return mi da errore " e non dichiarato per questo scopo " . Me lo da sia se la e è dichiarata come int e sia come byte . Stessa cosa se dichiaro la funzione come byte al posto di int .
Ho inserito i Serial.println per controllare cosa avviene e sia l'indirizzo che il contenuto letto dentro la funzione è esatta , mentre nel programma restituisce 0

Se non metti return la tua funzione non restituisce niente, per forza che non trovi il valore giusto... La soluzione non è togliere un pezzo fondamentale, ma capire esattamente perché il compilatore si lamenta!

Dichiara e di typo byte e aggiungi il return. Nota che, per come hai scritto tu, e esiste SOLO dentro al while, per cui dovrai dichiararla esternamente ad esso, altrimenti non puoi utilizzarla al di fuori. Se hai altri errori postaci i messaggi precisi.

Risolto . Il problema era la " e " dichiarata nel ciclo while . Ho dichiarato la e come int e spostato fuori dal while , poi ho rimesso il return .

int R_EEprom ( int indirizzo ) {
    Serial.println ( indirizzo ) ;
    int e ;
    Wire.beginTransmission ( 0x50 ) ;
    Wire.write ( highByte ( indirizzo )) ;
    Wire.write ( lowByte ( indirizzo )) ;
    Wire.endTransmission () ;
    Wire.requestFrom ( 0x50 , 1 ) ;
    
    while ( Wire.available () ) {
     e = Wire.read () ;
     Serial.println ( e );
      }
      
   Wire.endTransmission () ;
   return e ;
}

Grazie :slight_smile: