Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Entre para seguir isso  
cezar.opaleiro

Problemas em criar um Menu

Recommended Posts

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;

}
}

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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!

    Editado por cezar.opaleiro

    Compartilhar este post


    Link para o post
    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

    Editado por Angelo Eletronic
    Completar

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×