فهرست مطالب:

کنسول بازی DIY با استفاده از آردوینو: 4 مرحله
کنسول بازی DIY با استفاده از آردوینو: 4 مرحله

تصویری: کنسول بازی DIY با استفاده از آردوینو: 4 مرحله

تصویری: کنسول بازی DIY با استفاده از آردوینو: 4 مرحله
تصویری: How to use 4 channel Relay to control AC load with Arduino code 2024, نوامبر
Anonim
Image
Image

در این آموزش قصد دارم به شما نشان دهم که چگونه می توانید با استفاده از Arduino nano یک کنسول بازی بسازید. بنابراین اگر می خواهید ویدیوی دقیق را در مورد آن ببینید ، آن را در کانال یوتیوب من ببینید

تدارکات

اگر از این پیوندها خرید کنید به من کمک می کند تا پروژه های بیشتری به شما ارائه دهم

1) ARDUINO NANO2) صفحه نمایش OLED3) دکمه های فشار 4) سیم

مرحله 1: لحیم کاری همه اجزاء

لذت بردن!!!
لذت بردن!!!

بنابراین ، پس از به دست آوردن تمام قطعات ، باید همه اجزا را همانطور که در این نمودار نشان داده شده لحیم کنید

مرحله 2: همه چیز را در مکان ها مرتب کنید

بعد از لحیم کاری همه چیز را طوری تنظیم کنید که ظاهر زیبایی به آن بدهد

مرحله 3: برنامه نویسی

بنابراین ، سرانجام پس از انجام صحیح تمام مراحل ، زمان بارگذاری کد زیر در Arduino فرا رسیده است

#عبارتند از

#شامل #شامل #شامل #شامل # 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؛ توایع بدون علامت کاراکتر PROGMEM dioda16 = {مقدار 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} ؛ const unsigned char PROGMEM طوفان = {0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x7F 0xFE ، 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 0x0x، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF، 0xBF 0xBF ، 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، 0x0B، 0x90، 0x1F، 0x7C، 0x03، 0xF0، 0x0F، 0xC0، 0xFC، 0x0F، 0x07، 0x90، 0x0D، 0x43، 0xC0، 0x03، 0x07، 0x90، 0x05، 0x64، مقدار 0x00، مقدار 0x00، 0xCF، 0x10، 0x07، 0xFC، مقدار 0x00، مقدار 0x00، 0x26، 0x10، 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، 0xDF، 0xFB، 0xA3، مقدار 0x00، مقدار 0x00، 0x24، 0x97، 0xE8، 0x24، مقدار 0x00، مقدار 0x00، 0x1E، 0x1F، 0xC0، 0x2C، مقدار 0x00، مقدار 0x00، 0x07، 0xF8، 0x1F، 0xF0، مقدار 0x00، مقدار 0x00، مقدار 0x00، 0x0F، 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 ، طوفان ، 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 ("vs") ؛ display.setCursor (0 ، 0) ؛ float voltaza = readVcc ()/1000؛ display.println (ولتازا) ؛؛ 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 nivo = 1 ؛ int centar = 95؛ pocetno طولانی بدون علامت = 0؛ odabrano طولانی بدون علامت = 0؛ trenutno طولانی بدون امضا = 0؛ 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) ؛ if (poc == 0) {pocetno = millis ()؛ odabrano = تصادفی (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؛ 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؛ 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؛ } if (rx4 <1) {ispaljeno = 0؛ rx4 = 200؛} if (zivoti == 0) go = 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 (سفید) ؛ display.setCursor (7 ، 10) ؛ display.println ("GAME OVER!")؛ 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 ()؛ if (digitalRead (3) == 0) {تن (9 ، 280 ، 300) ؛ تأخیر (300) ؛ تن (9 ، 250 ، 200) ؛ تأخیر (200) ؛ تن (9 ، 370 ، 300) ؛ تأخیر (300) ؛ ponovo ()؛ }}} void ponovo () {metx = 0؛ mety = 0 ؛ postoji = 0؛ nep = 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 ؛ زیووتی = 5 ؛ poc = 0؛ ispaljeno = 0؛ nivo = 1 ؛ pocetno = 0؛ odabrano = 0 ؛ trenutno = 0 ؛ nivovrije = 0 ؛ } long 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) ؛ #دیگر 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) | کم؛ result = 1125300L / result؛ // محاسبه Vcc (در میلی ولت) ؛ 1125300 = 1.1*1023*1000 نتیجه بازگشت ؛ // Vcc بر حسب میلی ولت} بوق خالی (int note ، int duration) {// پخش آهنگ در buzzerPin tone (9 ، توجه داشته باشید ، مدت زمان) ؛ تاخیر (مدت زمان) ؛ noTone (9) ؛ تأخیر (50) ؛ }

مرحله 4: لذت ببرید !

تبریک می گویم ؟ شما در نهایت موفق شدید پس اگر دوست داشتید ، در کانال یوتیوب من مشترک شوید

توصیه شده: