Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

MAX72XX LED-matrixweergave asteroïden-game

Componenten en benodigdheden

Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99# MAX7219 Display Driver Shield
× 1
SparkFun Drukknopschakelaar 12 mm
× 2
Zoemer
× 1
Broodplank (algemeen)
× 1

Over dit project

Dit is een eenvoudig spel met de MAX72XX LED-Matrix als display, twee microschakelaars als knoppen en een actieve zoemer voor een geluidseffect.

Je bent een sterrenschip en je moet contact met de naar beneden vallende asteroïden vermijden. Het spel wordt in de loop van de tijd sneller. Aan het einde wordt een score weergegeven die laat zien hoe lang je hebt overleefd.

Code

  • spelcode asteroïden
asteroïden spelcodeArduino
/************************************************** ********** * Dit is een eenvoudig spel dat gebruik maakt van de MAX72XX LED-Matrix. * Je bent een sterrenschip en je moet contact vermijden met * de asteroïden die naar beneden vallen. * * (c) 2018 door Joshua Weßner * * * ************************************ ****************///LedControl door Eberhard Fahle// zie:http://wayoda.github.io/LedControl/#include "LedControl.h"/* Nu we hebben een LedControl nodig om mee te werken. ***** Deze pinnummers werken waarschijnlijk niet met uw hardware ***** pin 12 is verbonden met de DataIn pin 11 is verbonden met de CLK pin 10 is verbonden met LOAD We hebben maar een enkele MAX72XX. */LedControl lc=LedControl(12,11,10,1);/*********************************** ************************** * Globale variabelen */ /* vertraging tussen updates van het display */unsigned long delaytime=1000; /* om de score weer te geven */String scoreString;int score;int honderden;String scoreStr;String scoreArr[] ={"" ,"" ,"" };/* microschakelaars voor controle */int pinLeft =2;int pinRight =3;vluchtige unsigned long buttonPressed;int buttonDelay =150; //handle contact bouncevolatile bool gameOver =false;/* "ritme" van het spel, im milliseconden */int tick;int tickCounter =1;/* tijdstempel */unsigned long now;/* display */int ship; /* Initiële scheepspositie */int kolommen[] ={0,0,0,0,0,0,0,0}; // 8 kolommen, elke int is rij 1-8.int randomInt;/********************************* ************************** * setup */void setup() { /* Initialiseren */ gameOver =false; honderden =0; scoreArr[0] =""; scoreArr[1] =""; scoreArr[2] =""; score =0; vinkje =300; tickCounter =1; schip =3; nu =millis(); knop ingedrukt =millis(); randomSeed(analogRead(15)); // betere willekeurige getallen voor (int i =0; i<8; i++) kolommen [i] =0; // Foutopsporing // Serial.begin (9600); // Serial.print (kolommen [0]); /* De MAX72XX staat in de energiebesparende modus bij het opstarten, we moeten een wake-up call doen */ lc.shutdown(0,false); /* Stel de helderheid in op gemiddelde waarden */ lc.setIntensity(0,1); /* en wis het scherm */ lc.clearDisplay(0); pinMode (pinLinks, INPUT_PULLUP); pinMode (pinRight, INPUT_PULLUP); /* druk op de bevestigingsknop voor onderbrekingen */ attachInterrupt(digitalPinToInterrupt(pinLeft), left, FALLING); attachInterrupt(digitalPinToInterrupt(pinRight), rechts, FALLING); }/************************************************** *********** * handvat linker knop indrukken */void left(){ if(millis() - buttonPressed> buttonDelay) // handvat schakelaar contact bounce { if(ship!=0) schip--; anders schip =7; lc.clearDisplay(0); knop ingedrukt =millis(); } // nadat het spel voorbij is, wordt het spel herstart als (gameOver ==true){ gameOver =false; opstelling(); }}/************************************************** *************** * handvat rechter knop indrukken */void right(){ if(millis() - buttonPressed> buttonDelay) // handvat schakelaar contact bounce { if(ship!=7 ) schip++; anders schip =0; lc.clearDisplay(0); knop ingedrukt =millis(); } // nadat het spel voorbij is, wordt het spel herstart als (gameOver ==true){ gameOver =false; opstelling(); } }/************************************************** *************** * loop */void loop() { if(millis() - now> tick){ //do every tick // score is:hoeveel ticks je hebt overleefd scoren++; nu =millis(); if(tickCounter ==1){ //elke 4e tick // maak het spel in de loop van de tijd sneller tick =tick/1.02; // kies willekeurig kolom randomInt =willekeurig (0, 8); // als er geen asteroïde in kolom bestaat, maak er dan een in rij 1. if(columns[randomInt] ==​​0){ columns[randomInt] =1; } } if(tickCounter!=4) tickCounter++; anders tickCounter =1; // doe voor elke kolom for(int i =0; i<8; i++){ if(columns[i] ==10) // verwijder asteroïden wanneer ze uit de weergavekolommen zijn [i] =0; if (kolommen [i] !=0) // laat asteroïden naar beneden vallen kolommen [i]++; } lc.clearDisplay(0); } /* schrijf naar weergave */ // ship lc.setLed(0, 7, ship, true); // asteroïden voor (int i =0; i <8; i ++) {if (kolommen [i]> 0) lc.setLed (0, kolommen [i] -2, i, waar); lc.setLed(0, kolommen[i]-3, i, true); } // detecteer botsing van schip met asteroïde if (kolommen [schip] ==10 of kolommen [schip] ==9) { lc.clearDisplay (0); // animeer explosie voor (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,schip+i,true); lc.setLed(0,7-i,schip-i,true); lc.setLed(0,7-1,5*i,schip,waar); // explosiegeluid unsigned long time =millis(); int willekeurigSound=1000; while(millis() - tijd <=250) { randomSound--; toon (9, willekeurig (willekeurig geluid, 1000)); // verander de parameters van random() voor ander geluid} lc.clearDisplay(0); geen toon (9); } vertraging (500); /* toon score */ scoreStr =String (score); // haal enkele cijfers van score int scoreArr[0] =scoreStr.charAt(0); scoreArr[1] =scoreStr.charAt(1); scoreArr[2] =scoreStr.charAt(2); // matrix kan maximaal 2 cijfers weergeven (maximaal 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); } } // als de score> 100 is, alleen de laatste twee cijfers van de score weergeven 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); } // eerste cijfer van de score ("honderden") wordt weergegeven als punten:één punt voor elke honderd. for(int i =1; i<10; i++){ if(scoreArr[0] ==String(i)) honderden =i; } for(int i =1; i <=honderden; i++){ lc.setLed(0,0,i-1,true); lc.setLed(0,1,i-1,true); vertraging (200); } } gameOver =waar; while(gameOver ==true){ // doe niets anders dan wachten tot de knop wordt ingedrukt } } }///////////////////////////// Draw score cijfers //////////////////////////////////////////void draw1(int position){ lc.setColumn(0,0+positie,B00001000); lc.setColumn(0,1+positie,B00011111); }void draw2(int position){ lc.setColumn(0,0+position,B00010111); lc.setColumn(0,1+positie,B00010101); lc.setColumn(0,2+positie,B00011101); }void draw3(int position){ lc.setColumn(0,0+position,B00010001); lc.setColumn(0,1+positie,B00010101); lc.setColumn(0,2+positie,B00011111); }void draw4(int position){ lc.setColumn(0,0+position,B00011100); lc.setColumn(0,1+positie,B00000100); lc.setColumn(0,2+positie,B00011111); }void draw5(int position){ lc.setColumn(0,0+position,B00011101); lc.setColumn(0,1+positie,B00010101); lc.setColumn(0,2+positie,B00010111); }void draw6(int position){ lc.setColumn(0,0+position,B00011111); lc.setColumn(0,1+positie,B00010101); lc.setColumn(0,2+positie,B00010111); }void draw7(int position){ lc.setColumn(0,0+position,B00010000); lc.setColumn(0,1+positie,B00010011); lc.setColumn(0,2+positie,B00011100); }void draw8(int position){ lc.setColumn(0,0+position,B00011111); lc.setColumn(0,1+positie,B00010101); lc.setColumn(0,2+positie,B00011111); }void draw9(int position){ lc.setColumn(0,0+position,B00011101); lc.setColumn(0,1+positie,B00010101); lc.setColumn(0,2+positie,B00011111); }void draw0(int position){ lc.setColumn(0,0+position,B00011111); lc.setColumn(0,1+positie,B00010001); lc.setColumn(0,2+positie,B00011111); }

Schema's


Productieproces

  1. Schaken
  2. Flipperkast
  3. Voetbal
  4. Arduino Pong Game - OLED-scherm
  5. DIY 37 LED Roulette Game
  6. Arduino Pong Game op 24x16 Matrix met MAX7219
  7. Arduino Nano Tetris-spel op zelfgemaakte 16x8 Matrix
  8. Joystick-spel
  9. LED-matrix + bewegingssensor deurdisplay [Arduino Holiday]
  10. 8x LED-verlichting door geluid
  11. Arduino Quadruped