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