Problema com Menu

Boas
Sou um principiante mas com com os exemplos que tenho tirado tanto daqui do Forum como do Google tenho aprendido alguma coisa e feito algumas experimencias e numa delas fazer um menu com varios item estou a ter um problema para o qual necessitava de alguma ajuda desde ja agredeco

o codigo que se segue não e da minha inteira autoria foi tirado de um exemplo do Google adapteio para poder funcionar com o LCD serial

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>


#define I2C_ADDR    0x27 // <<----- Add your address here.  Find it from I2C Scanner
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7


LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

const int BTN_LEFT = 9;
const int BTN_RIGHT = 8;
const int BTN_CONFIRM = 10;
const int BTN_ESC = 7;
 
long last_read = 0;


 
char* list[] = {"Menu 1","Menu 2","Menu 3","Menu 4"};
int aa = 0;
byte index = 0;
 
void setup()
{
lcd.begin (16,2);
  pinMode(13, OUTPUT);
 
 
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);


pinMode(BTN_LEFT,INPUT);
pinMode(BTN_RIGHT,INPUT);
pinMode(BTN_CONFIRM,INPUT);
pinMode(BTN_ESC,INPUT);
lcd.begin(16,2);

Serial.begin(9600);
printMenu(list[index]);
}
 
void loop() {

if(millis() - last_read > 200) {
if(digitalRead(BTN_LEFT) == 1) {
buttonClicked(BTN_LEFT);
}
if(digitalRead(BTN_RIGHT) == 1) {
buttonClicked(BTN_RIGHT);
}
if(digitalRead(BTN_CONFIRM) == 1) {
buttonClicked(BTN_CONFIRM);
}
if(digitalRead(BTN_ESC) == 1) {
buttonClicked(BTN_ESC);
}
last_read = millis();

}
}
 
void buttonClicked(int btn) {
if(btn == BTN_LEFT && index > 0 ) {
--index;
} else if (btn == BTN_RIGHT && index < 3) {
index++;
} else if (btn == BTN_CONFIRM) {
char cmd[500] = "{\"Menu Selecionado\": \"";
strcat(cmd,list[index]);
strcat(cmd, "\"}");
if (list[index]=="Menu 2" ){

{
 Menu2();
}


}
else if (list[index]=="Menu 3" ){
do
{
 Menu3();
 }
while (digitalRead(BTN_ESC)==1);
}
}
printMenu(list[index]);


}
void printMenu(String s) {
lcd.clear();
lcd.setCursor(0,1);
lcd.print("<-- ou --> selec");
lcd.setCursor(5,0);
lcd.print(s);

}


void Menu2()
{


lcd.clear();
lcd.setCursor(0,0);
lcd.print("ola");
lcd.print(digitalRead(BTN_ESC));

delay(1000);


}

void Menu3()

{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Boas");
delay(1000);
}

o que esta a acontecer é o menu é selecionado faz o que deve fazer mas não se mantem no item volta logo para o menu princial e o objectivo seria ficar no item ate que seja pressionada a tecla “ESC”

desda ja agradeco a ajuda

Rui Sequeira