Problema con Menu e Oled ug2lib

Ciao,
sto facendo un po' di test con uno schermino che mi è appena arrivato e che voglio aggiungere al mio primo progetto.

Lo sto usando per visualizzare un menu e relative informazioni.
Ho diviso lo schermo in due, il lato sinistro mostra determinati valori, mentre il destro mostra il menu.
La navigazione tra le voci del menu avviene alzando o abbassando la leva del thumb joystick

Il problema che mi si presenta è che funziona tutto ma quando arrivo a selezionare l'ultima voce del menu, tutto quello che ho impostato nel lato sinistro scompare.. sulle altre posizioni del menu sembra funzionare tutto correttamente.

Il codice (in cui sono presenti anche parti che dovrò implementare dopo) è:

#include <WString.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EEPROM.h>
#include <U8glib.h>

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // Settings per mio Oled  


//////////////////////////PIN///////////////////////////////////////
// Pin RGB 
#define BLUE 5
#define GREEN 6
#define RED 7
//Pin Joystick 
const int buttonPin = 2;
const int X_pin = 0;  // Pin asse X
const int Y_pin = 1;  // Pin asse Y


////////////////////////// VARIABILI /////////////////////////////////////
//Button variables
//int currentMode=0;   //Imposta il Mode di avvio (0 Red 1 Green 2 Blue)
//int buttonState=1;
//int lastButtonState=1;
//int buttonSave=1;
//int lastButtonSave=1;

//Joystick axys
int xValue = 0;     
int x = 0;
int y = 0;

// RGB variables
int redValue;
int greenValue;
int blueValue;
int fadePercentage=90;                //valore in percentuale che esprime quanto dovrò ridurre le luci in modalità PLAY/RESUME

//Variabili per gestione salvataggio 
int saveRed=EEPROM.read(0);          //Leggo i valori salvati dalla funzione saveMode() nella EEPROM - Ogni indirizzo (0,1,2) contiene 8 bit (numero Max 256) quindi ne uso uno per ogni colore
int saveGreen=EEPROM.read(1);
int saveBlue=EEPROM.read(2);
int saveRedLow=255-((255-saveRed)-(((255-saveRed)*fadePercentage)/100));                 //in base al colore scelto e salvato creo della variabili a "bassa intensità" per il PLAY/RESUME mode
int saveGreenLow=255-((255-saveGreen)-(((255-saveGreen)*fadePercentage)/100));
int saveBlueLow=255-((255-saveBlue)-(((255-saveBlue)*fadePercentage)/100));

//Variabili navigazione Joystick
int sali=0;
int scendi=0;

uint8_t menu_redraw_required = 0;
#define MENU_ITEMS 5                                          
const char *menu_strings[MENU_ITEMS]={"Mode 1","Mode 2","Mode 3","Automatic","Settings" };      //Imposto le voci del menu
int menu_current=0;



/////////////////////////////////SETUP///////////////////////////////////////
void setup() {
  // flip screen, if required
  // u8g.setRot180();
 Serial.begin(9600);
 pinMode(buttonPin, INPUT_PULLUP);                     //Pulsante Joystick
menu_redraw_required =1;
  pinMode(8, OUTPUT);  // ????
}



////////////////////// SCHERMO LATO SX /////////////////////////////////////
void drawLeft(){                                                            //Disegno la parte Sx dello schermo
  int xSx=16;                                                               //posizione asse X di riferimento per il riquadro R G B e il suo contenuto
  //int ySx=0;                                                              //usate inizialmente ora disabilitate
  //int xDx=128;
  //int yDx=64;
  //int startPos=13;
  int lineHeight=12;                                                        //valore altezza linea considerando che sto usando un font con altezza 8px
  if (menu_redraw_required !=0){  
  u8g.drawFrame(0,0,128,64);
  u8g.drawFrame(xSx-4,14,43,(lineHeight*3)+2);
  u8g.drawLine(64,0,64,64);
  u8g.setFont(u8g_font_helvR08);
  u8g.drawStr(8, 2, "RGB Value");
  u8g.drawStr(xSx, 4+lineHeight, "R:");
  u8g.drawStr(xSx, 4+(lineHeight*2), "G:");
  u8g.drawStr(xSx, 4+(lineHeight*3), "B:");
  u8g.setPrintPos( xSx+15, 4+lineHeight);
  u8g.print(redValue);                                  //inserisco le variabili red green e blue Value
  u8g.setPrintPos( xSx+15, 4+(lineHeight*2));
  u8g.print(greenValue);
  u8g.setPrintPos( xSx+15, 4+(lineHeight*3));
  u8g.print(blueValue);
  } 
}



//////////////////////// SCHERMO CARICO MENU ////////////////////////////////////////
void drawMenu() {                                                     //Disegno il menu
  uint8_t i, h;
  u8g_uint_t w, d;
  
  u8g.setFontRefHeightText();                                         //fonte modificata da https://github.com/olikraus/u8glib/wiki/tmenu
  u8g.setFontPosTop();

  h = u8g.getFontAscent()-u8g.getFontDescent();
  w = 64;
  for ( i=0;i<MENU_ITEMS;i++){                                    
    d=(128-u8g.getStrWidth(menu_strings[i]))-16;
    u8g.setDefaultForegroundColor();
    if (i==menu_current){
      u8g.drawBox(64,i*h+1,w,h);
      u8g.setDefaultBackgroundColor();
    }
    u8g.drawStr(d,i*h,menu_strings[i]);
  }
  
}

/////////////////////// SCHERMO POSIZIONE MENU ///////////////////////////////////
void update_menu(){                                               //Aggiorno la posizione nel menu quando alzo/abbasso la leva del Joystick
  if (scendi==1){
    delay(300);
    menu_current++;
    if (menu_current>=MENU_ITEMS)
    menu_current=0;
    scendi=0;
    menu_redraw_required =1;


  }
  else if (sali==1){
    delay(300);
    if (menu_current==0)
    menu_current = MENU_ITEMS;
    menu_current--;
    sali=0;
    menu_redraw_required =1;
  }
}



//////////////////////// NAVIGAZIONE JOYSTICK /////////////////////////////////////

void joystickNavigation(){                         //Imposto i valori sali/scendi del menu alzando o abbassando il Joystick
    
  if(digitalRead(buttonPin)==HIGH){
      
    if (analogRead(X_pin)==1023){

      scendi=1;
      Serial.println("Scendi");
    }
    
    else if (analogRead(X_pin)==0){
      sali=1;
      Serial.println("Sali");
    }
  }
}


//////////////////////////////MAIN LOOP //////////////////////////////////////////////
void loop() {
  
  if (menu_redraw_required !=0){
  // picture loop
  u8g.firstPage();                                        //Carico l'UI
  do {
    drawMenu();
    drawLeft();
  } while( u8g.nextPage() );
  menu_redraw_required = 0;
  }
  


  
  update_menu();                                          //carico la funzione per muovere graficamente il menu
  joystickNavigation();                                   //carico la navigazione del menu tramite Joystick
  
if (digitalRead(buttonPin)==LOW){                           //Se viene premuta la leva Joystick rilevo su quale voce sono ed eseguo la Modalità
      switch (menu_current){                               // Tutte le varie modalità ed effetti
  case 0:
        redValue=0;
        greenValue=255;
        blueValue=255;
        analogWrite (RED,redValue);
        analogWrite (GREEN,greenValue);
        analogWrite (BLUE,blueValue);
        Serial.println("Mode 1 - Full Red");
        break;
  case 1:
        redValue=255;
        greenValue=0;
        blueValue=255;
        analogWrite (RED,redValue);
        analogWrite (GREEN,greenValue);
        analogWrite (BLUE,blueValue);
        Serial.println("Mode 2 - Full Green");
        break;
  case 2:
        redValue=255;
        greenValue=255;
        blueValue=0;
        analogWrite (RED,redValue);
        analogWrite (GREEN,greenValue);
        analogWrite (BLUE,blueValue);
        Serial.println("Mode 3 - Full Blue");
        break;
  case 3:
        //saveQuestion();
        //saveMode();
        Serial.println("Automatic Mode");
        Serial.println(menu_current);
        break;        
        //EEPROM.update(0,saveRed);           //Aggiorno i valori salvati dalla funzione saveMode() nella EEPROM - Ogni indirizzo (0,1,2) contiene 8 bit (numero Max 256) quindi ne uso uno per ogni colore
        //EEPROM.update(1,saveGreen);
        //EEPROM.update(2,saveBlue);
        
        break;
   case 4:
        Serial.println("Settings Mode");
        Serial.println(menu_current);
        break;

        
      }
    }
  }

Foto menu:


Foto quando arrivo all'ultima voce:
Abbiate pietà, sono alle primissime armi! :smiley:

spostando drawLeft(); qui :

  for ( i=0;i<MENU_ITEMS;i++){                                    
    d=(128-u8g.getStrWidth(menu_strings[i]))-16;
    u8g.setDefaultForegroundColor();
    if (i==menu_current){
      drawLeft();                                    //<------QUI
      u8g.drawBox(64,i*h+1,w,h);
      u8g.setDefaultBackgroundColor();
    }
    u8g.drawStr(d,i*h,menu_strings[i]);
  }

ed eliminando i vari menu_redraw_required
sembra funzionare tutto correttamente