Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Faça um jogo de memória Arduino

Componentes e suprimentos

Arduino UNO
× 1
SparkFun resistores de 330 ohms
precisamos de apenas 4 deles
× 1
SparkFun resistores de 10k ohm
precisamos de apenas 4 deles
× 1
SparkFun Assorted LEDs
precisamos de 4 LEDs de cores diferentes
× 1
Mini alto-falante SparkFun
Você pode passar sem isso se não se importar com o som
× 1
SparkFun BreadBoard (tamanho real)
× 1
Fios de jumpers (genérico)
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Você se lembra do jogo "Simon"? Muita gente da minha idade (nascida nos anos 70) perdeu muito tempo a jogar. O jogo era simples, tinha 4 botões de cores diferentes que acendiam em sequência e tinha que repetir a sequência. Sempre que acertava, o jogo apresentava a sequência novamente com uma cor adicional no final.

Eu ganhei um para o Natal há muito tempo, mas depois mudei e mudei, e movi um pouco mais, então o jogo se perdeu em uma das muitas caixas que nunca são desempacotadas de uma mudança para outra ...

Como um "adulto", descobri as alegrias do Arduino e com isso, tive a oportunidade de reviver meu amigo há muito perdido e perdedor de tempo.

Este tutorial mostrará como fazer um jogo semelhante usando um Arduino Uno com alguns LEDs e resistores e um circuito relativamente simples.

O programa em si pode ser um pouco complicado para um iniciante, então tentei explicar no código o que ele faz e como.

A maneira mais simples de fazer o jogo funcionar é esta.

1) Conecte o circuito exatamente como mostrado no diagrama. A cor dos fios não é relevante, então se você ficar sem fios pretos, está tudo bem. :)

2) Cole o código-fonte em seu editor Arduino favorito e carregue-o na placa

3) Jogue o jogo

O jogo começa após cerca de 3 segundos com 5 flashes lentos de todos os LEDs.

Se um ou mais LEDs não piscarem, verifique a fiação. Na minha placa, os botões muito pequenos nem sempre assentam corretamente e têm uma tendência a saltar para fora.

Se a fiação estiver correta, tente inverter um LED que esteja funcionando por um que não esteja funcionando para ver se é a fiação ou o próprio LED.

Após a conclusão dos 5 flashes, um LED acenderá. Não sei dizer qual, é uma surpresa :) Pressione o botão desse LED. Este LED acenderá novamente seguido por um novo. Pressione os botões corretos em sequência ... Você vê onde estou indo com isso ...

Então, muito em breve, você verá todos eles piscarem rapidamente. Isso significa que você perdeu. :D

A última sequência dada a você será reproduzida para que você possa contar seus pontos, seguida pelas 5 piscadas lentas de antes, indicando que o jogo está começando novamente.

Você tem 2 segundos para pressionar cada botão.

Ai está! Divirta-se!

Quer tornar isso um pouco mais difícil? Por que não alterar a linha superior do código para um valor diferente?
  #define PLAYER_WAIT_TIME 2000  

Ou você pode adicionar outro LED, se tiver um ... Para isso, primeiro você precisa reproduzir esta parte do circuito:

O fio laranja aqui irá para qualquer pino não utilizado em seu Arduino (evite 0 e 1 embora)

Em seguida, modifique as seguintes linhas no código:
  byte noPins =pinos de 4 bytes [] ={2, 13, 10, 8};  

se você adicionar um LED no pino 6, o código se tornará
  byte noPins =pinos de 5 bytes [] ={2, 13, 10, 8, 6};  

Uma pequena dica para escrever código Arduino:
  configuração nula () {atraso (3000); Serial.begin (9600); Redefinir(); }  

Coloque um pequeno atraso como a primeira instrução de sua função setup (). É muito fácil fazer o Arduino entrar em um loop infinito ou travá-lo de alguma forma. Se isso acontecer, esse pequeno atraso permite que você reinicie o Arduino e carregue um esboço em branco antes que ele trave novamente. .

Eu finalmente peguei essa pequena ideia e a tornei portátil ...

Se você quiser ver uma ideia muito legal para um jogo semelhante (mas muito mais avançado). Verifique este https://www.instructables.com/id/Lego-Mini-Memory-Game de Peter Kent. Ele fez o jogo no celular com uma interface para um carro Lego. É realmente incrível!

Código

  • Código do jogo de memória
Código do jogo de memória Arduino
Este é o código completo do jogo. Simplesmente copie e cole em seu IDE favorito e faça o upload para o Arduino.
 #define PLAYER_WAIT_TIME 2000 // O tempo permitido entre os pressionamentos de botão - sequência de bytes de 2 segundos [100]; // Armazenamento para o seqüência de bytes de luz curLen =0; // Comprimento atual do sequencebyte inputCount =0; // O número de vezes que o jogador pressionou um botão (correto) em um determinado turno byte lastInput =0; // Última entrada do playerbyte expRd =0; // O LED que deve estar aceso pelo playerbool btnDwn =false; // Usado para verificar se um botão está pressionadobool wait =false; // O programa está esperando que o usuário pressione um botão resetFlag =false; // Usado para indicar ao programa que uma vez que o player perdeu byte soundPin =5; // Byte de saída do alto-falante noPins =4; // Número de botões / LEDs (ao trabalhar nisso, usei apenas 2 LEDs) // Você poderia tornar o jogo mais difícil adicionando uma combinação adicional de LED / botão / resistores. Pinos de byte [] ={2, 13, 10 , 8}; // Pinos de entrada de botão e pinos de saída de LED - altere esses valores se desejar conectar seus botões a outros pinos // O número de elementos deve corresponder a noPins abaixo de long inputTime =0; // Variável de temporizador para o atraso entre as entradas do usuáriovoid setup () {delay (3000); // Isso é para me dar tempo para respirar após a conexão do arduino - pode ser removido se você quiser Serial.begin (9600); // Inicie o monitor serial. Isso também pode ser removido, desde que você remova todas as referências a Serial abaixo de Reset ();} ////// Define todos os pinos como INPUT ou OUTPUT com base no valor de 'dir' /// void setPinDirection (byte dir) {para (byte i =0; i  rápido | número grande -> lento /// flash vazio (freq curto) {setPinDirection (OUTPUT); /// Estamos ativando os LEDS agora para (int i =0; i <5; i ++) {writeAllPins (HIGH); bip (50); atraso (freq); writeAllPins (LOW); atraso (freq); }} ////// Esta função redefine todas as variáveis ​​do jogo para seus valores padrão /// void Reset () {flash (500); curLen =0; inputCount =0; lastInput =0; expRd =0; btnDwn =false; esperar =falso; resetFlag =false;} ////// Usuário perdido /// void Lose () {flash (50); } ////// O arduino mostra ao usuário o que deve ser memorizado /// Também chamado depois de perder para mostrar a você qual foi sua última sequência /// void playSequence () {// Loop através da sequência armazenada e iluminar o apropriado LEDs por sua vez para (int i =0; i  PLAYER_WAIT_TIME) {// Se o jogador demorar mais do que o tempo permitido, DoLoseProcess (); // Tudo está perdido :( return;} if (! BtnDwn) {// expRd =sequence [inputCount]; // Encontre o valor que esperamos do player Serial.print ("Expected:"); // Saída do Monitor Serial - Deve ser removido se você removeu o Serial.begin acima de Serial.println (expRd); // Saída do monitor serial - Deve ser removido se você removeu o Serial.begin acima para (int i =0; i  

Esquemas

simonsays_siKds3Jmk2.fzz

Processo de manufatura

  1. Faça Monitor Ambilight usando Arduino
  2. Jogo Arduino Gyroscope com MPU-6050
  3. Diversão do giroscópio com anel NeoPixel
  4. Jogo Arduino Pong - Tela OLED
  5. Controlador de jogo Arduino
  6. Jogo Arduino Touch Breakout
  7. Pixie:Um relógio de pulso NeoPixel baseado em Arduino
  8. Jogo Pixel Chaser
  9. Jogo Dino automatizado usando arduino
  10. Câmera de vigilância remota móvel