Arduino ашиглан DIY тоглоомын консол: 4 алхам
Arduino ашиглан DIY тоглоомын консол: 4 алхам
Anonim
Image
Image

Энэхүү гарын авлагад би Arduino нано ашиглан тоглоомын консолыг хэрхэн яаж хийхийг танд үзүүлэх болно. Тиймээс, хэрэв та энэ талаар дэлгэрэнгүй видеог үзэхийг хүсч байвал миний youtube суваг дээрээс үзээрэй

Хангамж

Хэрэв та энэ линкээс худалдаж авбал энэ нь танд илүү олон төсөл өгөхөд тусална

1) ARDUINO NANO2) OLED DISPLAY3) PUSH BUTTONS4) УТАС

Алхам 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, 0x1F, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00}; Const гарын үсэг зураагүй Хорхой 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, 0x0, 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, 0xC7 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; дэлгэц.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;} өөр {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 ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("оноо:"); display.setCursor (44, 30); дэлгэц.println (bodovi); display.setCursor (7, 40); display.println ("түвшин:"); display.setCursor (44, 40); дэлгэц.println (nivo); display.setCursor (7, 50); display.println ("цаг (ууд):"); display.setCursor (60, 50); дэлгэц.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {ая (9, 280, 300); саатал (300); ая (9, 250, 200); саатал (200); ая (9, 370, 300); саатал (300); поново (); }}} von ponovo () {metx = 0; met = 0; постожи = 0; nep = 8; smjer = 0; явах = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; бодови = 0; брзина = 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 () {// AVcc -ийн эсрэг 1.1V лавлагаа уншина уу // лавлагаа 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) | бага; үр дүн = 1125300L / үр дүн; // Vcc -ийг тооцоолох (mV -ээр); 1125300 = 1.1*1023*1000 буцах үр дүн; // Vcc милливольтоор} хоосон дуугаралт (int note, int duration) {// BuzzerPin ая дээр тоглуулах ая (9, тэмдэглэл, үргэлжлэх хугацаа); саатал (үргэлжлэх хугацаа); noTone (9); саатал (50); }

Алхам 4: Сайхан амраарай !

Баяр хүргэе? Та эцэст нь үүнийг хийлээ, хэрэв танд таалагдсан бол миний youtube сувгийг бүртгүүлээрэй

Зөвлөмж болгож буй: