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...
Tags:
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
}
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!!!
=)
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por