Menus com LCD I2C e Sensores

Olá amigos estou fazendo um contador com três sensores, onde a contagem será mostrado em um display 16x2 i2C, fiz um menu para organizar a contagem de cada sensor.

Até que está funcionando bem, único problema é que a contagem não atualiza em tempo real quando estou na tela do sensor selecionado, para atualizar eu preciso retornar ao menu principal e voltar novamente.

Alguém poderia me ajudar, já estou a horas tentando resolver isso.

Agradeço pela atenção

Segue o código:

// BIBLIOTECAS NECESSARIAS PARA RODAR O SCRIPT
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// DEFINIÇÃO DAS PORTAS QUE SERÃO CONECTADOS NO ARDUINO MEGA
#define    pinoSensor3   27
#define    pinoSensor2   25
#define    pinoSensor    23
#define     menu     24
#define     enter    22

//Armazena estado de leitura do sensor
bool sensor_alto =0;

bool sensor_high =0;

bool sensor_high2 =0;


//Cria variaveis globais
unsigned long contador = 0;

unsigned long counter2 = 0;

unsigned long counter3 = 0;


// TIPOS DE FUNÇÕES QUE SERÃO UTILIZADAS NA INTERFACE
void readButts();
void list_menu();
void menu_select();


// DECLARAÇÃO DO TIPO DE LCD I2C QUE ESTÁ SENDO UTILIZADO
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);


// DEFINIÇÃO DAS VAREAVEIS GLOBAIS
int      line[3] = {0,1,2},
         line_bk[3],
         index,
         menu_number = 1;

boolean  menu_flag  = 0,
         enter_flag = 0,
         sub_menu = 0;


void setup()
{
  
  pinMode(menu,  INPUT_PULLUP);
  pinMode(enter, INPUT_PULLUP);
  pinMode(pinoSensor, INPUT);
  pinMode(pinoSensor2, INPUT);
  pinMode(pinoSensor3, INPUT);
 
  
 lcd.begin (16,4);
 lcd.setBacklight(HIGH);
 lcd.setCursor(0,0);
 lcd.print(">");
 
 
} //end setup


void loop()
{
  
  // Verifica se o  objeto foi detectado pelo sensor
  if (digitalRead(pinoSensor)) sensor_alto=1;
  if(!digitalRead(pinoSensor) && sensor_alto); 

  if(digitalRead(pinoSensor2)) sensor_high=1;
  if(!digitalRead(pinoSensor2) && sensor_high);

  if(digitalRead(pinoSensor3)) sensor_high2=1;
  if(!digitalRead(pinoSensor3) && sensor_high2)
 
    
  {
     // Incrementa o valor do contador
    sensor_alto =0;
    contador +=1;           
    
    sensor_high =0;
    counter2 +=1;  

    sensor_high2 =0;
    counter3 +=1;   
    
  }
    
  if(!sub_menu)
  {
    
    lcd.setCursor(1,line[0]);
    lcd.print("1)SENSOR GERAL     ");
    lcd.setCursor(1,line[1]);
    lcd.print("2)SENSOR RAMPA1        ");
    lcd.setCursor(1,line[2]);
    lcd.print("3)SENSOR RAMPA2        ");
      
    
  }
  

  readButts();
  

  
} //end loop


void readButts()
{   
  
   if(!digitalRead(menu))  menu_flag  = 0x01;
   if(!digitalRead(enter)) enter_flag = 0x01;

   if(digitalRead(menu) && menu_flag)
   {
       menu_flag = 0x00;
       list_menu();
       menu_number+=1;
       if(menu_number > 3) menu_number = 1;
           
   } //end if menu

   if(digitalRead(enter) && enter_flag)
   {
      enter_flag = 0x00; 
      sub_menu = !sub_menu;
      menu_select();
    
   } //end if menu
  
  
} //end readButts


void list_menu()
{
  for(int i=2; i>-1; i--) 
  {
     index = i-1;
     line_bk[i] = line[i];
     
     if(index < 0) line[i] = line_bk[i+2];
     
     else line[i] = line[i-1];

  }

} //end list_menu

   
void menu_select()
{

    switch(menu_number)
    {
       case 1: 
               lcd.setCursor(1,0);
               lcd.print(" SENSOR GERAL ");
               lcd.setCursor(0,1);
               lcd.print("                "); 

               
               lcd.setCursor(7,1);
               lcd.print(contador);                        
               break;
       case 2: 
               lcd.setCursor(1,0);
               lcd.print(" SENSOR RAMPA1 ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
                
               lcd.setCursor(7,1);
               lcd.print("        "); 
               lcd.setCursor(7,1);
               lcd.print(counter2); 

                        
               break;
       case 3: 
               lcd.setCursor(1,0);
               lcd.print(" SENSOR RAMPA2 ");
               lcd.setCursor(0,1);
               lcd.print("                ");

               lcd.setCursor(7,1);
               lcd.print("        "); 
               lcd.setCursor(7,1);
               lcd.print(counter3);  
               break;        
    } //end switch
   
} //end menu_select

A função que atcualiza o menu tem de ser chamada sempre dentro da loop e não só quando operas os botões...