Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: Blackmore em 18 de Março de 2010, 20:15

Título: Trabalhar com Menu com microcontrolador
Enviado por: Blackmore em 18 de Março de 2010, 20:15
Boa noite a todos!!

Estou com um problema na criação de menus em uma IHM que preciso fazer.
Imagino que seja simples, mas não está funcionando, genericamente é assim

menu_10  - comando_11
              - comando_12

menu_20  -  comando_21
              -  comando_22
              -  comando_23

Imagino que é possível fazer a escolha do "menu" e "comando" com switch case, porém não sei como finalizar os comandos e (como um OK) confirmar a ação desejada na IHM.
Alguém pode me dar uma ajuda?
Qualquer comentário pertinente ao assunto do tópico será muito bem vindo

Abrax!
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: minilathe em 18 de Março de 2010, 23:22
Blackmore,

Boa noite a todos!!

Estou com um problema na criação de menus em uma IHM que preciso fazer.
Imagino que seja simples, mas não está funcionando, genericamente é assim

menu_10  - comando_11
              - comando_12

menu_20  -  comando_21
              -  comando_22
              -  comando_23

Imagino que é possível fazer a escolha do "menu" e "comando" com switch case, porém não sei como finalizar os comandos e (como um OK) confirmar a ação desejada na IHM.
Alguém pode me dar uma ajuda?
Qualquer comentário pertinente ao assunto do tópico será muito bem vindo

Abrax!

Com microcontroladores, já fiz menus usando assembly e C. Em C, seria assim:

int main( void )
{
    char op;

    while( 1 ) // Loop infinito - ler teclado e executar funcao respectiva
    {
         op = getch();                    // Ler opcao do teclado
         
         printf("Opcao: %c", op );     // Mostrar opcao no display LCD

         switch( op )
         {
            case '1':
               funcao_1();
               break;

            case '2':
               funcao_2();
               break;

             case '3':
                funcao_3();
                break;
         }

    }   
}

int funcao_1( void )
{
}

int funcao_2( void )
{
}

int funcao_1( void )
{
}


Não entendi o OK...
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: Blackmore em 19 de Março de 2010, 00:25
minilathe

Pelo menos meu raciocínio está certo nesta parte!!
Veja o que fiz ...


if ( menu != menu_ant )
   {
      menu_ant = menu;

   switch ( menu )
      {
         case 1:
            lcd_escreve ('\f');  // apaga o display
            lcd_pos_xy(1,1);
            printf (lcd_escreve,"Menu 1");
            lcd_pos_xy(1,2);
            printf (lcd_escreve,"valor BRG");
         break;
         case 2:
            lcd_escreve ('\f');  // apaga o display
            lcd_pos_xy(1,1);
            printf (lcd_escreve,"Menu 2");
            lcd_pos_xy(1,2);
            printf (lcd_escreve,"valor TMR0");

         break;
         case 3:
            lcd_escreve ('\f');  // apaga o display
            lcd_pos_xy(1,1);
            printf (lcd_escreve,"Menu 3");
            lcd_pos_xy(1,2);
            printf (lcd_escreve,"SET PWM");
         break;
         case 4:
            lcd_escreve ('\f');  // apaga o display
            lcd_pos_xy(1,1);
            printf (lcd_escreve,"Menu 4");
            lcd_pos_xy(1,2);
            printf (lcd_escreve,"USB on");
         break;
      } // fim switch
   }// fim if


Como o que estou fazendo é um IHM ... em alguns momentos eu irei escolher um valor X e outro momento um valor Y dentro das funções ... e indicar para o IHM que este valor escolhido será utilizado com o OK que vc não entendeu ... algo igual no windows quando vc faz uma modificação, entendeu?
Agradeço sua ajuda ...

Abrax!
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: Blackmore em 19 de Março de 2010, 02:45
tava aqui pensando ... uma possibilidade é o comando goto , não é mesmo? tenho apenas q tomar cuidado para não entrar em loop e travar o funcionamento!

abrax!
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: minilathe em 19 de Março de 2010, 03:27
Blackmore,

Acho que voce se enganou com os printf, não? Tentando consertar e simplificar um pouquinho:


if ( menu != menu_ant )
   {
      menu_ant = menu;

   lcd_escreve ("\f");  // apaga o display

   switch ( menu )
      {
         case 1:
            lcd_pos_xy(1,1);
            lcd_escreve ("Menu 1");
            lcd_pos_xy(1,2);
            lcd_escreve ("valor BRG");
         break;

         case 2:
            lcd_pos_xy(1,1);
            lcd_escreve("Menu 2");
            lcd_pos_xy(1,2);
            lcd_escreve("valor TMR0");
         break;

         case 3:
            lcd_pos_xy(1,1);
            lcd_escreve("Menu 3");
            lcd_pos_xy(1,2);
            lcd_escreve("SET PWM");
         break;

         case 4:
            lcd_pos_xy(1,1);
            lcd_escreve("Menu 4");
            lcd_pos_xy(1,2);
            lcd_escreve("USB on");
         break;

      } // fim switch
   }// fim if


Não gosto do "go to" em C, pode originar um código confuso e levar a erros. Acho "go to" mais apropriado para assembly, onde não há outra opção para desvios.
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: Blackmore em 19 de Março de 2010, 03:40
minilathe

Acho que voce se enganou com os printf, não?
não me enganei não ... se não tiver o printf não é impresso no display o conteúdo dentro de (" aqui ")  ...

Não gosto do "go to" em C, pode originar um código confuso e levar a erros
também não sou fã ... mas é ainda não encontrei alguma outra forma que me atenda.
Mas também é assim, se o programa der certo não tem pq não utilizar este recurso não é mesmo?

abrax!
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: lucasi em 19 de Março de 2010, 09:54
minilathe, blackmore...

Eu sempre quis saber como fazia esses menus e vcs acabaram me dando o caminho das pedras...

Vlw!@!!

Abs
Lucasi
Título: Re: Trabalhar com Menu com microcontrolador
Enviado por: Blackmore em 19 de Março de 2010, 13:21
Menu eu tb nunca utilizei, tinha noção de como fazê-lo ... agora houve a necessidade de fazer ... e aprender  :)

abrax!