Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Jeu d'astéroïdes à affichage matriciel LED MAX72XX

Composants et fournitures

Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99# MAX7219 Display Driver Shield
× 1
Interrupteur à bouton-poussoir SparkFun 12mm
× 2
Sonnerie
× 1
Planche à pain (générique)
× 1

À propos de ce projet

Il s'agit d'un jeu simple utilisant le MAX72XX LED-Matrix comme écran, deux micro-interrupteurs comme boutons et un buzzer actif pour un effet sonore.

Vous êtes un vaisseau spatial et vous devez éviter tout contact avec les astéroïdes qui tombent. Le jeu s'accélère avec le temps. À la fin, un score s'affiche indiquant combien de temps vous avez survécu.

Code

  • code du jeu d'astéroïdes
code du jeu astéroïdesArduino
/************************************************ *********** * Il s'agit d'un jeu simple utilisant le MAX72XX LED-Matrix. * Vous êtes un vaisseau spatial et vous devez éviter tout contact avec * les astéroïdes qui tombent. * * (c) 2018 par Joshua Weßner * * * ************************************** *******************///LedControl par Eberhard Fahle// voir :http://wayoda.github.io/LedControl/#include "LedControl.h"/* Maintenant nous avons besoin d'un LedControl avec lequel travailler. ***** Ces numéros de broches ne fonctionneront probablement pas avec votre matériel ***** La broche 12 est connectée au DataIn La broche 11 est connectée au CLK La broche 10 est connectée à LOAD Nous n'avons qu'un seul MAX72XX. */LedControl lc=LedControl(12,11,10,1) ;/************************************ ******************************* * Variables globales */ /* délai entre les mises à jour de l'affichage */unsigned long delaytime=1000 ; /* pour afficher le score */String scoreString;int score;int centaines;String scoreStr;String scoreArr[] ={"" ,"" ,"" };/* micro-interrupteurs pour le contrôle */int pinLeft =2;int pinRight =3;volatile non signé long buttonPressed;int buttonDelay =150; //gérer le contact bouncevolatile bool gameOver =false;/* "rythme" du jeu, en millisecondes */int tick;int tickCounter =1;/* timestamp */unsigned long now;/* display */int ship; /* Position initiale du navire */int colonnes[] ={0,0,0,0,0,0,0,0} ; // 8 colonnes, chaque entier correspond à la ligne 1-8.int randomInt;/************************************ ******************************* * setup */void setup() { /* Initialisation */ gameOver =false; centaines =0 ; scoreArr[0] =""; scoreArr[1] ="" ; scoreArr[2] =""; note =0 ; coche =300 ; tickCounter =1; navire =3 ; maintenant =millis(); boutonAppuyé =millis(); randomSeed(analogRead(15)); // meilleurs nombres aléatoires pour (int i =0; i<8; i++) colonnes[i] =0; // Débogage // Serial.begin(9600); // Serial.print(columns[0]); /* Le MAX72XX est en mode d'économie d'énergie au démarrage, nous devons faire un appel de réveil */ lc.shutdown(0,false); /* Réglez la luminosité sur des valeurs moyennes */ lc.setIntensity(0,1); /* et efface l'affichage */ lc.clearDisplay(0); pinMode(pinLeft, INPUT_PULLUP); pinMode(pinRight, INPUT_PULLUP); /* attacher le bouton appuyer pour interrompre */ attachInterrupt(digitalPinToInterrupt(pinLeft), left, FALLING); attachInterrupt(digitalPinToInterrupt(pinRight), right, FALLING); }/****************************************************** ************** * gérer la pression du bouton gauche */void left(){ if(millis() - buttonPressed> buttonDelay) // gérer le rebond du contact du commutateur { if(ship !=0) bateau--; sinon navire =7 ; lc.clearDisplay(0) ; boutonAppuyé =millis(); } // après la fin du jeu, appuyez sur le bouton pour redémarrer le jeu if(gameOver ==true){ gameOver =false; mettre en place(); }}/****************************************************** *************** * gérer la pression du bouton droit */void right(){ if(millis() - buttonPressed> buttonDelay) // gérer le rebond du contact du commutateur { if(ship !=7 ) navire++ ; sinon navire =0 ; lc.clearDisplay(0) ; boutonAppuyé =millis(); } // après la fin du jeu, appuyez sur le bouton pour redémarrer le jeu if(gameOver ==true){ gameOver =false; mettre en place(); } }/****************************************************** ************* * boucle */void loop() { if(millis() - now> tick){ //faire chaque tick // le score est :combien de ticks vous avez survécu note++ ; maintenant =millis(); if(tickCounter ==1){ //chaque 4ème tick // rend le jeu plus rapide au fil du temps tick =tick/1.02; // choisit au hasard la colonne randomInt =random(0, 8); // si aucun astéroïde n'existe dans la colonne, créez-en un dans la ligne 1. if(columns[randomInt] ==​​0){ column[randomInt] =1; } } if(tickCounter !=4) tickCounter++; sinon tickCounter =1; // faire pour chaque colonne for(int i =0; i<8; i++){ if(columns[i] ==10) // supprimer les astéroïdes lorsqu'il n'y a plus de colonnes d'affichage[i] =0; if(columns[i] !=0) // fait tomber les astéroïdes dans les colonnes[i]++; } lc.clearDisplay(0); } /* écrire pour afficher */ // expédier lc.setLed(0, 7, expédier, true); // astéroïdes for(int i =0; i<8; i++){ if(columns[i]> 0) lc.setLed(0, column[i]-2, i, true); lc.setLed(0, colonnes[i]-3, i, vrai); } // détecte la collision du vaisseau avec l'astéroïde if(columns[ship] ==10 ou column[ship] ==9){ lc.clearDisplay(0); // animer l'explosion for(int i =0; i<4; i++){ lc.setLed(0,7,ship+i,true); lc.setLed(0,7,ship-i,true); lc.setLed(0,7-i,ship+i,true); lc.setLed(0,7-i,ship-i,true); lc.setLed(0,7-1,5*i,navire,vrai); // son d'explosion non signé longtemps =millis(); int randomSound=1000 ; while(millis() - temps <=250) { randomSound--; tone(9, random(randomSound, 1000)); // change les paramètres de random() pour un son différent } lc.clearDisplay(0); pas de tonalité(9) ; } délai (500); /* afficher le score */ scoreStr =String(score); // récupère les chiffres du score int scoreArr[0] =scoreStr.charAt(0); scoreArr[1] =scoreStr.charAt(1) ; scoreArr[2] =scoreStr.charAt(2) ; // la matrice ne peut afficher que jusqu'à 2 chiffres (jusqu'à 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) ; } } // si le score est> 100, n'affiche que les deux derniers chiffres du score 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) ; } // le premier chiffre du score ("cents") est affiché sous forme de points :un point pour chaque centaine. for(int i =1; i<10; i++){ if(scoreArr[0] ==String(i)) des centaines =i; } for(int i =1; i <=centaines; i++){ lc.setLed(0,0,i-1,true); lc.setLed(0,1,i-1,true); retard (200); } } gameOver =vrai; while(gameOver ==true){ // ne rien faire d'autre que d'attendre que le bouton appuie sur } } }//////////////////////////// Draw chiffres du score ////////////////////////////////////////////////////////////////////////// void draw1(int position){ lc.setColumn(0,0+position,B00001000); lc.setColumn(0,1+position,B00011111); }void draw2(int position){ lc.setColumn(0,0+position,B00010111); lc.setColumn(0,1+position,B00010101); lc.setColumn(0,2+position,B00011101); }void draw3(int position){ lc.setColumn(0,0+position,B00010001) ; lc.setColumn(0,1+position,B00010101); lc.setColumn(0,2+position,B00011111); }void draw4(int position){ lc.setColumn(0,0+position,B00011100); lc.setColumn(0,1+position,B00000100); lc.setColumn(0,2+position,B00011111); }void draw5(int position){ lc.setColumn(0,0+position,B00011101); lc.setColumn(0,1+position,B00010101); lc.setColumn(0,2+position,B00010111); }void draw6(int position){ lc.setColumn(0,0+position,B00011111); lc.setColumn(0,1+position,B00010101); lc.setColumn(0,2+position,B00010111); }void draw7(int position){ lc.setColumn(0,0+position,B00010000); lc.setColumn(0,1+position,B00010011); lc.setColumn(0,2+position,B00011100); }void draw8(int position){ lc.setColumn(0,0+position,B00011111); lc.setColumn(0,1+position,B00010101); lc.setColumn(0,2+position,B00011111); }void draw9(int position){ lc.setColumn(0,0+position,B00011101); lc.setColumn(0,1+position,B00010101); lc.setColumn(0,2+position,B00011111); }void draw0(int position){ lc.setColumn(0,0+position,B00011111); lc.setColumn(0,1+position,B00010001) ; lc.setColumn(0,2+position,B00011111); }

Schémas


Processus de fabrication

  1. Échecs
  2. Flipper
  3. Football
  4. Jeu Arduino Pong - Écran OLED
  5. Jeu de roulette DIY 37 LED
  6. Jeu Arduino Pong sur matrice 24x16 avec MAX7219
  7. Jeu Arduino Nano Tetris sur matrice 16x8 maison
  8. Jeu de manette
  9. Affichage de porte à matrice LED + détecteur de mouvement [Arduino Holiday]