Мазмуну:

DIY оюн консолу Arduino аркылуу: 4 кадам
DIY оюн консолу Arduino аркылуу: 4 кадам

Video: DIY оюн консолу Arduino аркылуу: 4 кадам

Video: DIY оюн консолу Arduino аркылуу: 4 кадам
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Ноябрь
Anonim
Image
Image

Бул үйрөткүчтө мен сизге Arduino нано менен оюн консолун кантип жасоону көрсөтөм. Андыктан, эгер сиз ал жөнүндө деталдуу видеону көргүңүз келсе, менин ютуб каналыма кирип көрүңүз

Жабдуулар

Эгерде сиз бул шилтемелерден сатып алсаңыз, анда ал сизге көбүрөөк долбоорлорду берүүгө жардам берет

1) ARDUINO NANO2) OLED DISPLAY3) PUSH BUTTONS 4) WIRES

1 -кадам: Бардык компоненттерди ширетүү

Ырахат !!!
Ырахат !!!

Ошентип, бардык компоненттерди алгандан кийин, бул схемада көрсөтүлгөндөй, бардык компоненттерди ширетүү керек

2 -кадам: Бардык нерселерди жерлерге жайгаштырыңыз

Баары ширетилгенден кийин, ага жагымдуу көрүнүш берүү үчүн бардык компоненттерди ушул сыяктуу иреттеңиз

3 -кадам: Программалоо

Ошентип, акыры бардык кадамдарды туура аткаргандан кийин, төмөндөгү кодду Arduinoго жүктөө убактысы келди

#кошуу

#кошуу #кошуу #кошуу #кошуу // #кошуу #аныктоо 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, 0x7F, 0x1F, 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, 0x7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xBF, 0xBF, 0xFF, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x0, 0x70,, 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, 0xD0, 0x01 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0x07, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC7, 0xC, 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFA, 0xFF, 0xFF, 0xF7 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0x00, 0x00 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 (АК); 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 ("Өлүм"); 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); бип (а, 500); бип (а, 500); бип (f, 350); бип (cH, 150); бип (а, 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; белгисиз узун тренутно = 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) {тон (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 ("ОЮН БУТТУ!"); 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 ("time (s):"); 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 (); }}} von ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; go = 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; } long readVcc () {// Read 1.1V reference to 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); #башка 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 бийик = ADCH кулпулайт; // эки натыйжаны тең ачат = (жогорку << 8) | төмөн; натыйжа = 1125300L / жыйынтык; // Vccти эсептөө (мВ менен); 1125300 = 1.1*1023*1000 кайтаруу натыйжасы; // Милливольттогу Vcc} боштук сигналы (int note, int duration) {// BuzzerPin тонунда ойнотуу обону (9, нота, узактыгы); кечигүү (узактыгы); noTone (9); кечиктирүү (50); }

4 -кадам: ырахат алыңыз !

Куттуктайм? акыры ушундай кылдыңыз, эгер сизге жакса анда менин ютуб каналыма жазылыңыз

Сунушталууда: