Ir ao conteúdo
  • Cadastre-se

Problemas em criar um Menu


cezar.opaleiro

Posts recomendados

Ae galera!

Fiz esse "menuzinho" para que quando aperte um botão as informações no LCD vão se alternando mas parece que está havendo algum tipo de interferencia...a função Conta_Giros(); funciona perfeitamente mas a Tensao_Bateria(); não funciona em tempo real, ou seja, se eu mudo o valor no potenciometro não acontece nada, aperto o botão de alterar as funções e vô para conta giros e volto nela o valor alterou, o que eu quero que elas funcionem em tempo real. Já testei todas individuais e funcionam...por exemplo: se eu coloco a Tensao_Bateria(); sozinha ela funciona se faço desse jeito abaixo não fica atualizando em tempo real as informações...alguém pode me dar uma luz?

Valeu!

Abrs!


while(1){

if(PORTB.f0 == 0){
opcao++;
Lcd_Cmd(_LCD_CLEAR);//' limpa o display
delay_ms(200);
PORTB.f0 = 1;
}

switch (opcao){

case 1:
Conta_Giros();
break;

case 2:
Tensao_Bateria();
opcao = 0;
break;

}
}

Link para o comentário
Compartilhar em outros sites

Fácil, o que acontece é como voce fica alternando entre uma função e outra o PIC primeiro executa a função solicitada pelo usuário, e fica nisso, até que essa rotina seja terminada, para que ele rode em tempo "real" voce devera usar interrupções para isso,como a do conversor A/D para que ele fique fazendo a conversão e só avise ao PIC quando ela estiver pronta, com isso voce sempre tera do valor do A/D atualizado!

duvidas pergunte!

abs.

Link para o comentário
Compartilhar em outros sites

Ola colega cezar.

Gostaria de pedir duas "coisinhas"....

1- por favor poderia postar o codigo do seu menu,pois eu precisaria disso num projeto(caso não de tudo bem).

2- poderia postar o codigo da função Tensao_Bateria(); ?

com isso da pra começar.

Sim mano!

Fiz minha rotina que calcula a tensão da bateria assim:


void Tensao_Bateria(){
PORTA.f1 = 0; //apagar leds
PORTB.f2 = 0; //apagar leds
Lcd_out(1,2,"Tens");
CharATIL(1,6);
Lcd_out(1,7,"o Bateria");
captura = ADC_Read(2);
volts = captura*0.0142*100;

temp = volts; //ok

if(captura > 704){
c1 = temp / 1000;
temp -= c1 * 1000;
bat[0] = c1+48;
}

else{
bat[0]= ' ';
}

c2 = temp / 100;
temp -= c2 * 100;
c3 = temp / 10;
temp -= c3 * 10;

bat[1] = c2+48;
bat[2] = '.';
bat[3] = c3+48;
bat[4] = 'V';
bat[5] = 'o';
bat[6] = 'l';
bat[7] = 't';
bat[8] = 's';

Lcd_out(2,5,bat);

}

Espero que lhe ajude!

Heheh o Menu eu que tava vacilando num erro bem bobinho...no case 2 após executar a função eu colocava a variável opcao em 0, logo o case 2 não continuaria sendo executado!

Então resolvi retirando o opcao = 0 de dentro do case e fazendo um pequeno if

Ta funcionando redondo!! \o/

while(1){

if(PORTB.f3 == 0){
Lcd_Cmd(_LCD_CLEAR);//' limpa o display
Cil();
PORTB.f3 = 1;
}

if(PORTB.f0 == 0){
opcao++;

if(opcao > 2){
opcao = 1; //volta ao menu inicial
}
Lcd_Cmd(_LCD_CLEAR);//' limpa o display
delay_ms(200);
PORTB.f0 = 1;
}

switch (opcao){

case 1:
Conta_Giros();
break;

case 2:
Tensao_Bateria();
break;

}
}

Valeu pela ajuda de todos!

Abrs!

Link para o comentário
Compartilhar em outros sites

edit.

vi que fechou.poderia postar o codigo do MENU? seletor,etc...? pois me ajudaria num projetinho....

Caso não seja possivel tudo bem

Já postei acima amigo!

Veja abaixo novamente:


while(1){

if(PORTB.f0 == 0){
opcao++;

if(opcao > 2){
opcao = 1; //volta ao menu inicial
}

Lcd_Cmd(_LCD_CLEAR);//' limpa o display
delay_ms(200);
PORTB.f0 = 1;
}

switch (opcao){ //menu seletor

case 1:
Conta_Giros();
break;

case 2:
Tensao_Bateria();
break;

}
}

Cada vez que você apertar o botão em PORTB.f0 aterrado as opções vão se alternando pelo switch case!

Dúvidas estou a disposição!

Abrs!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...