สารบัญ:

DIY เกมคอนโซลโดยใช้ Arduino: 4 ขั้นตอน
DIY เกมคอนโซลโดยใช้ Arduino: 4 ขั้นตอน

วีดีโอ: DIY เกมคอนโซลโดยใช้ Arduino: 4 ขั้นตอน

วีดีโอ: DIY เกมคอนโซลโดยใช้ Arduino: 4 ขั้นตอน
วีดีโอ: Arduino Star Wars Game - how to make 2024, พฤศจิกายน
Anonim
Image
Image

ในบทช่วยสอนนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถสร้างเกมคอนโซลโดยใช้ Arduino nano ได้อย่างไร ดังนั้นหากคุณต้องการดูวิดีโอแบบละเอียดลองดูที่ช่อง youtube ของฉัน

เสบียง

หากคุณซื้อจากลิงค์นี้ มันจะช่วยให้ฉันเสนอโครงการเพิ่มเติมให้คุณ

1) ARDUINO NANO2) จอแสดงผล OLED3) ปุ่มกด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 เป็น = 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; ค่าคงที่ int fH = 698; const int fSH = 740; const int gH = 784; const int gSH = 830; const int aH = 880; const ถ่านที่ไม่ได้ลงชื่อ PROGMEM dioda16 = { 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xFF00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF00, 0xFF00, 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, 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, 0x30000, 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, 0xBF, 0xFC, 0x1F, 0xE1, 0x00, 0x01, 0xBF, 0xFC, 0x1F, 0xE1, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x06, 0E, 0E, 0x06, 0E, 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, 0xF8, 0x09, 0xD0, 0x0B, 0x90x7, 0x1F 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x0026, 0x00, 0x00 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x80, 0x80 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA00, 0x80, 0B 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF00, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF00, 0x00, 0x00, 0x00 0xF8, 0x00, 0x00 }; การตั้งค่าเป็นโมฆะ () { pinMode (3, INPUT_PULLUP); โหมดพิน (12, INPUT_PULLUP); โหมดพิน (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); เสียงบี๊บ (chH, 150); เสียงบี๊บ (a, 500); เสียงบี๊บ (f, 350); เสียงบี๊บ (chH, 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 อิสปาลเจโน=0; int nivo=1; int centar=95; pocetno แบบยาวที่ไม่ได้ลงนาม=0; odabrano ยาวที่ไม่ได้ลงนาม=0; trenutno ยาวที่ไม่ได้ลงนาม=0; nivovrije ยาวที่ไม่ได้ลงนาม=0; int poz=30; วงเป็นโมฆะ () { ถ้า (ไป = = 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); ถ้า(poc==0){ pocetno=มิลลิส(); odabrano= สุ่ม(400, 1200); poc=1; } trenutno=millis(); //nivoi if((trenutno-nivovrije)>50000) { nivovrije=trenutno; นิโว=นิโว+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); ซิโวติ=ซิโวติ-1; } if(ry2>=pozicija-8 && ry2<=pozicija+8) if(rx24) { rx2=-50; ry2=-50; โทน (9, 100, 100); ซิโวติ=ซิโวติ-1; } if(ry3>=pozicija-8 && ry3<=pozicija+8) if(rx34) { rx3=-50; ry3=-50; โทน (9, 100, 100); ซิโวติ=ซิโวติ-1; } if(ry4>=pozicija-8 && ry4<=pozicija+8) if(rx44) { rx4=200; ry4=-50; อิสปาลเจโน=0; โทน (9, 100, 100); ซิโวติ=ซิโวติ-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); ซิโวติ=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("เวลา:"); 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 () { metx=0; mety=0; postoji=0; นพ=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; นเวกา=1200; พรอมเจอร์=12; rx4=95; ry4=0; ซิโวติ=5; poc=0; อิสปาลเจโน=0; นิโว=1; โปเชตโน=0; โอดาบราโน=0; เตรนัทโน=0; นิโวริเย=0; } readVcc แบบยาว () { // อ่านค่าอ้างอิง 1.1V เทียบกับ 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); #else 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, ระยะเวลา int) {// เล่นเสียงบนเสียงกริ่งพิน (9, บันทึก, ระยะเวลา); ล่าช้า(ระยะเวลา); noTone(9); ล่าช้า (50); }

ขั้นตอนที่ 4: สนุก!!

ยินดีด้วย ? ในที่สุดคุณก็ทำสำเร็จ ดังนั้นถ้าคุณชอบก็กดติดตามช่อง youtube ของฉัน

แนะนำ: