Aew pessoal!

 

Tava brincando com meu contador lá que eu postei no wiki (ainda faltam as fotos...) e foi quando descobri que para ele ficar melhor eu precisaria colocar um MENU nele, seria o mais basico dos menus.

 

Eu clico um botao (Botao NEW GAME), ai quando a pessoa fizer isso eu quero que apareça esse menu:

 

Quem Ganhou o Jogo?

P1            Empate        P2

 

e a pessoa tem que aperta o botao correspondente a uma dessas 3 opções e quando ela fizer isso ela sai do menu e que continue o resto da função newgame...

 

Tem como alguem me dar uma luz???

to procurando algumas horas na internet e soh acho coisa complicada e com mont de trambolho inutil..

 

Achei isso tbm : http://www.arduino.cc/playground/Code/Menu#CurrentVersion

PhiMenu :http://liudr.wordpress.com/libraries/phi-menu/

Video de um MENU mtuu mais dificil do que o que eu quero! : https://www.youtube.com/watch?feature=player_embedded&v=fRtbORJ...

 

Mas não fala quais são as funções e nem como funciona, soh da um exemplo que eu não consigo fazer funcionar...

 

Exibições: 1602

Responder esta

Respostas a este tópico

Cara exatamente é o que quero que faça, o unico problema é a função que faz esperar apertar o botao.. tipo eu fiz a tela do menu já, só que nao sei fazer ela ficar la esperando ate eu apertar o botao... e que função é essa call_menu?? Aproveitando e te respondendo, minhas LCDs da china de 3 dolares cada funcionam normal, o unico problema é que o contraste delas é diferente! eu precisei ajstar o potenciometro, eu comprei elas no ebay, foi 0,99 dolares cada + 2 dolares dw frete para cada LCD dando 3 dolares cada uma.. soh ver la no ebay, vendedores que enviam para o Brasil!

Olá, eu não programo me Arduino (ainda) mas me garanto no PIC. Recentemente fiz um projeto que utilizei um LCD com um menu para a navegação.

Pelo o que entendi do seu projeto você quer que ao apertar new game apareça essa tela perguntando e após selecionar uma opção ele armazene o dado e continue o resto do cógido normalmente. No pic seria +/- assim:

 

if (input (NEWGAME) == 1){   // ficaria no loop principal, quando pressionado ele ativaria a função

delay_ms(200);                    // delay basico

resultado(p1ganha, p2ganha, empate);   // chamada da função

}

 

desse modo ao ser pressionado o botão ele vai para a função, na função vc colocaria os códigos para o LCD e as entradas do botão do p1, empate e p2 com ifs encadeados, por exemplo. Ao pegar o resultado, e armazenar no contador (creio eu que vc quer essa função para fazer tipo um rank das partidas) você teria esse dado, ai finalizar a função ele voltaria para o fim do if, que por estar no loop principal continuaria normalmente o programa. (se lembre que o exemplo que dei é pra PIC, não pra Arduino, tentei só dar uma iluminada...)

 

Aew pessoal!

 

Vlw Pela ajuda!!!

 

Ainda não consegui testar, mas eu ja compilei código e o programa do arduino n reclamou!!

 

Acho que volto para casa hoje e ai eu vou testar! espero que funcione...!

 

o código que eu digitei ficou assim :

 botão New Game:

    if (buttonstate == HIGH) {
      call_menu();
      partida++;
      if (partida >= 99){
        partida = 99;
      }
      lifej1= 20;
      lifej2= 20;
      pj1= 0;
      pj2= 0;
      storm= 0;
      colorlesss= 0;
      greennn= 0;
      blackkk= 0;
      blueee= 0;
      reddd= 0;
      whiteee= 0;
      setTime(0);
      delay(300);
    }

 

 

Ai a função do menu ficou deste jeito :

 

void call_menu(){
  while (analog1 == 0 && analog2 == 0 && analog3 ==0){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("   Quem Ganhou?    ");
    lcd.setCursor(0,1);
    lcd.print("P1   Empate   P2");
    if ((205 <= analog1)&&(analog1 <= 1023)){
      p1game++;
      if (p1game >= 9){
        p1game = 9;
      }
    }
    if ((205 <= analog2)&&(analog2 <= 1023)){
      p2game++;
      if (p2game >= 9){
        p2game = 9;
      }
    }
  }
}

 

 

Olá, bem na sua função ai senti a falta da opção de empate...

Outra, esse seu while não está dando loops infinitos não?? Em caso positivo eu faria assim:

 

declarafunção {

 

boolean controle = true; // esse é o controle do while

 

   while (controle = true){

/*

COMANDOS DO LCD

*/

if (teclaDop1){

comandos do p1

...

controle = false;

}

if (teclaDop2){

comandos do p2

...

controle = false;

}

if (teclaDoempate){

comandos do empate

...

controle = false;

}

 

   } // fim do while

} //fim da função

 

Desse modo ao entrar na função, ela só será finalizada quando um dos três botões forem pressionados pois dentro de cada IF que tem a finalização do while, desse modo, é necessário que um dos IFs sejam acessados para sair da função e retornar ao jogo :)

Então cara, está em um loop infinito sim... já tentei variass coisas.. mas o negocio é que ele não esta resolvendo a função if... ele parece ignorar ela... até mudei para o seu jeito, mas continua a mesma coisa..

void call_menu(){
  while(menuu = true){
    lcd.setCursor(0,0);
    lcd.print("    Who Won?    ");
    lcd.setCursor(0,1);
    lcd.print("P1    Draw    P2");
  }
  if ((205 <= analog1)&&(analog1 <= 409)){   
    menuu = false;
    p1game++;
    if (p1game >= 9){
      p1game = 9;
    }

  }

 

O Programa n le a parte do If então ele n roda a parte do menuu = false, então nunca sai da tela...

não sei como fazer para solucionar isso... talvez outra função... =/

 

alguem tem alguma idéia??

 

Vlw pessoal!

Opa, deixe o if dentro do while... no exemplo que dei a ultima chave é a da função, a da penultima é a do while. Com o while repetindo tudo o IF estará dentro dele, ou seja ele ficará repetindo o while até algum dos IF serem acessados. Teste ai com o while encobrindo os IFs. Teste isso:

 

void call_menu(){
  while(menuu = true){
    lcd.setCursor(0,0);
    lcd.print("    Who Won?    ");
    lcd.setCursor(0,1);
    lcd.print("P1    Draw    P2");
 
  if ((205 <= analog1)&&(analog1 <= 409)){   
    menuu = false;
    p1game++;
    if (p1game >= 9){
      p1game = 9;
    }

  } //fim do while aqui

}

hehehe eu colei o código errado hehe

eu já tinha posto o if dentro do while, mas soh que não tava funcionando de jeito nenhum e então eu tentei esse código ai meio que no "porque não??" e ai eu escrevi isso ai... hheeeh não sei o que mais eu posso tentar...

Cara para falar a verdade eu acho que o buraco é mais embaixo... pq no primeiro código que eu postei :
void call_menu(){
while (analog1 == 0 && analog2 == 0 && analog3 ==0){
lcd.setCursor(0,0);
etc..

o while alguma vez tinha que sair! pq quando eu apertasse algum botão ,qualquer um, as variaves analog1 ou analog 2 ou analog 3 deixariam de ser 0 e o programa ia sair do loop. Mas como ele não fez isso , o que esta me indicando é que o arduino não esta vendo que o botao esta apertado! alguem sabe se os botões funcionam na função while???

Vlw pessoal!!


tens alguma ideia?
Olá, ai você está utilizando portas AND, ou seja o while só irá sair quando os 3 botões forem pressionados, o que vc ta pensando são as portas OR (representado por ||) onde quando uma das 3 teclas forem pressinadas ele sairá do while. Porém desse modo o while será finalizado quando a tecla for pressinada e os IFs podem não ser acessado, por isso que fica legal o while ser controlada por uma variavel onde só será finalizado após ser acessado pelo IF (obriga o jogador a responder qual foi o resultado da partida para o jogo prosseguir, pois o while so será finalizado quando um dos IFs forem acessador =D ).

Opa, me enrolei na lógica do while, pensei em manter o true e não em sair dele rsrsrs...

Teste as ideias do Renato e nos atualize se ficou tudo OK, eu ainad acho melhor controlar o while com uma variavel do geito que falei, mas cada um com suas ideias ^^

Então cara não estou em casa hehe

 

mas quando eu chegar eu vou fazer os seguintes testes:

 

Dentro da função while eu vou mandar printar a variavel analog1 ( que pega a tensão nos botões e executa a função) para ver se ela muda para as faixas de tensão que esta na programação, ou não ai ja sei aonde vai ser o problema... vou tentar também printar o relógio para ver se funciona...e também vou por a função if antes do lcd.print...não vai mudar nada essa ultima coisa, mas vamos ver...

 

eu acho que as coisas não estão resolvendo por que o arduino não esta lendo a tensão na porta analógica... (to usando uma porta analogica para economizar portas digitais e ter mais botoes..) e se o problema for esse, não vai ter jeito a não ser tentar outra função.. 

também vou tentar fazer um if dentro do while com uma porta digital para ver se muda...

 

e por ultimo vou mudar o atmega328 para ver se n eh problema com ele...

 

espero que alguma coisa resolva...  se não vcs tem mais alguma idéia de outra função que possa fazer o menu??

 

Vlw pessoal!!

 

 

Aew Pessoal!

 

Fiz o teste aqui, e como eu suspeitava ele não lê o analog quando esta em while!

Eu dei um print na variavel analog1 que pega a tensão, quando eu apertei o botão NEW GAME a variavel ficou em 0(botão não apertado!) apertei o botão e ela não mudou!

Fiz outro teste, deixei apertado um botao qualquer do contador e ai partei o botao NEW GAME a variavel analog1 que antes era 0 ficou 332, mas mesmo com a variavel mudada  não acontece nada! mesmo com o if da variavel! mtu estranho.. pq pelo menos o if devia resolver já que o analog1 esta com valor 332....

 

Agora fiz o mesmo teste, só que com a porta digital, o arduino também não reconhece a mudança de estado quando esta no modo while... Deve ter outra função que faça isso... pois tem varios videos de pessoas com MENUS e para vc navegar nele vc tem que usar alguma porta né...

 

alguem sabe resolver isso??

Vlw pessoal!! 

Aew pessoal!

 

Consegui fazer funcionar!!

 

void call_menu(){
  while((analogRead(A0) == 0)&&(analogRead(A1) == 0)&&(analogRead(A2) == 0)){
    lcd.setCursor(0,0);
    lcd.print("    Quem Ganhou?    ");
    lcd.setCursor(0,1);
    lcd.print("P1    Empate    P2");
    if(analogRead(A0) > 0){
      p1game++;
      if(p1game >= 9){
        p1game = 9;
      }
    }
    if(analogRead(A2) > 0){
      p2game++;
      if(p2game >= 9){
        p2game = 9;
      }
    }
  }
}

 

Realmente não sei o que n funcionou... pq o codigo esta igual... tirando o analogRead(A0)... mas que vai dar na mesma coisa... acho que o que causou tudo isso foi um espaço entre o while e o parenteses...

 

VLW mesmo pessoal!!!

=)

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço