جدول المحتويات:
- اللوازم
- الخطوة 1: لحام جميع المكونات
- الخطوة 2: ترتيب كل الأشياء في الأماكن
- الخطوة الثالثة: البرمجة
- الخطوة 4: استمتع !
فيديو: وحدة تحكم لعبة DIY باستخدام Arduino: 4 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:36
في هذا البرنامج التعليمي ، سأوضح لك كيف يمكنك إنشاء وحدة تحكم للألعاب باستخدام Arduino nano. لذلك إذا كنت تريد مشاهدة مقطع فيديو مفصل عليه ، فقم بمراجعته على قناة youtube الخاصة بي
اللوازم
إذا اشتريت من هذه الروابط ، فسوف يساعدني في منحك المزيد من المشاريع
1) ARDUINO NANO2) OLED DISPLAY3) أزرار الضغط 4) الأسلاك
الخطوة 1: لحام جميع المكونات
لذلك ، بعد الحصول على جميع المكونات ، يجب عليك لحام جميع المكونات كما هو موضح في مخطط الدائرة هذا
الخطوة 2: ترتيب كل الأشياء في الأماكن
بعد لحام كل شيء ، قم بترتيب جميع المكونات مثل هذه لإضفاء مظهر جميل عليها
الخطوة الثالثة: البرمجة
لذا ، أخيرًا بعد اتباع جميع الخطوات بشكل صحيح ، حان الوقت لتحميل الكود أدناه إلى Arduino
#يشمل
# تضمين # تضمين # تضمين # تضمين // # تضمين # تعريف OLED_RESET 4 عرض Adafruit_SSD1306 (OLED_RESET) ؛ const int c = 261 ؛ كونست int د = 294 ؛ const int e = 329 ؛ const int f = 349 ؛ const int g = 391 ؛ const int gS = 415 ؛ كونست إنت أ = 440 ؛ const int aS = 455 ؛ كونست إنت ب = 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 ؛ ثابت حرف ثنائي 16 PROGMEM بدون إشارة = {0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x1C ، 0x00 ، 0x3F ، 0xF0 ، 0x3C ، 0x00 ، 0x3C ، 0x00 ، 0xFF ، 0x00 ، 0x7F ، 0xFF ، 0x7F ، 0xFF ، 0xFF ، 0x00 ، 0x3C ، 0x00 ، 0x3C ، 0x00 ، 0x1F ، 0xF0 ، 0x1C ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00} ؛ عاصفة حرف PROGMEM بدون إشارة = {0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x7F ، 0xFE ، 0x00 ، 0x00 ، 0x00 ، 0x07 ، 0x80 ، 0x01 ، 0xE0 ، 0x00 ، 0x00 ، 0x0C ، 0x00 ، 0x00 ، 0x20 ، 0x00 ، 0x00 ، 0x18 ، 0x00 ، 0x00 ، 0x18 ، 0x00 ، 0x00 ، 0x30 ، 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 ، 0x02 ، 0x00 ، 0x00 ، 0x40 ، 0x00 ، 0x00 ، 0x01 ، 0x00 ، 0x00 ، 0x40 ، 0x00 ، 0x00 ، 0x01 ، 0x00 ، 0x00 ، 0x40 ، 0x00 ، 0x00 ، 0x01 ، 0x00 ، 0x00 ، 0x7F ، 0xE0 ، 0x00 ، 0x01 ، 0x00 ، 0x00 ، 0x7F ، 0xFF ، 0xFF ، 0xFF ، 0x00 ، 0x00 ، 0x7F ، 0xFF ، 0xFF ، 0xFF ، 0x00 ، 0x00 ، 0xD7 ، 0xFF ، 0xFF ، 0xE1 ، 0x00 ، 0x01 ، 0xBF ، 0xFC ، 0x1F ، 0xFA ، 0x80 ، 0x01 ، 0xBF ، 0xF1 ، 0xCF ، 0xFA ، 0x80 ، 0x01 ، 0x3F ، 0xC2 ، 0x37 ، 0xF7 ، 0x80 ، 0x01 ، 0xEF ، 0x9C ، 0x01 ، 0xE7 ، 0xC0 ، 0x01 ، 0xE0 ، 0x70 ، 0x06 ، 0x06 ، 0x80 ، 0x01 ، 0xE0 ، 0xC0 ، 0x03 ، 0x06 ، 0x80 ، 0x01 ، 0xFF ، 0x80 ، 0x01 ، 0xFF ، 0x80 ، 0x01 ، 0xF8 ، 0x00 ، 0x00 ،:: 0x01، 0x80، 0x00، 0x00، 0x10، 0x20، 0x01، 0x00، 0x00، 0x00، 0x0E، 0x40، 0x01، 0x80، 0x07، 0xF0، 0x01، 0x80، 0x00، 0x80، 0x07، 0xC8، 0x00، 0x80، 0x00، 0x80 ، 0x0B ، 0xE8 ، 0x00 ، 0x80 ، 0x00 ، 0x87 ، 0x97 ، 0xE9 ، 0xE0 ، 0x80 ، 0x00 ، 0x87 ، 0xDF ، 0xEF ، 0xA0 ، 0x80 ، 0x00 ، 0x4B ، 0xFF ، 0xFF ، 0xA0 ، 0x80 ، 0x00 ، 0x6B ،: 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 ، العاصفة ، 48 ، 48 ، 1) ؛ display.setFont (& FreeSans9pt7b) ، display.setTextColor (WHITE) ، 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 () ، صفير (أ ، 500) ؛ صفير (أ ، 500) ؛ صفير (أ ، 500) ؛ صفير (ص ، 350) ؛ صفير (ج ، 150) ؛ صفير (أ ، 500) ؛ صفير (ص ، 350) ؛ صفير (ج ، 150) ؛ صفير (أ ، 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 = 1 ؛ int centar = 95 ؛ pocetno طويلة بدون توقيع = 0 ؛ odabrano طويلة بدون توقيع = 0 ؛ trenutno طويلة غير موقعة = 0 ؛ nivovrije طويلة غير موقعة = 0 ؛ int poz = 30 ؛ حلقة باطلة () {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) ؛ ص = 1 ؛ } trenutno = ميلي () ؛ // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno؛ نيفو = نيفو + 1 ؛ برزينا = برزينا + 1 ؛ // brizna neprijateljevog metka if (nivo٪ 2 == 0) {bkugle = bkugle + 1 ؛ برومجير = برومجير -1 ؛ } najmanja = najmanja-50 ؛ najveca = najveca-50 ؛ } if ((odabrano + pocetno) 0) {display.drawCircle (rx، ry، 2، 1)؛ rx = rx-brzina؛} إذا (ispaljeno> 1) {display.drawCircle (rx2، ry2، 1، 1)؛ rx2 = rx2-brzina ؛} إذا (ispaljeno> 2) {display.drawCircle (rx3، ry3، 4، 1)؛ rx3 = rx3-brzina ؛} إذا (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؛} 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؛ ص = -50 ؛ نغمة (9 ، 100 ، 100) ؛ زيفوتي = زيفوتي -1 ؛ } if (ry2> = pozicija-8 && ry2 <= pozicija + 8) if (rx24) {rx2 = -50؛ ry2 = -50 ؛ نغمة (9 ، 100 ، 100) ؛ زيفوتي = زيفوتي -1 ؛ } if (ry3> = pozicija-8 && ry3 <= pozicija + 8) if (rx34) {rx3 = -50؛ ry3 = -50 ؛ نغمة (9 ، 100 ، 100) ؛ زيفوتي = زيفوتي -1 ؛ } if (ry4> = pozicija-8 && ry4 <= pozicija + 8) if (rx44) {rx4 = 200؛ ry4 = -50 ؛ ispaljeno = 0 ؛ نغمة (9 ، 100 ، 100) ؛ زيفوتي = زيفوتي -1 ؛ } إذا (rx4 <1) {ispaljeno = 0 ؛ rx4 = 200 ؛} إذا (zivoti == 0) اذهب = 1 ؛ } if (go == 1) {if (zivoti == 0) {tone (9، 200، 300)؛ تأخير (300) ؛ نغمة (9 ، 250 ، 200) ؛ تأخير (200) ؛ نغمة (9 ، 300 ، 300) ؛ تأخير (300) ؛ زيفوتي = 5 ؛ } display.clearDisplay ()؛ display.setFont () ، display.setTextSize (2) ، display.setTextColor (WHITE) ، display.setCursor (7 ، 10) ؛ display.println ("انتهت اللعبة!") ؛ display.setTextSize (1) ، display.setCursor (7 ، 30) ؛ display.println ("النتيجة:") ؛ display.setCursor (44 ، 30) ؛ display.println (bodovi) ؛ display.setCursor (7 ، 40) ؛ display.println ("المستوى:") ؛ display.setCursor (44 ، 40) ؛ display.println (nivo) ؛ display.setCursor (7 ، 50) ؛ display.println ("الوقت (الأوقات):") ؛ display.setCursor (60 ، 50) ؛ display.println (trenutno / 1000) ؛ display.display () ، إذا (digitalRead (3) == 0) {نغمة (9 ، 280 ، 300) ؛ تأخير (300) ؛ نغمة (9 ، 250 ، 200) ؛ تأخير (200) ؛ نغمة (9 ، 370 ، 300) ؛ تأخير (300) ؛ بونوفو () ؛ }}} void ponovo () {metx = 0؛ ميتي = 0 ؛ postoji = 0 ؛ نيب = 8 ؛ smjer = 0 ؛ اذهب = 0 ؛ rx = 95 ؛ ص = 0 ؛ rx2 = 95 ؛ ry2 = 0 ؛ rx3 = 95 ؛ ry3 = 0 ؛ بودوفي = 0 ؛ برزينا = 3 ؛ // brizna neprijateljevog metka bkugle = 1 ؛ najmanja = 600 ؛ ناجفيكا = 1200 ؛ برومجير = 12 ؛ rx4 = 95 ؛ ry4 = 0 ؛ زيفوتي = 5 ؛ Poc = 0 ؛ ispaljeno = 0 ؛ نيفو = 1 ؛ pocetno = 0 ؛ أودابرانو = 0 ؛ trenutno = 0 ؛ nivovrije = 0 ؛ } long readVcc () {// قراءة مرجع 1.1V مقابل AVcc // قم بتعيين المرجع إلى Vcc والقياس إلى المرجع الداخلي 1.1V #if محدد (_ 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 (بالسيارات) ؛ 1125300 = 1.1 * 1023 * 1000 نتيجة إرجاع ؛ // Vcc in millivolts} نغمة باطلة (مذكرة int ، مدة int) {// تشغيل نغمة على نغمة buzzerPin (9 ، ملاحظة ، المدة) ؛ التأخير (المدة) ؛ noTone (9) ، تأخير (50) ؛ }
الخطوة 4: استمتع !
تهانينا ؟ لقد قمت بذلك أخيرًا ، لذا إذا أعجبك ذلك ، فقم بالاشتراك في قناة youtube الخاصة بي
موصى به:
وحدة تحكم لعبة محمولة يدويًا باستخدام RetroPie: 7 خطوات
وحدة التحكم في الألعاب المحمولة باليد باستخدام RetroPie: شاهد الفيديو أعلاه لفهم هذا المشروع بشكل أفضل. بخير. حان الوقت لتبدأ! أولاً وقبل كل شيء ، سنستخدم RetroPie. هذا يترك لنا خيارين. إذا قمنا بالفعل بتثبيت Raspbian على بطاقة SD الخاصة بنا ، فيمكننا تثبيت RetroP
Arduino DIY Game Controller - وحدة تحكم لعبة Arduino PS2 - لعب Tekken مع DIY Arduino Gamepad: 7 خطوات
Arduino DIY Game Controller | وحدة تحكم ألعاب اردوينو PS2 | لعب Tekken مع DIY Arduino Gamepad: مرحبًا يا رفاق ، لعب الألعاب أمر ممتع دائمًا ولكن اللعب باستخدام وحدة تحكم الألعاب المخصصة DIY الخاصة بك أكثر متعة. لذلك سنصنع وحدة تحكم في اللعبة باستخدام arduino pro micro في هذه التعليمات
جهاز تحكم عن بعد لاسلكي باستخدام وحدة 2.4 جيجا هرتز NRF24L01 مع Arduino - جهاز استقبال Nrf24l01 4 قنوات / 6 قنوات للطائرة الرباعية - هليكوبتر ار سي - طائرة RC باستخدام Arduino: 5 خطوات (بالصور)
جهاز تحكم عن بعد لاسلكي باستخدام وحدة 2.4 جيجا هرتز NRF24L01 مع Arduino | جهاز استقبال Nrf24l01 4 قنوات / 6 قنوات للطائرة الرباعية | هليكوبتر ار سي | Rc Plane باستخدام Arduino: لتشغيل سيارة Rc | كوادكوبتر | طائرة بدون طيار | طائرة RC | قارب RC ، نحتاج دائمًا إلى جهاز استقبال وجهاز إرسال ، لنفترض بالنسبة لـ RC QUADCOPTER أننا بحاجة إلى جهاز إرسال واستقبال من 6 قنوات وأن هذا النوع من TX و RX مكلف للغاية ، لذلك سنصنع واحدًا على
وحدة تحكم لعبة Recalbox المحمولة باستخدام 2.2 TFT: 6 خطوات
وحدة التحكم في لعبة Recalbox المحمولة باستخدام 2.2 TFT: تعليمات DIY لوحدة التحكم في لعبة recalbox المحمولة باستخدام 2.2 "شاشة TFT LCD وزر Raspberry Pi 0 W و GPIO. يمكنك مشاهدة فيديو youtube هذا للحصول على عرض توضيحي كامل للخطوات المتضمنة: أ. احصل على جميع الأجزاء. جند الأجزاء معًا
تحكم في الذراع الآلية باستخدام Zio باستخدام وحدة تحكم PS2: 4 خطوات
التحكم في الذراع الروبوتية باستخدام وحدة تحكم Zio باستخدام PS2: تعد مشاركة المدونة هذه جزءًا من سلسلة Zio Robotics. المقدمة هذه هي الدفعة الأخيرة من منشور "التحكم في الذراع الآلية باستخدام Zio". في هذا البرنامج التعليمي ، سنضيف جزءًا آخر إلى ذراعنا الآلية. لا تتضمن البرامج التعليمية السابقة أساسًا لـ