Igralna konzola DIY z uporabo Arduina: 4 koraki
Igralna konzola DIY z uporabo Arduina: 4 koraki
Anonim
Image
Image

V tej vadnici vam bom pokazal, kako lahko z igralno konzolo Arduino nano naredite igralno konzolo. Če si želite ogledati podroben videoposnetek, si ga oglejte na mojem youtube kanalu

Zaloge

Če kupujete na teh povezavah, mi boste pomagali dati več projektov

1) ARDUINO NANO2) OLED ZASLON 3) POKRITI GUMBE 4) ŽICE

1. korak: Spajkanje vseh komponent

Uživajte !!!
Uživajte !!!

Torej, ko dobite vse komponente, morate spajkati vse komponente, kot je prikazano na tem vezju

2. korak: Vse stvari razporedite po mestih

Po spajkanju vse sestavite tako, da dobi lep videz

3. korak: programiranje

Torej, končno po pravilnem upoštevanju vseh korakov je čas, da spodnjo kodo naložite v Arduino

#vključi

#include #include #include #include // #include #define OLED_RESET 4 Zaslon Adafruit_SSD1306 (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, 0xF, 0xF, 0x7F, 0xF, 0xFF, 0x7F, 0xF, 0xF, 0x7F, 0xF, 0xF, 0x7F, 0xF, 0x00, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00}; const unsigned char PROGMEM nevihta = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBFA, 0x,, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x0, 0x0, 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, 0x0C, 0x90, 0x00, 0x0B, 0x90, 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x00, 0x10, 0x0 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x0 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA0 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0x00, 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, vihar, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (BELO); display.setCursor (65, 14); display.println ("xWing"); display.setFont (); display.setCursor (65, 17); display.setTextSize (0); display.println ("vs"); display.setCursor (0, 0); plavajoča voltaža = readVcc ()/1000; display.println (voltaža);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("Smrt"); display.setFont (); display.setCursor (65, 42); display.println ("zvezda"); display.setTextSize (0); display.setCursor (65, 55); display.println ("avtor VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); pisk (a, 500); pisk (a, 500); pisk (a, 500); pisk (f, 350); pisk (cH, 150); pisk (a, 500); pisk (f, 350); pisk (cH, 150); pisk (a, 650); zamuda (500); zamuda (500); } int metx = 0; int mety = 0; int obstaja = 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 hitrost = 3; // hitrost krogle int bkugle = 1; int najmanja = 600; int najveca = 1200; int premer = 10; int rx4 = 95; int ry4 = 0; int zivoti = 5; int poc = 0; int ispaljeno = 0; int nivo = 1; int center = 95; brez podpisa dolgo pocetno = 0; brez podpisa dolgo izbrano = 0; brez podpisa dolgo trenutno = 0; nepodpisano dolgo 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 (); izbrano = naključno (400, 1200); poc = 1; } trenutno = millis (); // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno; nivo = nivo+1; hitrost = hitrost+1; // brizna neprijateljevog metka if (nivo % 2 == 0) {bkugle = bkugle+1; premer = premer-1; } najmanja = najmanja-50; najveca = najveca-50; } if ((izbrano+začetno) 0) {display.drawCircle (rx, ry, 2, 1); rx = rx-hitrost;} if (ispaljeno> 1) {display.drawCircle (rx2, ry2, 1, 1); rx2 = rx2-hitrost;} if (ispaljeno> 2) {display.drawCircle (rx3, ry3, 4, 1); rx3 = rx3-hitrost;} if (ispaljeno> 3) {display.drawCircle (rx4, ry4, 2, 1); rx4 = rx4-hitrost;} if (digitalRead (12) == 0 && poz> = 2) {poz = poz-2;} if (digitalRead (11) == 0 && poz128) obstaja = 0; if (smer == 0) {nep = nep+bkugle;} else {nep = nep-bkugle;} if (nep> = (64-premer)) smer = 1; if (nep = nep-premer && mety (center-premer) && 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; } if (rx4 <1) {ispaljeno = 0; rx4 = 200;} if (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {ton (9, 200, 300); zamuda (300); ton (9, 250, 200); zamuda (200); ton (9, 300, 300); zamuda (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (BELO); display.setCursor (7, 10); display.println ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("rezultat:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("raven:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("čas (-i):"); display.setCursor (60, 50); display.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {ton (9, 280, 300); zamuda (300); ton (9, 250, 200); zamuda (200); ton (9, 370, 300); zamuda (300); ponovno (); }}} void ponovno () {metx = 0; mety = 0; obstaja = 0; nep = 8; smer = 0; go = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; bodovi = 0; hitrost = 3; // brizna neprijateljevog metka bkugle = 1; najmanja = 600; najveca = 1200; premer = 12; rx4 = 95; ry4 = 0; zivoti = 5; poc = 0; ispaljeno = 0; nivo = 1; pocetno = 0; izbrano = 0; trenutno = 0; nivovrije = 0; } long readVcc () {// Preberite referenco 1.1V proti AVcc // sklic nastavite na Vcc, meritev pa na interno referenco 1.1V #if je definirano (_ AVR_ATmega32U4_) || definirano (_ AVR_ATmega1280_) || definirano (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif definiran (_AVR_ATtiny24_) || opredeljeno (_ AVR_ATtiny44_) || definirano (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif definiran (_AVR_ATtiny25_) || opredeljeno (_ AVR_ATtiny45_) || definirano (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif zakasnitev (2); // Počakajte, da se Vref poravna ADCSRA | = _BV (ADSC); // Začni pretvorbo while (bit_is_set (ADCSRA, ADSC)); // merjenje uint8_t nizko = ADCL; // najprej prebrati ADCL - potem zaklene ADCH uint8_t visoko = ADCH; // odklene oba dolga rezultata = (visoko << 8) | nizek; rezultat = 1125300L / rezultat; // Izračunaj Vcc (v mV); 1125300 = 1,1*1023*1000 rezultat vračila; // Vcc v milivoltih} void beep (int note, int duration) {// Predvajaj ton na zvočnikuPin ton (9, note, duration); zamuda (trajanje); noTone (9); zamuda (50); }

4. korak: Uživajte !!

Čestitamo? končno vam je uspelo, če se vam zdi všeč, se naročite na moj youtube kanal