Направи си игрална конзола с помощта на Arduino: 4 стъпки
Направи си игрална конзола с помощта на Arduino: 4 стъпки
Anonim
Image
Image

В този урок ще ви покажа, че как можете да направите игрална конзола, използвайки Arduino nano. Така че, ако искате да видите подробно видео за него, проверете го в моя канал в YouTube

Консумативи

Ако купувате от тези връзки, това ще ми помогне да ви дам още проекти

1) ARDUINO NANO2) OLED ДИСПЛЕЙ 3) ПУТЕТЕ БУТОНИ 4) ЖИВИ

Стъпка 1: Запояване на всички компоненти

Наслади се!!!
Наслади се!!!

Така че, след като получите всички компоненти, трябва да запоите всички компоненти, както е показано на тази електрическа схема

Стъпка 2: Подредете всички неща на места

След запояване всичко подредете всички компоненти по този начин, за да му придадете хубав вид

Стъпка 3: Програмиране

И така, накрая, след като изпълните всички стъпки правилно, е време да качите кода по -долу в Arduino

#включва

#include #include #include #include // #include #define OLED_RESET 4 Adafruit_SSD1306 дисплей (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, 0xF, 0xF, 0x7F, 0xF, 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, 0x00, 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, 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, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBFA, 0x,, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 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, 0xD0, 0x0B, 0x90, 0x00, 0x0B, 0x90, 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x00, 0x10, 0x0 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x00 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA0, 0xA0 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 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, буря, 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); плаваща волтаза = 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); звуков сигнал (f, 350); звуков сигнал (cH, 150); звуков сигнал (а, 500); звуков сигнал (f, 350); звуков сигнал (cH, 150); звуков сигнал (а, 650); забавяне (500); забавяне (500); } int metx = 0; int mety = 0; int съществува = 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 център = 95; unsigned long pocetno = 0; без знак дълго избрано = 0; без подпис дълго в момента = 0; беззначно дълго нивоврие = 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 (); избрано = произволно (400, 1200); poc = 1; } в момента = millis (); // ниво, ако ((текущо ниво)> 50000) {ниво = текущо; ниво = ниво+1; brzina = brzina+1; // brizna neprijateljevog metka if (ниво % 2 == 0) {bkugle = bkugle+1; promjer = promjer-1; } найманя = найманя-50; najveca = najveca-50; } if ((избрано+начално) 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) съществува = 0; if (smjer == 0) {nep = nep+bkugle;} else {nep = nep-bkugle;} if (nep> = (64-promjer)) smjer = 1; if (nep = nep-promjer && mety (center-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) {тон (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 (bodovi); display.setCursor (7, 40); display.println ("ниво:"); display.setCursor (44, 40); display.println (ниво); display.setCursor (7, 50); display.println ("време (и):"); display.setCursor (60, 50); display.println (в момента/1000); display.display (); if (digitalRead (3) == 0) {тон (9, 280, 300); забавяне (300); тон (9, 250, 200); забавяне (200); тон (9, 370, 300); забавяне (300); отново (); }}} void отново () {metx = 0; mety = 0; съществува = 0; nep = 8; smjer = 0; go = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; bodovi = 0; скорост = 3; // brizna neprijateljevog metka bkugle = 1; найманя = 600; najveca = 1200; диаметър = 12; rx4 = 95; ry4 = 0; zivoti = 5; poc = 0; ispaljeno = 0; ниво = 1; pocetno = 0; избрано = 0; за момента = 0; нивоврие = 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); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif забавяне (2); // Изчакайте Vref да уреди ADCSRA | = _BV (ADSC); // Стартиране на преобразуването while (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 бележка, продължителност на int) {// Тон на възпроизвеждане на зумерPin тон (9, бележка, продължителност); забавяне (продължителност); noTone (9); забавяне (50); }

Стъпка 4: Насладете се !

Честито ? най -накрая успяхте, така че ако ви хареса, абонирайте се за канала ми в youtube

Препоръчано: