"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.