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

Jogo de asteróides com display de matriz de LED MAX72XX

Componentes e suprimentos

Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99 # MAX7219 Display Driver Shield
× 1
SparkFun Botão de pressão 12 mm
× 2
Buzzer
× 1
Breadboard (genérico)
× 1

Sobre este projeto






Este é um jogo simples usando o MAX72XX LED-Matrix como display, dois micro interruptores como botões e uma campainha ativa para um efeito sonoro.

Você é uma nave estelar e deve evitar o contato com os asteróides que caem. O jogo fica mais rápido com o tempo. No final, é exibida uma pontuação que mostra quanto tempo você sobreviveu.

Código

  • código do jogo de asteróides
código do jogo de asteróides Arduino
 / ********************************************** ********** * Este é um jogo simples usando o MAX72XX LED-Matrix. * Você é uma nave estelar e deve evitar o contato com * os asteróides que caem. * * (c) 2018 por Joshua Weßner * * * ************************************* ****************** /// LedControl de Eberhard Fahle // veja:http://wayoda.github.io/LedControl/#include "LedControl.h" / * Agora precisamos de um LedControl para trabalhar. ***** Esses números de pinos provavelmente não funcionarão com o seu hardware ***** o pino 12 está conectado ao DataIn, o pino 11 está conectado ao CLK, o pino 10 está conectado a LOAD Temos apenas um único MAX72XX. * / LedControl lc =LedControl (12,11,10,1); / ******************************** ****************************** * Variáveis ​​globais * / / * atraso entre as atualizações do display * / unsigned long delaytime =1000; / * para exibir a pontuação * / String scoreString; int score; int centenas; String scoreStr; String scoreArr [] ={"", "", ""}; / * micro interruptores para controle * / int pinLeft =2; int pinRight =3; botão longo sem sinal volátilPressed; int buttonDelay =150; // manipula o contato bouncevolatile bool gameOver =false; / * "ritmo" do jogo, em milissegundos * / int tick; int tickCounter =1; / * timestamp * / unsigned long now; / * display * / int ship; / * Posição inicial do navio * / colunas inteiras [] ={0,0,0,0,0,0,0,0}; // 8 colunas, cada int é a linha 1-8.int randomInt; / ********************************* ****************************** * setup * / void setup () {/ * Initializing * / gameOver =false; centenas =0; scoreArr [0] =""; scoreArr [1] =""; scoreArr [2] =""; pontuação =0; tick =300; tickCounter =1; navio =3; agora =milis (); buttonPressed =milis (); randomSeed (analogRead (15)); // melhores números aleatórios para (int i =0; i <8; i ++) colunas [i] =0; // Depuração // Serial.begin (9600); // Serial.print (colunas [0]); / * O MAX72XX está no modo de economia de energia na inicialização, temos que fazer uma chamada de ativação * / lc.shutdown (0, false); / * Defina o brilho para valores médios * / lc.setIntensity (0,1); / * e limpar a exibição * / lc.clearDisplay (0); pinMode (pinLeft, INPUT_PULLUP); pinMode (pinRight, INPUT_PULLUP); / * botão de anexação pressionado para interromper * / attachInterrupt (digitalPinToInterrupt (pinLeft), left, FALLING); attachInterrupt (digitalPinToInterrupt (pinRight), direita, FALLING); } / ************************************************ ************** * manipular botão esquerdo pressionado * / void left () {if (millis () - buttonPressed> buttonDelay) // manipular switch contact bounce {if (ship! =0) enviar--; else ship =7; lc.clearDisplay (0); buttonPressed =milis (); } // após o término do jogo, pressionar o botão reiniciará o jogo if (gameOver ==true) {gameOver =false; configurar(); }} / *********************************************** **** ) ship ++; else ship =0; lc.clearDisplay (0); buttonPressed =milis (); } // após o término do jogo, pressionar o botão reiniciará o jogo if (gameOver ==true) {gameOver =false; configurar(); }} / *********************************************** **************** * loop * / void loop () {if (millis () - agora> tick) {// fazer cada tick // pontuação é:quantos ticks você sobreviveu pontuação ++; agora =milis (); if (tickCounter ==1) {// a cada 4 tique // torna o jogo mais rápido ao longo do tempo tick =tick / 1.02; // escolher aleatoriamente a coluna randomInt =random (0, 8); // se não houver asteróide na coluna, crie um na linha 1. if (colunas [randomInt] ==​​0) {colunas [randomInt] =1; }} if (tickCounter! =4) tickCounter ++; senão tickCounter =1; // fazer para cada coluna para (int i =0; i <8; i ++) {if (colunas [i] ==10) // excluir asteróides quando fora de exibição colunas [i] =0; if (colunas [i]! =0) // faz com que asteróides caiam colunas [i] ++; } lc.clearDisplay (0); } / * escrever para exibir * / // enviar lc.setLed (0, 7, enviar, verdadeiro); // asteróides para (int i =0; i <8; i ++) {if (colunas [i]> 0) lc.setLed (0, colunas [i] -2, i, verdadeiro); lc.setLed (0, colunas [i] -3, i, verdadeiro); } // detecta a colisão do navio com o asteróide if (colunas [navio] ==10 ou colunas [navio] ==9) {lc.clearDisplay (0); // anima a explosão para (int i =0; i <4; i ++) {lc.setLed (0,7, navio + i, verdadeiro); lc.setLed (0,7, ship-i, verdadeiro); lc.setLed (0,7-i, navio + i, verdadeiro); lc.setLed (0,7-i, ship-i, verdadeiro); lc.setLed (0,7-1,5 * i, navio, verdadeiro); // som da explosão sem sinal por muito tempo =millis (); int randomSound =1000; while (millis () - tempo <=250) {randomSound--; tom (9, aleatório (randomSound, 1000)); // altera os parâmetros de random () para sons diferentes} lc.clearDisplay (0); noTone (9); } atraso (500); / * exibir pontuação * / scoreStr =String (pontuação); // obtém dígitos únicos de score int scoreArr [0] =scoreStr.charAt (0); scoreArr [1] =scoreStr.charAt (1); scoreArr [2] =scoreStr.charAt (2); // a matriz só pode exibir até 2 dígitos (até 99) if (score <100) {for (int i =0; i <2; i ++) {if (scoreArr [i] =="0") draw0 ( 1 + i * 4); if (scoreArr [i] =="1") draw1 (1 + i * 4); if (scoreArr [i] =="2") draw2 (1 + i * 4); if (scoreArr [i] =="3") draw3 (1 + i * 4); if (scoreArr [i] =="4") draw4 (1 + i * 4); if (scoreArr [i] =="5") draw5 (1 + i * 4); if (scoreArr [i] =="6") draw6 (1 + i * 4); if (scoreArr [i] =="7") draw7 (1 + i * 4); if (scoreArr [i] =="8") draw8 (1 + i * 4); if (scoreArr [i] =="9") draw9 (1 + i * 4); }} // se a pontuação for> 100, exibir apenas os dois últimos dígitos da pontuação else {for (int i =1; i <3; i ++) {if (scoreArr [i] =="0") draw0 (1+ ( i-1) * 4); if (scoreArr [i] =="1") draw1 (1+ (i-1) * 4); if (scoreArr [i] =="2") draw2 (1+ (i-1) * 4); if (scoreArr [i] =="3") draw3 (1+ (i-1) * 4); if (scoreArr [i] =="4") draw4 (1+ (i-1) * 4); if (scoreArr [i] =="5") draw5 (1+ (i-1) * 4); if (scoreArr [i] =="6") draw6 (1+ (i-1) * 4); if (scoreArr [i] =="7") draw7 (1+ (i-1) * 4); if (scoreArr [i] =="8") draw8 (1+ (i-1) * 4); if (scoreArr [i] =="9") draw9 (1+ (i-1) * 4); } // primeiro dígito da pontuação ("centenas") é exibido como pontos:Um ponto para cada cem. para (int i =1; i <10; i ++) {if (scoreArr [0] ==String (i)) centenas =i; } para (int i =1; i <=centenas; i ++) {lc.setLed (0,0, i-1, verdadeiro); lc.setLed (0,1, i-1, verdadeiro); atraso (200); }} gameOver =true; while (gameOver ==true) {// não faz nada além de esperar pelo botão pressionado}}} ///////////////////////////////// Draw pontuação dígitos /////////////////////////////////////////// void draw1 (posição int) { lc.setColumn (posição 0,0 +, B00001000); lc.setColumn (0,1 + posição, B00011111); } void draw2 (posição interna) {lc.setColumn (posição 0,0 +, B00010111); lc.setColumn (0,1 + posição, B00010101); lc.setColumn (0,2 + posição, B00011101); } void draw3 (posição interna) {lc.setColumn (posição 0,0 +, B00010001); lc.setColumn (0,1 + posição, B00010101); lc.setColumn (0,2 + posição, B00011111); } void draw4 (posição interna) {lc.setColumn (posição 0,0 +, B00011100); lc.setColumn (0,1 + posição, B00000100); lc.setColumn (0,2 + posição, B00011111); } void draw5 (posição interna) {lc.setColumn (posição 0,0 +, B00011101); lc.setColumn (0,1 + posição, B00010101); lc.setColumn (0,2 + posição, B00010111); } void draw6 (posição interna) {lc.setColumn (posição 0,0 +, B00011111); lc.setColumn (0,1 + posição, B00010101); lc.setColumn (0,2 + posição, B00010111); } void draw7 (posição interna) {lc.setColumn (posição 0,0 +, B00010000); lc.setColumn (0,1 + posição, B00010011); lc.setColumn (0,2 + posição, B00011100); } void draw8 (posição interna) {lc.setColumn (posição 0,0 +, B00011111); lc.setColumn (0,1 + posição, B00010101); lc.setColumn (0,2 + posição, B00011111); } void draw9 (posição interna) {lc.setColumn (posição 0,0 +, B00011101); lc.setColumn (0,1 + posição, B00010101); lc.setColumn (0,2 + posição, B00011111); } void draw0 (posição interna) {lc.setColumn (posição 0,0 +, B00011111); lc.setColumn (0,1 + posição, B00010001); lc.setColumn (0,2 + posição, B00011111); } 

Esquemas


Processo de manufatura

  1. Xadrez
  2. Pinball
  3. Futebol
  4. Jogo Arduino Pong - Tela OLED
  5. DIY 37 LED Roulette Game
  6. Jogo Arduino Pong em Matriz 24x16 com MAX7219
  7. Jogo Arduino Nano Tetris em Matriz 16x8 caseira
  8. Joystick Game
  9. Matriz LED + Display da porta do sensor de movimento [Arduino Holiday]
  10. Iluminação LED 8x por som