Konsol Permainan DIY Menggunakan Arduino: 4 Langkah
Konsol Permainan DIY Menggunakan Arduino: 4 Langkah
Anonim
Image
Image

Dalam tutorial ini saya akan menunjukkan kepada anda bahawa bagaimana anda boleh membuat konsol permainan menggunakan Arduino nano. Oleh itu, jika anda ingin melihat video terperinci di atasnya, lihatlah di saluran youtube saya

Bekalan

Sekiranya anda membeli dari pautan ini, ia akan membantu saya memberi anda lebih banyak projek

1) ARDUINO NANO2) TAMPILAN OLED3) Tombol PUSH4) WIRES

Langkah 1: Memateri Semua Komponen

Nikmati !!!
Nikmati !!!

Oleh itu, setelah mendapatkan semua komponen, anda harus menyolder semua komponen seperti yang ditunjukkan dalam rajah litar ini

Langkah 2: Susun Semua Perkara di Tempat

Setelah menyolder semuanya susun semua komponen seperti ini untuk memberikan penampilan yang cantik

Langkah 3: Pengaturcaraan

Jadi, akhirnya setelah mengikuti semua langkah dengan betul sudah tiba masanya untuk memuat naik kod di bawah ini ke Arduino

#sertakan

#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, 0x7, 0F7, 0F, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xB, 0xBF, 0xBF, 0xBF, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 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, 0x00, 0x0, 0x00, 0x0 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA, 0xA, 0xA, 0xA, 0xA 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x 0xF8, 0x00, 0x00}; batal persediaan () {pinMode (3, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); pinMode (11, INPUT_PULLUP); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); paparan.display (); display.clearDisplay (); display.setTextSize (0); display.drawBitmap (6, 11, ribut, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (PUTIH); 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 ("Kematian"); display.setFont (); display.setCursor (65, 42); display.println ("bintang"); display.setTextSize (0); display.setCursor (65, 55); display.println ("oleh VRAJ"); display.setCursor (65, 20); paparan.display (); display.setFont (); bip (a, 500); bip (a, 500); bip (a, 500); bip (f, 350); bip (cH, 150); bip (a, 500); bip (f, 350); bip (cH, 150); bip (a, 650); kelewatan (500); kelewatan (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; // kelajuan inti peluru = 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; pocetno panjang yang tidak ditandatangani = 0; odabrano panjang yang tidak ditandatangani = 0; trenutno panjang yang tidak ditandatangani = 0; nivovrije panjang yang tidak ditandatangani = 0; int poz = 30; gelung void () {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); jika (poc == 0) {pocetno = millis (); odabrano = rawak (400, 1200); poc = 1; } trenutno = millis (); // nivoi jika ((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; } jika ((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;} lain {nep = nep-bkugle;} jika (nep> = (64-promjer)) smjer = 1; jika (nep = nep-promjer && mety (centar-promjer) && metx = pozicija-8 && ry <= pozicija + 8) jika (rx4) {rx = 95; ry = -50; nada (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija + 8) jika (rx24) {rx2 = -50; ry2 = -50; nada (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija + 8) jika (rx34) {rx3 = -50; ry3 = -50; nada (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija + 8) jika (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; nada (9, 100, 100); zivoti = zivoti-1; } jika (rx4 <1) {ispaljeno = 0; rx4 = 200;} jika (zivoti == 0) pergi = 1; } if (go == 1) {if (zivoti == 0) {nada (9, 200, 300); kelewatan (300); nada (9, 250, 200); kelewatan (200); nada (9, 300, 300); kelewatan (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (PUTIH); display.setCursor (7, 10); display.println ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("skor:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("tahap:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("time (s):"); display.setCursor (60, 50); display.println (trenutno / 1000); paparan.display (); if (digitalRead (3) == 0) {nada (9, 280, 300); kelewatan (300); nada (9, 250, 200); kelewatan (200); nada (9, 370, 300); kelewatan (300); ponovo (); }}} batal ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; pergi = 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; } readVcc panjang () {// Baca rujukan 1.1V terhadap AVcc // tetapkan rujukan ke Vcc dan pengukuran ke rujukan 1.1V dalaman #jika ditentukan (_ AVR_ATmega32U4_) || ditakrifkan (_ AVR_ATmega1280_) || ditakrifkan (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif ditentukan (_AVR_ATtiny24_) || ditakrifkan (_ AVR_ATtiny44_) || ditakrifkan (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif ditentukan (_AVR_ATtiny25_) || ditakrifkan (_ AVR_ATtiny45_) || ditakrifkan (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif kelewatan (2); // Tunggu Vref menyelesaikan ADCSRA | = _BV (ADSC); // Mulakan penukaran sementara (bit_is_set (ADCSRA, ADSC)); // mengukur uint8_t rendah = ADCL; // mesti membaca ADCL terlebih dahulu - kemudian mengunci ADCH uint8_t tinggi = ADCH; // membuka kedua hasil panjang = (tinggi << 8) | rendah; hasil = 1125300L / hasil; // Kira Vcc (dalam mV); 1125300 = 1.1 * 1023 * 1000 hasil pulangan; // Vcc dalam milivolt} bip kosong (int not, int duration) {// Mainkan nada pada nada buzzerPin (9, nota, tempoh); kelewatan (tempoh); noTone (9); kelewatan (50); }

Langkah 4: Nikmati !

Tahniah? anda akhirnya berjaya jadi jika anda menyukainya maka langganlah saluran youtube saya

Disyorkan: