جدول المحتويات:

وحدة تحكم لعبة DIY باستخدام Arduino: 4 خطوات
وحدة تحكم لعبة DIY باستخدام Arduino: 4 خطوات

فيديو: وحدة تحكم لعبة DIY باستخدام Arduino: 4 خطوات

فيديو: وحدة تحكم لعبة DIY باستخدام Arduino: 4 خطوات
فيديو: مشروع أردوينو - التحكم في سيارة روبوت بهاتفك الذكي 2024, شهر نوفمبر
Anonim
Image
Image

في هذا البرنامج التعليمي ، سأوضح لك كيف يمكنك إنشاء وحدة تحكم للألعاب باستخدام 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 الخاصة بي

موصى به: