Arduino istifadə edərək DIY Oyun Konsolu: 4 addım
Arduino istifadə edərək DIY Oyun Konsolu: 4 addım
Anonim
Image
Image

Bu təlimatda sizə Arduino nano istifadə edərək bir oyun konsolu necə qura biləcəyinizi göstərəcəyəm. Buna görə ətraflı videoya baxmaq istəyirsinizsə, youtube kanalımdan izləyin

Təchizat

Bu bağlantılardan satın alsanız, sizə daha çox layihə verməyimə kömək edəcək

1) ARDUINO NANO2) OLED DISPLAY3) BASMA DÜĞMƏLƏRİ 4) TELEFONLAR

Addım 1: Bütün komponentlərin lehimlənməsi

Zövq alın !!!
Zövq alın !!!

Beləliklə, bütün komponentləri əldə etdikdən sonra bütün sxemləri bu sxemdə göstərildiyi kimi lehimləməlisiniz

Addım 2: Bütün Şeyləri Yerlərdə Düzəldin

Hər şeyi lehimlədikdən sonra gözəl bir görünüş vermək üçün bütün komponentləri bu şəkildə düzün

Addım 3: Proqramlaşdırma

Beləliklə, nəhayət bütün addımları düzgün yerinə yetirdikdən sonra aşağıdakı kodu Arduinoya yükləməyin vaxtı gəldi

#daxil edin

#include #include #include #include // #include #deleine OLED_RESET 4 Adafruit_SSD1306 displeyi (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 imzasız PROGMEM dioda16 = {0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xF, 0x7F, 0x1F, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00}; const imzasız char PROGMEM fırtına = {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, 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, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xBF, 0xBF, 0xFF, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x0, 0x0, 0x70,, 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, 0xD0, 0x09 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0x07, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x00, 0x07, 0xC7 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFA, 0xFF, 0xF7, 0xF7 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 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, fırtına, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (BEYAZ); 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; ekran.println (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("Ölüm"); display.setFont (); display.setCursor (65, 42); display.println ("ulduz"); display.setTextSize (0); display.setCursor (65, 55); display.println ("VRAJ tərəfindən"); display.setCursor (65, 20); display.display (); display.setFont (); bip (a, 500); bip (a, 500); bip (a, 500); bip (f, 350); səs siqnalı (cH, 150); bip (a, 500); bip (f, 350); səs siqnalı (cH, 150); bip (a, 650); gecikmə (500); gecikmə (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; // güllə sürəti 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; işarəsiz uzun pocetno = 0; işarəsiz uzun odabrano = 0; işarəsiz uzun trenutno = 0; imzasız uzun 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); əgər (poc == 0) {pocetno = millis (); odabrano = təsadüfi (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; əgər (smjer == 0) {nep = nep+bkugle;} başqa {nep = nep-bkugle;} if (nep> = (64-promjer)) smjer = 1; əgər (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; } əgər (rx4 <1) {ispaljeno = 0; rx4 = 200;} if (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {ton (9, 200, 300); gecikmə (300); ton (9, 250, 200); gecikmə (200); ton (9, 300, 300); gecikmə (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (BEYAZ); display.setCursor (7, 10); display.println ("OYUN BİTDİ!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("hesab:"); display.setCursor (44, 30); ekran.println (bodovi); display.setCursor (7, 40); display.println ("səviyyə:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("vaxt (lar):"); display.setCursor (60, 50); display.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {ton (9, 280, 300); gecikmə (300); ton (9, 250, 200); gecikmə (200); ton (9, 370, 300); gecikmə (300); ponovo (); }}} boş ponovo () {metx = 0; met = 0; postoji = 0; nep = 8; smjer = 0; getmək = 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 () {// AVcc əleyhinə 1.1V istinadını oxuyun // istinadı Vcc -ə və ölçməni #if müəyyən edilmiş daxili 1.1V istinadına təyin edin (_ AVR_ATmega32U4_) || müəyyən (_ AVR_ATmega1280_) || müəyyən (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif müəyyən (_AVR_ATtiny24_) || müəyyən (_ AVR_ATtiny44_) || müəyyən (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif müəyyən (_AVR_ATtiny25_) || müəyyən (_ AVR_ATtiny45_) || müəyyən edilmiş (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #başqa ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif gecikməsi (2); // Vref -in ADCSRA ilə həllini gözləyin | = _BV (ADSC); // Dönüşüm zamanı başlayın (bit_is_set (ADCSRA, ADSC)); // ölçmə uint8_t aşağı = ADCL; // əvvəlcə ADCL oxumalıdır - sonra ADCH uint8_t high = ADCH kilidlənir; // hər iki uzun nəticəni açar = (yüksək << 8) | aşağı; nəticə = 1125300L / nəticə; // Vcc hesablayın (mV ilə); 1125300 = 1.1*1023*1000 qaytarma nəticəsi; // Milli voltlarda Vcc} boş səs siqnalı (int note, int müddəti) {// BuzzerPin tonunda səs tonu (9, qeyd, müddət); gecikmə (müddəti); noTone (9); gecikmə (50); }

Addım 4: Zövq alın !

Tebrik edirem? nəhayət bunu etdiniz, bəyəndiyiniz halda youtube kanalıma abunə olun