Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tässä opetusohjelmassa aion näyttää sinulle, kuinka voit tehdä pelikonsolin Arduino nanolla. Joten jos haluat nähdä yksityiskohtaisen videon siitä, katso se youtube -kanavallani
Tarvikkeet
Jos ostat näistä linkeistä, se auttaa minua tarjoamaan sinulle lisää projekteja
1) ARDUINO NANO2) OLED -NÄYTTÖ3) PAINIKKEET4) JOHDOT
Vaihe 1: Kaikkien komponenttien juottaminen
Joten kaikkien komponenttien saamisen jälkeen sinun on juotettava kaikki komponentit tämän piirikaavion mukaisesti
Vaihe 2: Järjestä kaikki asiat paikkoihin
Kaikki juottamisen jälkeen järjestä kaikki komponentit näin, jotta se näyttää hyvältä
Vaihe 3: Ohjelmointi
Joten lopulta, kun olet noudattanut kaikkia vaiheita oikein, on aika ladata alla oleva koodi Arduinolle
#sisältää
#Sisällytä #Sisällytä #Sisällytä #Sisällytä // #Sisällytä #Määritä OLED_RESET 4 Adafruit_SSD1306 -näyttö (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, 0xF3, 0xFF, 0xFx, 0xF3, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00}; const unsigned char PROGMEM -myrsky = {0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 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, 0xBF0, 0xFF, 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, 0x0x0, 0x0x0 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0x26, 0x0 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, 0xFF, 0xA0, 0xF0, 0xA0 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0x0 0, 0x08 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, myrsky, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (VALKOINEN); 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 = lukuVcc ()/1000; display.println (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("Kuolema"); display.setFont (); display.setCursor (65, 42); display.println ("tähti"); display.setTextSize (0); display.setCursor (65, 55); display.println ("VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); piippaus (a, 500); piippaus (a, 500); piippaus (a, 500); piippaus (f, 350); piippaus (cH, 150); piippaus (a, 500); piippaus (f, 350); piippaus (cH, 150); piippaus (a, 650); viive (500); viive (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; // luodin nopeus 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; allekirjoittamaton pitkä pocetno = 0; allekirjoittamaton pitkä odabrano = 0; allekirjoittamaton pitkä trenutno = 0; allekirjoittamaton pitkä 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); jos (poc == 0) {pocetno = millis (); odabrano = satunnainen (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; jos (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; sävy (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija+8) if (rx24) {rx2 = -50; ry2 = -50; sävy (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija+8) if (rx34) {rx3 = -50; ry3 = -50; sävy (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija+8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; sävy (9, 100, 100); zivoti = zivoti-1; } jos (rx4 <1) {ispaljeno = 0; rx4 = 200;} if (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {tone (9, 200, 300); viive (300); sävy (9, 250, 200); viive (200); sävy (9, 300, 300); viive (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (VALKOINEN); 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 ("taso:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("aika (aika):"); display.setCursor (60, 50); display.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {tone (9, 280, 300); viive (300); sävy (9, 250, 200); viive (200); sävy (9, 370, 300); viive (300); ponovo (); }}} mitätön ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; mene = 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 () {// Lue 1.1 V: n viite AVcc: tä vastaan // aseta viite Vcc: ksi ja mittaus sisäiseksi 1.1 V: n viitteeksi #jos määritetty (_ AVR_ATmega32U4_) || määritelty (_ AVR_ATmega1280_) || määritelty (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif määritetty (_AVR_ATtiny24_) || määritelty (_ AVR_ATtiny44_) || määritelty (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif määritelty (_AVR_ATtiny25_) || määritelty (_ AVR_ATtiny45_) || määritelty (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif viive (2); // Odota, että Vref ratkaisee ADCSRA | = _BV (ADSC); // Aloita muuntaminen while (bit_is_set (ADCSRA, ADSC)); // mitataan uint8_t low = ADCL; // täytyy ensin lukea ADCL - se lukitsee sitten ADCH uint8_t high = ADCH; // avaa molemmat pitkän tuloksen = (korkea << 8) | matala; tulos = 1125300L / tulos; // Laske Vcc (mV); 1125300 = 1,1*1023*1000 palautustulos; // Vcc millivoltteina} mitätön piippaus (int nuotti, int kesto) {// Soittoääni summerillaPin -ääni (9, nuotti, kesto); viive (kesto); noTone (9); viive (50); }
Vaihe 4: Nauti !
Onnittelut ? teit vihdoin sen, joten jos pidit siitä, tilaa YouTube -kanavani