DIY Game Console Gamit ang Arduino: 4 na Hakbang
DIY Game Console Gamit ang Arduino: 4 na Hakbang
Anonim
Image
Image

Sa tutorial na ito ipapakita ko sa iyo na paano ka makakagawa ng isang gaming console gamit ang Arduino nano. Kaya kung nais mong makita ang detalyadong video dito suriin ito sa aking youtube channel

Mga gamit

Kung bibili ka mula sa mga link na ito makakatulong sa aking bigyan ka ng maraming mga proyekto

1) ARDUINO NANO2) OLED DISPLAY3) PUSH BUTTONS4) WIRES

Hakbang 1: Paghihinang ng Lahat ng Mga Bahagi

Enjoy !!!
Enjoy !!!

Kaya, pagkatapos makuha ang lahat ng mga bahagi kailangan mong maghinang ng lahat ng mga sangkap tulad ng ipinakita sa circuit diagram na ito

Hakbang 2: Ayusin ang Lahat ng mga Bagay sa Mga Lugar

Matapos ang paghihinang lahat ayusin ang lahat ng mga sangkap tulad nito upang mabigyan ito ng magandang hitsura

Hakbang 3: Programing

Kaya, sa wakas pagkatapos ng pagsunod sa lahat ng mga hakbang nang maayos oras na upang i-upload ang code sa ibaba sa Arduino

# isama

#include #include #include #include // # isama ang # tukuyin ang 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; uns unsigned char PROGMEM dioda16 = {0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00}; hindi pinirmahang char PROGMEM bagyo = {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, 0x 0 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, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x01, 0x7F, 0xE0, 0x00, 0x01, 0x7F, 0xE0, 0x00, 0x01, 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, 0x1F, 0xFA, 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, 0xD0, 0x0, 0x0, 0x0 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x 0, 0x 0 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x00, 0x07, 0xC8, 0x00, 0x00, 0x07, 0xC8, 0x00, 0x00, 0x07, 0xC8, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x00, 0x07, 0xC8, 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, 0x6, 0x6 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0x 00, 0x 0 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, bagyo, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (PUTI); 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 (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("Kamatayan"); display.setFont (); display.setCursor (65, 42); display.println ("bituin"); display.setTextSize (0); display.setCursor (65, 55); display.println ("ni VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); beep (a, 500); beep (a, 500); beep (a, 500); beep (f, 350); beep (cH, 150); beep (a, 500); beep (f, 350); beep (cH, 150); beep (a, 650); pagkaantala (500); pagkaantala (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; // bilis ng bala 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; unsigned mahabang pocetno = 0; unsigned mahabang odabrano = 0; unsigned mahabang trenutno = 0; unsigned mahabang nivovrije = 0; int poz = 30; void loop () {kung (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); kung (poc == 0) {pocetno = millis (); odabrano = random (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; } kung ((odabrano + pocetno) 0) {display.drawCircle (rx, ry, 2, 1); rx = rx-brzina;} kung (ispaljeno> 1) {display.drawCircle (rx2, ry2, 1, 1); rx2 = rx2-brzina;} kung (ispaljeno> 2) {display.drawCircle (rx3, ry3, 4, 1); rx3 = rx3-brzina;} kung (ispaljeno> 3) {display.drawCircle (rx4, ry4, 2, 1); rx4 = rx4-brzina;} kung (digitalRead (12) == 0 && poz> = 2) {poz = poz-2;} kung (digitalRead (11) == 0 && poz128) postoji = 0; kung (smjer == 0) {nep = nep + bkugle;} iba pa {nep = nep-bkugle;} kung (nep> = (64-promjer)) smjer = 1; kung (nep = nep-promjer && mety (centar-promjer) && metx = pozicija-8 && ry <= pozicija + 8) kung (rx4) {rx = 95; ry = -50; tono (9, 100, 100); zivoti = zivoti-1; } kung (ry2> = pozicija-8 && ry2 <= pozicija + 8) kung (rx24) {rx2 = -50; ry2 = -50; tono (9, 100, 100); zivoti = zivoti-1; } kung (ry3> = pozicija-8 && ry3 <= pozicija + 8) kung (rx34) {rx3 = -50; ry3 = -50; tono (9, 100, 100); zivoti = zivoti-1; } kung (ry4> = pozicija-8 && ry4 <= pozicija + 8) kung (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; tono (9, 100, 100); zivoti = zivoti-1; } kung (rx4 <1) {ispaljeno = 0; rx4 = 200;} kung (zivoti == 0) go = 1; } kung (go == 1) {kung (zivoti == 0) {tone (9, 200, 300); pagkaantala (300); tono (9, 250, 200); pagkaantala (200); tono (9, 300, 300); pagkaantala (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (PUTI); display.setCursor (7, 10); display.println ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("iskor:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("antas:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("oras (s):"); display.setCursor (60, 50); display.println (trenutno / 1000); display.display (); kung (digitalRead (3) == 0) {tone (9, 280, 300); pagkaantala (300); tono (9, 250, 200); pagkaantala (200); tono (9, 370, 300); pagkaantala (300); ponovo (); }}} void ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; pumunta = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; bodovi = 0; brzina = 3; // brizna neprijateljevog metka bkugle = 1; najmanja = 600; najveca = 1200; promjer = 12; rx4 = 95; ry4 = 0; zivoti = 5; poc = 0; ispaljeno = 0; nivo = 1; pocetno = 0; odabrano = 0; trenutno = 0; nivovrije = 0; } mahabang readVcc () {// Basahin ang sanggunian ng 1.1V laban sa AVcc // itakda ang sanggunian sa Vcc at ang pagsukat sa panloob na sangguniang 1.1V # kung tinukoy (_ AVR_ATmega32U4_) || tinukoy (_ AVR_ATmega1280_) || tinukoy (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); tinukoy ang #elif (_AVR_ATtiny24_) || tinukoy (_ AVR_ATtiny44_) || tinukoy (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); tinukoy ang #elif (_AVR_ATtiny25_) || tinukoy (_ AVR_ATtiny45_) || tinukoy (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif pagkaantala (2); // Maghintay para sa Vref upang maayos ang ADCSRA | = _BV (ADSC); // Start conversion habang (bit_is_set (ADCSRA, ADSC)); // pagsukat uint8_t mababa = ADCL; // dapat basahin muna ang ADCL - pagkatapos ay i-lock nito ang ADCH uint8_t high = ADCH; // unlock ang parehong mahabang resulta = (mataas << 8) | mababa; resulta = 1125300L / resulta; // Kalkulahin ang Vcc (sa mV); 1125300 = 1.1 * 1023 * 1000 resulta ng pagbabalik; // Vcc in millivolts} void beep (int note, int duration) {// Play tone on buzzerPin tone (9, note, tagal); pagkaantala (tagal); noTone (9); antala (50); }

Hakbang 4: Tangkilikin !!

Binabati kita sa wakas ay nagawa mo ito kung gusto mo ito pagkatapos ay mag-subscribe sa aking youtube channel