(Risolto) Uilizzo EEPROM 24C02

Buon Giorno,
Mi presento sono un appassionato di Hardware Software. Programmo giornalmente con il PHP - Python ecc.
Da un po mi sono avvicinato ad arduino e trovo la piattaforma molto interessante.

Ora ho realizzato un progetto dove utilizzo:

  1. arduino uno;
  2. display LCD con interfaccia I2C;
  3. tastiera 16 Tasti a sfioramento;
  4. scheda ethernet con il chip ENC28J60.

ho messo tutto insieme e ho realizzato un piccolo terminale che collegato alla rete mi permette di comandare un server su cui gira un applicativo python fa da me.

Ora ho aggiunto un sensore di temperatura LM35 e una scheda relè per attivare una ventola per raffreddare il rack dei server di rete.

A causa della poca memoria a disposizione se inserisco le due nuove funzioni per il controllo della temperatura il sistema non si avvia.
per liberare memoria volevo spostare tutte le stringhe del menu, che ora usano la Macro F() nella memoria di una piccola eeprom.
L’idea era usare la libreria jlesech/Eeprom24C01_02 per caricare le stringhe, e poi recuperare con un indice quelle che servono.
Mi potete indicare qualche esempio ulteriore rispetto a quelli già presenti nella libreria ?
questo è l’esempio scritto da me ma non funziona.

#include <Wire.h>

#include <Eeprom24C01_02.h>

/******************************************************************************
 * Private macro definitions.
 ******************************************************************************/
#define MaxRiga 20
#define RigheMenu 4
/**************************************************************************//**
 * \def EEPROM_ADDRESS
 * \brief Address of EEPROM memory on TWI bus.
 ******************************************************************************/
#define EEPROM_ADDRESS 0x50

/******************************************************************************
 * Private variable definitions.
 ******************************************************************************/

static Eeprom24C01_02 eeprom(EEPROM_ADDRESS);

/******************************************************************************
 * Public function definitions.
 ******************************************************************************/


char  Righe[RigheMenu][MaxRiga] = {"Prova Uno","Prova Due","Prova Tre","Prova Quattro"};
char  Buffer[RigheMenu][MaxRiga];

void pack(){
    int x = 0;
    byte adr =0;
    for(int i = 0; i< RigheMenu; i++){
        for(int y =0; y< MaxRiga; y++){
            if(Righe[i][y]!= '\0'){
                Buffer[i][y] = Righe[i][y];
            } else {
                Buffer[i][y] = '*';
            }
        }
        Buffer[i][MaxRiga] = '\0'; 
        Serial.println(Buffer[i]);

        byte B[MaxRiga] ={0};
        for(int z =0; z <= MaxRiga; z++){
            B[z] = Buffer[i][z];
        }
        Serial.println((char *)B);
        eeprom.writeBytes(adr,MaxRiga,B);
        adr = ((MaxRiga*i)+MaxRiga+i)+1;
    }
}

void ReadAll(){
byte adr = 0;
    for(int i = 1;i<=4;i++ ){
    byte B[MaxRiga] = {0};
    eeprom.readBytes(adr, MaxRiga, B);
    adr = ((MaxRiga*i)+MaxRiga+i)+1;
    for(int z=0; z<= MaxRiga; z++)
    Serial.write(B[z]);
    Serial.println("Nuovo");
    }   
}

void setup()
{
    // Initialize serial communication.
    Serial.begin(9600);
    
    // Initiliaze EEPROM library.
    eeprom.initialize();
    // Declare byte arrays.   
    pack();
    // Read array with bytes read from EEPROM memory.
    Serial.println("Read bytes from EEPROM memory...");
    ReadAll();
}

/**************************************************************************//**
 * \fn void loop()
 *
 * \brief
 ******************************************************************************/
void loop()
{

}

Dopo un po di prove risolto il problema e ora lo script funziona. infatti l'errore era nella inizializzazione della variabile Buffer.

char  Buffer[RigheMenu][MaxRiga]={"","","","",""};

modificando cosi la riga funziona.