"LOOP" dentro de uma case?

Boa noite Sr's, venho brigando a dias com uma programação,

Tenho sensores ligados a entradas, o resultado é exibido em excel e também em LCD feito um menu de listas...

Acontece que no LCD o valor não atualiza sozinho, ele lê o valor e congela, só atualiza se eu entro e saiu do sub menu, ja tentei "do while" sem sucesso (não sei se efetuei certo), tem alguma outra função que eu possa usar para inserir um "loop dentro dos case's" ?

Caso necessário o código esta em anexo.

Grato.

CodJunto.txt (6.83 KB)

Se o programa estiver em feito, não precisa de nenhum loop para fazer o que pretende (repare que já está dentro de um loop, o loop da própria função). No seu caso, o que eu faria seria criar uma função refresh_menu() idêntica à função readButts() mas em que executaria as acções quando os botões não eram premidos. Também uma função refresh_select() idêntica à função menu_select() em que apenas seria escrito o que é necessário (no caso penso que só está a ser escrito o motor_control, mas penso que a ideia é escrever mais coisas).

Sim, no momento só esta o motor control, mas ele estando atualizando irei replicar aos outros e declarar as impressões

Seria deste modo?
E declarando refreshMenu() dentro do void loop.

void refreshMenu()
{
  
   if(!digitalRead(menu))  menu_flag  = 0x00;
   if(!digitalRead(enter)) enter_flag = 0x00;

   if(digitalRead(menu) && menu_flag)
   {
       menu_flag = 0x01;
       list_menu();
       menu_number+=1;
       if(menu_number > 5) menu_number = 1;
    
   } 

   if(digitalRead(enter) && enter_flag)
   {
      enter_flag = 0x01; 
      sub_menu = !sub_menu;
      menu_select();
    
   }

BRAlucas:
Sim, no momento só esta o motor control, mas ele estando atualizando irei replicar aos outros e declarar as impressões

Seria deste modo?
E declarando refreshMenu() dentro do void loop.

void refreshMenu()

{
 
  if(!digitalRead(menu))  menu_flag  = 0x00;
  if(!digitalRead(enter)) enter_flag = 0x00;

if(digitalRead(menu) && menu_flag)
  {
      menu_flag = 0x01;
      list_menu();
      menu_number+=1;
      if(menu_number > 5) menu_number = 1;
   
  }

if(digitalRead(enter) && enter_flag)
  {
      enter_flag = 0x01;
      sub_menu = !sub_menu;
      menu_select();
   
  }

Não exactamente. Repare que não precisa de ler os botões. Apenas precisa de chama uma versão diferente da função menu_select() que escreva o valor da variável o LCD.