תוכן עניינים:

קונסולת משחקים DIY באמצעות Arduino: 4 שלבים
קונסולת משחקים DIY באמצעות Arduino: 4 שלבים

וִידֵאוֹ: קונסולת משחקים DIY באמצעות Arduino: 4 שלבים

וִידֵאוֹ: קונסולת משחקים DIY באמצעות Arduino: 4 שלבים
וִידֵאוֹ: פרויקט גמר של עדיאל עזריאל מנחה שי מלול 2024, נוֹבֶמבֶּר
Anonim
Image
Image

במדריך זה אני הולך להראות לך כיצד תוכל להכין קונסולת משחקים באמצעות Arduino nano. אז אם אתה רוצה לראות עליו סרטון מפורט, בדוק אותו בערוץ היוטיוב שלי

אספקה

אם תקנה מהקישורים האלה זה יעזור לי לתת לך עוד פרויקטים

1) ARDUINO NANO2) OLED DISPLAY3) לחצני PUSH4) WIRES

שלב 1: הלחמת כל הרכיבים

תהנה!!!
תהנה!!!

לכן, לאחר קבלת כל הרכיבים עליך להלחם את כל הרכיבים כפי שמוצג בתרשים המעגל הזה

שלב 2: מסדרים את כל הדברים במקומות

לאחר הלחמה הכל לסדר את כל הרכיבים כך לתת לו מראה יפה

שלב 3: תכנות

אז, סוף סוף לאחר ביצוע כל השלבים כראוי הגיע הזמן להעלות את הקוד למטה ל- Arduino

#לִכלוֹל

#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, 0xFF, 0x00,, 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, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0, 0x0,, 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, 0xBF, 0xFC, 0x1, 0x,, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x0, 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, 0x0, 0x0, 0x0, 0x0, 0x0 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 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, 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xB0, 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}; הגדרת חלל () {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, storm, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (לבן); display.setCursor (65, 14); display.println ("xWing"); display.setFont (); display.setCursor (65, 17); display.setTextSize (0); display.println ("לעומת"); display.setCursor (0, 0); צף voltaza = readVcc ()/1000; display.println (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("מוות"); display.setFont (); display.setCursor (65, 42); display.println ("כוכב"); display.setTextSize (0); display.setCursor (65, 55); display.println ("מאת VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); צפצוף (a, 500); צפצוף (a, 500); צפצוף (a, 500); צפצוף (f, 350); ביפ (cH, 150); צפצוף (a, 500); צפצוף (f, 350); צפצוף (cH, 150); צפצוף (a, 650); עיכוב (500); עיכוב (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; // מהירות הכדור 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 level = 1; int centar = 95; pocetno ארוך ללא חתום = 0; odabrano ארוך ללא סימן = 0; trenutno ארוך ללא חתום = 0; nivovrije ארוך ללא חתימה = 0; int poz = 30; לולאת 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); אם (poc == 0) {pocetno = millis (); odabrano = אקראי (400, 1200); poc = 1; } trenutno = מיליס (); // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno; רמה = רמה+1; brzina = brzina+1; // brizna neprijateljevog metka if (רמה % 2 == 0) {bkugle = bkugle+1; promjer = promjer-1; } נג'מנג'ה = נג'מניה -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; אם (smjer == 0) {nep = nep+bkugle;} אחרת {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; טון (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija+8) if (rx24) {rx2 = -50; ry2 = -50; טון (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija+8) if (rx34) {rx3 = -50; ry3 = -50; טון (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija+8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; טון (9, 100, 100); zivoti = zivoti-1; } אם (rx4 <1) {ispaljeno = 0; rx4 = 200;} אם (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {טון (9, 200, 300); עיכוב (300); טון (9, 250, 200); עיכוב (200); טון (9, 300, 300); עיכוב (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (לבן); display.setCursor (7, 10); display.println ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("ציון:"); display.setCursor (44, 30); display.println (בודובי); display.setCursor (7, 40); display.println ("רמה:"); display.setCursor (44, 40); display.println (רמה); display.setCursor (7, 50); display.println ("זמן (ים):"); display.setCursor (60, 50); display.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {טון (9, 280, 300); עיכוב (300); טון (9, 250, 200); עיכוב (200); טון (9, 370, 300); עיכוב (300); ponovo (); }}} void ponovo () {metx = 0; mety = 0; פוסטוג'י = 0; נפ = 8; smjer = 0; ללכת = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; בודובי = 0; brzina = 3; // brizna neprijateljevog metka bkugle = 1; נג'מניה = 600; najveca = 1200; promjer = 12; rx4 = 95; ry4 = 0; zivoti = 5; poc = 0; ispaljeno = 0; רמה = 1; pocetno = 0; odabrano = 0; trenutno = 0; nivovrije = 0; } readVcc ארוך () {// קרא התייחסות 1.1V מול AVcc // הגדר את ההפניה ל- Vcc ואת המדידה להתייחסות הפנימית 1.1V #אם מוגדר (_ AVR_ATmega32U4_) || מוגדר (_ AVR_ATmega1280_) || מוגדר (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif מוגדר (_AVR_ATtiny24_) || מוגדר (_ AVR_ATtiny44_) || מוגדר (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif מוגדר (_AVR_ATtiny25_) || מוגדר (_ AVR_ATtiny45_) || מוגדר (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif עיכוב (2); // המתן עד ש- Vref יסדיר את ADCSRA | = _BV (ADSC); // התחל המרה בעוד (bit_is_set (ADCSRA, ADSC)); // מדידת uint8_t נמוך = ADCL; // חייב לקרוא ADCL תחילה - לאחר מכן הוא נועל ADCH uint8_t high = ADCH; // פותח את שתי התוצאות הארוכות = (גבוה << 8) | נָמוּך; תוצאה = 1125300L / תוצאה; // חשב Vcc (ב- mV); 1125300 = 1.1*1023*1000 תוצאת החזרה; // Vcc במיליוולט} צפצוף ריק (int note, int duration) {// צליל השמעה על צליל BuzzerPin (9, הערה, משך); עיכוב (משך); noTone (9); עיכוב (50); }

שלב 4: תהנו !

מזל טוב ? סוף סוף הצלחת, אז אם אהבת את זה אז הירשם לערוץ היוטיוב שלי

מוּמלָץ: