DIY-Spielekonsole mit Arduino - Gunook
DIY-Spielekonsole mit Arduino - Gunook
Anonim
Image
Image

In diesem Tutorial zeige ich Ihnen, wie Sie mit Arduino Nano eine Spielkonsole erstellen können. Wenn du also ein detailliertes Video dazu sehen möchtest, dann schau es dir auf meinem YouTube-Kanal an

Lieferungen

Wenn Sie über diese Links kaufen, hilft es mir, Ihnen mehr Projekte zu geben

1) ARDUINO NANO2) OLED-DISPLAY3) DRUCKTASTEN4) KABEL

Schritt 1: Löten aller Komponenten

Genießen!!!
Genießen!!!

Nachdem Sie alle Komponenten erhalten haben, müssen Sie alle Komponenten wie in diesem Schaltplan gezeigt verlöten

Schritt 2: Ordnen Sie alle Dinge an Orten an

Nach dem Löten alles so anordnen, dass es schön aussieht

Schritt 3: Programmierung

Nachdem Sie alle Schritte richtig ausgeführt haben, ist es nun an der Zeit, den folgenden Code auf Arduino hochzuladen

#enthalten

#include #include #include #include //#include #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); const int c = 261; const int d = 294; const int e = 329; const int f = 349; const int g = 391; const int gS = 415; const int a = 440; const int aS = 455; const int b = 466; const int cH = 523; const int cSH = 554; const int dH = 587; const int dSH = 622; const int eH = 659; const int fH = 698; const int fSH = 740; const int gH = 784; const int gSH = 830; const int aH = 880; const unsigned char PROGMEM dioda16 = { 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xC.x, 0, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00 }; const unsigned char PROGMEM Storm = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xFC, 0x1F, 0xFA01, 0x1F, 0xFA, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x.0x,01, 0xC0, 0x03, 0x06, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xF8, 0x00, 0x00, 0x1D, 0xC0, 0x03, 0x70, 0x00, 0x80, 0x0C, 0x60, 0x05, 0xB0, 0x07, 0xF0, 0x08, 0x90, 0x09, 0x10, 0x1F, 0xF8, 0x09, 0xD0, 0x0 0x, 0x90, 0x09, 0x10, 0x1F, 0xF8, 0x09, 0xD0, 0x0 0x, 0x90, 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x00, 0x10 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA00, 0x 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0xF00, 0x00, 0xF8, 0x00, 0x00}; Void setup () { PinMode (3, INPUT_PULLUP); pinMode(12, INPUT_PULLUP); pinMode(11, INPUT_PULLUP); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); display.clearDisplay(); display.setTextSize(0); display.drawBitmap(6, 11, Sturm, 48, 48, 1); display.setFont(&FreeSans9pt7b); display.setTextColor (WEISS); display.setCursor(65, 14); display.println("xWing"); display.setFont(); display.setCursor(65, 17); display.setTextSize(0); display.println("vs"); display.setCursor(0, 0); float voltaza=readVcc()/1000; display.println(voltaza);; display.setFont(&FreeSans9pt7b); display.setCursor(65, 39); display.println("Tod"); display.setFont(); display.setCursor(65, 42); display.println("Stern"); display.setTextSize(0); display.setCursor(65, 55); display.println("von VRAJ"); display.setCursor(65, 20); display.display(); display.setFont(); Signalton (a, 500); Signalton (a, 500); Signalton (a, 500); Signalton (f, 350); Piepton (cH, 150); Signalton (a, 500); Signalton (f, 350); Piepton (cH, 150); Signalton (a, 650); Verzögerung (500); Verzögerung (500); } int metx=0; int mety=0; int postoji=0; int nep=8; int smjer=0; int go=0; int rx=95; int ry=0; int rx2=95; int ry2=0; int rx3=95; int ry3=0; int bodovi=0; int brzina = 3; // Geschossgeschwindigkeit Int bkugle = 1; int najmanja=600; int najveca=1200; int promjer=10; int rx4=95; int ry4=0; int zivoti=5; int poc=0; int ispaljeno=0; int nivo=1; int Centar=95; unsigned long pocetno=0; unsigned long odabrano=0; unsigned long trenutno=0; unsigned long nivovrije=0; int poz=30; Void Schleife () { if (go = = 0) { Display.clearDisplay (); display.drawPixel(50, 30, 1); display.drawPixel(30, 17, 1); display.drawPixel(60, 18, 1); display.drawPixel(55, 16, 1); display.drawPixel(25, 43, 1); display.drawPixel(100, 43, 1); display.drawPixel(117, 52, 1); display.drawPixel(14, 49, 1); display.drawPixel(24, 24, 1); display.drawPixel(78, 36, 1); display.drawPixel(80, 57, 1); display.drawPixel(107, 11, 1); display.drawPixel(150, 11, 1); display.drawPixel(5, 5, 1); display.drawPixel(8, 7, 1); display.drawPixel(70, 12, 1); display.drawPixel(10, 56, 1); display.drawPixel(70, 25, 1); if(poc==0){ pocetno=millis(); odabrano = zufällig (400, 1200); poc=1; } trenutno=millis(); //nivoi if((trenutno-nivovrije)>50000) {nivovrije=trenutno; nivo=nivo+1; brzina=brzina+1; //brizna neprijateljevog metka if (nivo % 2 == 0) { bkugle=bkugle+1; promjer=promjer-1; } najmanja=najmanja-50; najveca=najveca-50; } if ((odabrano + pocetno) 0) { display.drawCircle (rx, ry, 2, 1); rx=rx-brzina;} if(ispaljeno>1) {display.drawCircle(rx2, ry2, 1, 1); rx2 = rx2-brzina;} if (ispaljeno> 2) { display.drawCircle (rx3, ry3, 4, 1); rx3=rx3-brzina;} if(ispaljeno>3) {display.drawCircle(rx4, ry4, 2, 1); rx4=rx4-brzina;} if(digitalRead(12)==0 && poz>=2){ poz=poz-2;} if(digitalRead(11)==0&& poz128)postoji=0; if(smjer==0){ nep=nep+bkugle;} else {nep=nep-bkugle;} if(nep>=(64-promjer)) smjer=1; if(nep=nep-promjer && mety(centar-promjer)&&metx=pozicija-8 && ry<=pozicija+8) if(rx4) { rx=95; ry=-50; Ton (9, 100, 100); zivoti=zivoti-1; } if(ry2>=pozicija-8 && ry2<=pozicija+8) if(rx24) {rx2=-50; ry2=-50; Ton (9, 100, 100); zivoti=zivoti-1; } if(ry3>=pozicija-8 && ry3<=pozicija+8) if(rx34) { rx3=-50; ry3=-50; Ton (9, 100, 100); zivoti=zivoti-1; } if(ry4>=pozicija-8 && ry4<=pozicija+8) if(rx44) { rx4=200; ry4=-50; ispaljeno=0; Ton (9, 100, 100); zivoti=zivoti-1; aufrechtzuerhalten. Wenn (rx4 < 1) { ispaljeno = 0; rx4=200;} if(zivoti==0) go=1; } if (go = = 1) { if (zivoti = = 0) { Ton (9, 200, 300); Verzögerung (300); Ton (9, 250, 200); Verzögerung (200); Ton (9, 300, 300); Verzögerung (300); zivoti=5; } display.clearDisplay(); display.setFont(); display.setTextSize(2); display.setTextColor (WEISS); display.setCursor(7, 10); display.println("GAME OVER!"); display.setTextSize(1); display.setCursor(7, 30); display.println("Score:"); display.setCursor(44, 30); display.println(bodovi); display.setCursor(7, 40); display.println("level:"); display.setCursor(44, 40); display.println(nivo); display.setCursor(7, 50); display.println("Zeit(en):"); display.setCursor(60, 50); display.println(trenutno/1000); display.display(); if (digitalRead (3) = = 0) { Ton (9, 280, 300); Verzögerung (300); Ton (9, 250, 200); Verzögerung (200); Ton (9, 370, 300); Verzögerung (300); ponovo(); }}} Void ponovo () {metx = 0; mety=0; Postoji=0; nep = 8; smjer=0; gehen=0; rx=95; ry=0; rx2=95; ry2=0; rx3=95; ry3=0; bodovi=0; Brsina = 3; //brizna neprijateljevog metka bkugle=1; najmanja=600; najveca=1200; promjer=12; rx4=95; ry4=0; zivoti=5; poc=0; ispaljeno=0; nivo=1; pocetno=0; odabrano=0; trenutno=0; nivovrije=0; } long readVcc () { // 1,1V-Referenz gegen AVcc lesen // Referenz auf Vcc und Messung auf interne 1,1V-Referenz setzen #wenn definiert (_AVR_ATmega32U4_) || definiert(_AVR_ATmega1280_) || definiert(_AVR_ATmega2560_) ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif definiert (_AVR_ATtiny24_) || definiert(_AVR_ATtiny44_) || definiert(_AVR_ATtiny84_) ADMUX = _BV(MUX5) | _BV(MUX0); #elif definiert (_AVR_ATtiny25_) || definiert(_AVR_ATtiny45_) || definiert(_AVR_ATtiny85_) ADMUX = _BV(MUX3) | _BV(MUX2); #else ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #endif Verzögerung(2); // Warten, bis Vref einschwingt ADCSRA |= _BV(ADSC); // Konvertierung starten while (bit_is_set(ADCSRA, ADSC)); // Messung von uint8_t low = ADCL; // muss zuerst ADCL lesen - dann wird ADCH gesperrt uint8_t high = ADCH; // entsperrt beide long result = (high<<8) | niedrig; Ergebnis = 1125300L / Ergebnis; // Vcc berechnen (in mV); 1125300 = 1,1*1023*1000 Rückgabeergebnis; // Vcc in Millivolt aufrechtzuerhalten. Void Beep (int Note, Int Dauer) {// Ton auf BuzzerPin Tone (9, Note, Dauer) abspielen; Verzögerung (Dauer); kein Ton(9); Verzögerung (50); }

Schritt 4: Genießen Sie !

Herzliche Glückwünsche ? Du hast es endlich geschafft, wenn es dir gefallen hat, dann abonniere meinen Youtube-Kanal