Go Down

Topic: "LOOP" dentro de uma case? (Read 175 times) previous topic - next topic

BRAlucas

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.

luisilva

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

BRAlucas

#2
Jul 11, 2018, 05:41 pm Last Edit: Jul 11, 2018, 06:37 pm by 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.


Code: [Select]
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();
   
   }

luisilva

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.


Code: [Select]
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.

Go Up