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
-
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!
-
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...
-
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!
-
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!
-
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.
-
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!
-
minilathe, blackmore...
Eu sempre quis saber como fazia esses menus e vcs acabaram me dando o caminho das pedras...
Vlw!@!!
Abs
Lucasi
-
Menu eu tb nunca utilizei, tinha noção de como fazê-lo ... agora houve a necessidade de fazer ... e aprender :)
abrax!