Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

MAX72XX LED-Matrix-Display-Asteroiden-Spiel

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99# MAX7219 Display Driver Shield
× 1
SparkFun Drucktastenschalter 12 mm
× 2
Summer
× 1
Breadboard (generisch)
× 1

Über dieses Projekt

Dies ist ein einfaches Spiel mit der MAX72XX LED-Matrix als Display, zwei Mikroschaltern als Tasten und einem aktiven Summer für einen Soundeffekt.

Sie sind ein Sternenschiff und müssen den Kontakt mit den herunterfallenden Asteroiden vermeiden. Das Spiel wird mit der Zeit schneller. Am Ende wird eine Punktzahl angezeigt, die anzeigt, wie lange Sie überlebt haben.

Code

  • Asteroiden-Spielcode
Asteroiden-SpielcodeArduino
/************************************************ ********* * Dies ist ein einfaches Spiel mit der MAX72XX LED-Matrix. * Du bist ein Sternenschiff und musst den Kontakt * mit den herunterfallenden Asteroiden vermeiden. * * (c) 2018 von Joshua Weßner * * * ************************************* ***************** ///LedControl von Eberhard Fahle// siehe:http://wayoda.github.io/LedControl/#include "LedControl.h"/* Jetzt Wir brauchen eine LedControl, um damit zu arbeiten. ***** Diese Pin-Nummern funktionieren wahrscheinlich nicht mit Ihrer Hardware ***** Pin 12 ist mit dem DataIn verbunden Pin 11 ist mit dem CLK verbunden Pin 10 ist mit LOAD verbunden Wir haben nur einen einzigen MAX72XX. */LedControl lc=LedControl(12,11,10,1);/************************************ ***************************** * Globale Variablen */ /* Verzögerung zwischen Aktualisierungen der Anzeige */unsigned long delaytime=1000; /* um die Punktzahl anzuzeigen */String scoreString;int score;int Hunderter;String scoreStr;String scoreArr[] ={"" ,"" ,"" };/* Mikroschalter zur Steuerung */int pinLeft =2;int pinRight =3;flüchtiger unsignierter langer ButtonPressed;int buttonDelay =150; //handle contact bouncevolatile bool gameOver =false;/* "Rhythmus" des Spiels, im Millisekunden */int tick;int tickCounter =1;/* timestamp */unsigned long now;/* display */int ship; /* Anfängliche Schiffsposition */int column[] ={0,0,0,0,0,0,0,0}; // 8 Spalten, jedes Int ist Zeile 1-8.int randomInt;/************************************ ***************************** * setup */void setup() { /* Initialisieren */ gameOver =false; Hunderte =0; scoreArr[0] =""; scoreArr[1] =""; scoreArr[2] =""; Punktzahl =0; Häkchen =300; TickZähler =1; Schiff =3; jetzt =millis(); buttonPressed =millis(); randomSeed (analogRead (15)); // bessere Zufallszahlen for(int i =0; i<8; i++) column[i] =0; // Debugging // Serial.begin (9600); // Serial.print (Spalten [0]); /* Der MAX72XX befindet sich beim Start im Energiesparmodus, wir müssen einen Weckruf ausführen */ lc.shutdown(0,false); /* Helligkeit auf mittlere Werte einstellen */ lc.setIntensity(0,1); /* und Anzeige löschen */ lc.clearDisplay(0); pinMode (pinLeft, INPUT_PULLUP); pinMode (pinRight, INPUT_PULLUP); /* Button-Presse an Interrupts anhängen */ attachInterrupt(digitalPinToInterrupt(pinLeft), left, FALLING); attachInterrupt(digitalPinToInterrupt(pinRight), rechts, FALLING); }/**************************************************** ************** * linke Taste drücken drücken */void left () { if (millis ( - buttonPressed> buttonDelay) // Griffschalterkontaktprellen { if (ship ! =0) Schiff--; sonst Schiff =7; lc.clearDisplay(0); buttonPressed =millis(); } // Nach Spielende wird das Spiel durch Drücken der Taste neu gestartet if(gameOver ==true){ gameOver =false; installieren(); }}/************************************************ ************** * rechte Taste drücken */void right () { if(millis() - buttonPressed> buttonDelay) // Handle Schalterkontakt Prellen { if(ship!=7 ) Schiff++; sonst Schiff =0; lc.clearDisplay(0); buttonPressed =millis(); } // Nach Spielende wird das Spiel durch Drücken der Taste neu gestartet if(gameOver ==true){ gameOver =false; installieren(); } }/************************************************ ************** * loop */void loop() { if(millis() - now> tick){ //mach jeden Tick // Score ist:wie viele Ticks du überlebt hast Punktzahl++; jetzt =millis(); if(tickCounter ==1){//jeder 4. Tick // Spiel schneller machen tick =tick/1.02; // Spalte zufällig auswählen randomInt =random(0, 8); // Wenn kein Asteroid in Spalte existiert, erstellen Sie einen in Zeile 1. if(columns[randomInt] ==​​0){ column[randomInt] =1; } } if(tickCounter !=4) tickCounter++; sonst tickCounter =1; // für jede Spalte tun for(int i =0; i<8; i++){ if(columns[i] ==10) // Asteroiden löschen, wenn keine Anzeigespalten vorhanden sind[i] =0; if(columns[i] !=0) // Asteroiden nach unten fallen lassen column[i]++; } lc.clearDisplay(0); } /* in Anzeige schreiben */ // ship lc.setLed(0, 7, ship, true); // Asteroiden for(int i =0; i<8; i++){ if(columns[i]> 0) lc.setLed(0, column[i]-2, i, true); lc.setLed(0, Spalten[i]-3, i, wahr); } // Kollision eines Schiffes mit einem Asteroiden erkennen if(columns[ship] ==10 or column[ship] ==9) {lc.clearDisplay(0); // Explosion animieren 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,ship,true); // Explosionsgeräusch unsigned long time =millis (); int randomSound=1000; while(millis() - time <=250) { randomSound--; Ton (9, zufällig (zufälliger Ton, 1000)); // ändere die Parameter von random() für verschiedene Sounds} lc.clearDisplay(0); kein Ton(9); } Verzögerung (500); /* Punktzahl anzeigen */ scoreStr =String(Score); // einzelne Ziffern aus dem Ergebnis abrufen int scoreArr[0] =scoreStr.charAt(0); scoreArr[1] =scoreStr.charAt(1); scoreArr[2] =scoreStr.charAt(2); // Matrix kann nur bis zu 2 Stellen anzeigen (bis zu 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); } } // wenn die Punktzahl> 100 ist, nur die letzten beiden Stellen der Punktzahl anzeigen 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); } // Die erste Ziffer der Punktzahl ("Hunderte") wird als Punkte angezeigt:Ein Punkt pro Hundert. for(int i =1; i<10; i++){ if(scoreArr[0] ==String(i)) Hunderte =i; } for(int i =1; i <=Hunderte; i++) {lc.setLed(0,0,i-1,true); lc.setLed(0,1,i-1,true); Verzögerung (200); } } gameOver =true; while(gameOver ==true){ // Nichts tun außer auf Tastendruck warten } } }//////////////////////////// Draw Punktzahl ////////////////////////////////////////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); }

Schaltpläne


Herstellungsprozess

  1. Schach
  2. Flipper
  3. Fußball
  4. Arduino Pong-Spiel - OLED-Display
  5. DIY 37 LED-Roulette-Spiel
  6. Arduino-Pong-Spiel auf einer 24x16-Matrix mit MAX7219
  7. Arduino Nano Tetris-Spiel auf hausgemachter 16x8-Matrix
  8. Joystick-Spiel
  9. LED-Matrix + Bewegungssensor-Türanzeige [Arduino Holiday]
  10. 8x LED-Beleuchtung mit Ton