[RESOLVIDO]Jogo Genios - Problema com Programação;

Bom dia / Boa Tarde Pessoal, 

Tenho que realizar um projeto em Arduíno, para a faculdade. Escolhi fazer o Jogo de Genios, para quem não lembra por nome, é aquele joguinho que pisca uma sequencia de cor, e o jogador necessita aperta os botoes na mesma ordem...

Postarei o link do 123d.circuits, que é onde tem um simulador já montado do meu projeto; 

Pois então, montei na protoboard e comecei a programar, porém me deparei com um problema e não consigo finalizar o projeto. 

O problema consiste no seguinte fato, ele inicializa a programação, pisca como forma de mostrar que inicializou o jogo, e vai pra gerar o randômico, e nessa parte de gerar o randômico cai em 3 situações:

* Ele pisca um led aleatório, e pisca como se fosse pra outra rodada, sem parar para receber botão, e entra num loop infinito, pisca inicializando, pisca led aleatório e volta a piscar inicializando rodada..

** Ele pisca inicializando, escolhe um led aleatório, e fica piscando infinitamente esse mesmo led;

*** Ele inicializa, pisca um led aleatório, para receber o botão, mas não prossegue a programação após o botão;

Também não consegui fazer com que o programa lembrasse quais leds já acenderam, para que na próxima rodada, pisque-os novamente, por exemplo, 1ª rodada = led vermelho; 2ª rodada= led vermelho+verde; 3ª rodada= vermelho+verde+azul. etc....

Estou com certa dificuldade, pois sou leiga em programação e Arduíno;

Agradeço desde já!!

PS: Após o almoço, posto o esquemático...

LINKS: Pastebin: http://pastebin.com/Er4st8qU;

123d.circuits: https://123d.circuits.io/circuits/1376101-projeto-arduino-microproc...

Video com o erro: http://labdegaragem.com/video/jogo-genio-erro

Exibições: 676

Responder esta

Respostas a este tópico

Oi V V, bom dia,

à primeira vista, eu digo que o uso de delay está dificultando o funcionamento correto do jogo.

Você pode usar millis(), ou mesmo testar a nova biblioteca do nosso amigo FH,

https://github.com/memristor/Arduino_Blink_Whitout_Delay, para dar um delay.

vou ver se encontro outro tipo de problema no seu code.

Rui

Oi VV,

voce definiu os ports 4,5 6 e 7 como

int led_xxx = y; como global, e depois os usou novamente nas funções     int sound_abc(int led_xyz),  .

Isto deve gerar problema.

é  recomendado que deve se definir port do arduino assim:   #define xpto  4

pois isto aloca somente um byte para a definição contra dois bytes da   int  xpto = 4;

e evita possíveis erros como este que eu vi.

Só vi este erro qdo fui substituir as definições e ai apareceram erros.

Rui

Atenção Rui...

O #define por si só não determina a memória que será alocada.

Por exemplo:

#define XPTO 4

int var1 = XPTO;     //aloca 2 bytes numa variavel var1 do tipo int  e conteudo inicial 4

long var2 = XPTO;  //aloca 4 bytes numa variavel  var2 do tipo long e conteudo inicial 4

unsigned char var3 = XPTO; //aloca 1 byte na variavel var3 do tipo char e conteudo inicial 4

Nas chamadas:

int sound_abc (var1) ou

int sound_abc (var2) ou

int sound_abc (var3) ou

int sound_abc (XPTO)

o compilador irá olhar a definição da função sound_abc(type var) e tentará fazer um (cast) automático, se por exemplo a função sound_abc for definida como:

int sound_abc(int var) {

.....

}

O compilador irá tentar fazer o cast (conversão) do que estiver sendo utilizado na chamada para o tipo de variável definido na declaração da função sound_abc(); se for int, quando for utilizado:

#define XPTO 4

A chamada sound_abc(XPTO) irá primeiro converter a constante 4 para uma variável intermediária do tipo int com o valor 4.

O mecanismo #define é uma macro, roda antes do compilador e apenas substitue o valor definido por #define nos locais onde for encontrado.

Abraço !

Oi V V,

fiz algumas alterações no seu code:

http://pastebin.com/NrPYnN3J

Rui

Oi V V, boa noite,

veja se este funciona:

http://pastebin.com/sxM6xa47

Depois de um retorno.

Rui

Funcionoou ! :D

Muito Obrigada Rui Viana :D

Abraços;

V.V

Esse brinquedo se chamava no Brasil GENIUS, mas na origem (Estados Unidos) ele se chamava SIMON. 

Veja inúmeros projetos do SIMON com Arduino :

https://www.google.com.br/webhp?sourceid=chrome-instant&ion=1&a...

Olá José! 

Alguns conhecem como "siga o som", simplesmente.

De fato, eu encontrei inúmeros códigos prontos, porém estou fazendo isso para a faculdade, então não seria legal eu simplesmente rodar um código, precisava desenvolver uma nova forma... Por isso pedi ajuda aqui. 

O nosso caro colega, Rui Viana, já me ajudou com o projeto, e como colocado no tópico, já está resolvido.

Agradeço seu comentário.

Oi V V, bom dia.

Atendendo a seu pedido, incluí uma tecla para ligar e desligar, no código do jogo.

Como durante o jogo, o programa fica preso em um loop esperando uma tecla, 

usei o recurso do interrupt para ligar e desligar.

Incluí também um LED para indicar se está ligado ou desligado.

Usei o LED do pino 13 nativo no arduino.

Se for usar um LED externo, lembre que a logica do pino 13 é:  LOW = apagada, e HIGH = acessa.

Usei o interrupt "0", port 2.

Para diminuir o efeito de "deboucing" no interrupt, coloque um capacitor de +- 10nF em

paralelo com o botão.

Modifiquei também a rotina de erro do jogo.

Ao errar, após piscar os LEDs diversas vezes, o programa volta ao inicio para começar tudo novamente.

http://pastebin.com/u5RDcArJ

Rui

Tá ficando bacana esse joguinho hein !!!!

A Vanessa vai poder usar como tese de mestrado !!

Bom Dia Odilon, 

Hahaha, Esse trabalho era pra ser um "simples" projetinho de arduino para uma disciplina do 3 º semestre, mas olha, se não fosse a ajuda do pessoal aqui, não teria conseguido chegar aonde está ... hahaha 

Rui, veja que no jogo Simon tem um pequeno LCD com dois digitos. 

Acho que é para mostrar, quantos passos o usuário conseguiu avançar. 

E tem mais botões, se quiser exercitar os seus neurônios, KKKK. 

http://www.hasbro.com/common/instruct/Simon_Electronic_Hand-Held_(2002).pdf 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço