DIY herná konzola využívajúca Arduino: 4 kroky
DIY herná konzola využívajúca Arduino: 4 kroky
Anonim
Image
Image

V tomto tutoriále vám ukážem, ako si môžete vyrobiť hernú konzolu pomocou Arduino nano. Ak teda chcete vidieť podrobné video, pozrite sa na to na mojom kanáli youtube

Zásoby

Ak nakúpite prostredníctvom týchto odkazov, pomôže mi to poskytnúť vám ďalšie projekty

1) ARDUINO NANO2) OLED DISPLEJ

Krok 1: Spájkovanie všetkých komponentov

Užite si to!!!
Užite si to!!!

Po získaní všetkých komponentov teda musíte všetky komponenty spájkovať podľa schémy zapojenia

Krok 2: Usporiadajte všetky veci na miestach

Po spájkovaní všetko usporiadajte všetky súčasti takto, aby to vyzeralo pekne

Krok 3: Programovanie

Takže konečne po správnom vykonaní všetkých krokov je čas nahrať nižšie uvedený kód do Arduina

#zahrnúť

#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; konštanta cH = 523; konštanta cSH = 554; konštanta dH = 587; konštanta dSH = 622; konštanta eH = 659; konštanta fH = 698; konšt. int fSH = 740; konšt. int gH = 784; konšt. int gSH = 830; konštanta aH = 880; konšt. nepodpísaný znak PROGMEM dioda16 = {0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xF, 0xF, 0xF, 0xF, 0xF, 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, 0x7, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBx, 0xFC,, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x06, 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 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xF, 0x0, 0xA 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0x0 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, búrka, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (BIELY); 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 („Smrť“); display.setFont (); display.setCursor (65, 42); display.println („hviezdička“); display.setTextSize (0); display.setCursor (65, 55); display.println ("od VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); pípnutie (a, 500); pípnutie (a, 500); pípnutie (a, 500); pípnutie (f, 350); píp (cH, 150); pípnutie (a, 500); pípnutie (f, 350); píp (cH, 150); pípnutie (a, 650); oneskorenie (500); oneskorenie (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; // rýchlosť odrážky 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; nepodpísané dlhé pocetno = 0; nepodpísané dlhé odabrano = 0; nepodpísaný dlhý trenutno = 0; bez znamienka dlhé nivovrije = 0; int poz = 30; void loop () {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 = náhodný (400, 1200); poc = 1; } trenutno = millis (); // nivoi if ((trenutno-nivovrije)> 50 000) {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 = poziceja-8 && ry <= pozíciaja+8) if (rx4) {rx = 95; ry = -50; tón (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozíciaja-8 && ry2 <= pozíciaja+8) if (rx24) {rx2 = -50; ry2 = -50; tón (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozíciaja-8 && ry3 <= pozíciaja+8) if (rx34) {rx3 = -50; ry3 = -50; tón (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozíciaja-8 && ry4 <= pozíciaja+8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; tón (9, 100, 100); zivoti = zivoti-1; } if (rx4 <1) {ispaljeno = 0; rx4 = 200;} if (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {tón (9, 200, 300); oneskorenie (300); tón (9, 250, 200); oneskorenie (200); tón (9, 300, 300); oneskorenie (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (BIELY); display.setCursor (7, 10); display.println („HRA NAD!“); display.setTextSize (1); display.setCursor (7, 30); display.println ("skóre:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("úroveň:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("čas (s):"); display.setCursor (60, 50); display.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {tón (9, 280, 300); oneskorenie (300); tón (9, 250, 200); oneskorenie (200); tón (9, 370, 300); oneskorenie (300); ponovo (); }}} void ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; ísť = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; bodovi = 0; brzina = 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 () {// Načítať referenciu 1,1 V oproti AVcc // nastaviť referenciu na Vcc a meranie na internú referenciu 1,1 V #ak je definovaná (_ AVR_ATmega32U4_) || definované (_ AVR_ATmega1280_) || definované (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif definované (_AVR_ATtiny24_) || definované (_ AVR_ATtiny44_) || definované (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif definované (_AVR_ATtiny25_) || definované (_ AVR_ATtiny45_) || definované (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif oneskorenie (2); // Počkajte, kým Vref vyrovná ADCSRA | = _BV (ADSC); // Spustite konverziu while (bit_is_set (ADCSRA, ADSC)); // meranie nízkeho uint8_t = ADCL; // najskôr si musí prečítať ADCL - potom uzamkne ADCH uint8_t high = ADCH; // odomkne obidva dlhý výsledok = (vysoký << 8) | nízka; výsledok = 1125300L / výsledok; // Vypočítajte Vcc (v mV); 1125300 = 1,1*1023*1000 návratový výsledok; // Vcc v milivoltoch} neplatné pípnutie (int note, int duration) {// Play tone on buzzerPin tone (9, note, duration); oneskorenie (trvanie); noTone (9); oneskorenie (50); }

Krok 4: Užite si to !!

Gratulujem Nakoniec ste to urobili, takže ak sa vám to páčilo, prihláste sa na odber môjho kanála YouTube