Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Dalam tutorial ini saya akan menunjukkan kepada Anda bagaimana Anda bisa membuat konsol game menggunakan Arduino nano. Jadi jika Anda ingin melihat video detailnya, lihat di saluran youtube saya
Perlengkapan
Jika Anda membeli dari tautan ini, itu akan membantu saya memberi Anda lebih banyak proyek
1) ARDUINO NANO2) TAMPILAN OLED3) TOMBOL PUSH4) KABEL
Langkah 1: Menyolder Semua Komponen
Jadi, setelah mendapatkan semua komponen Anda harus menyolder semua komponen seperti yang ditunjukkan pada diagram rangkaian ini
Langkah 2: Atur Semua Hal di Tempat
Setelah menyolder semuanya atur semua komponen seperti ini agar terlihat bagus
Langkah 3: Pemrograman
Jadi, akhirnya setelah mengikuti semua langkah dengan benar saatnya untuk mengunggah kode di bawah ini ke Arduino
#termasuk
#include #include #include #include //#include #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); const int c = 261; konstanta int d = 294; const int e = 329; const int f = 349; konstanta int g = 391; const int gS = 415; konstanta int = 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; konstanta 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, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00 }; const unsigned char PROGMEM badai = { 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, 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, 0xF, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x001, 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 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x00, 0x00, 0x 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, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA00, 0x80, 0x80 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF00, 0x00, 0x 0xF8, 0x00, 0x00 }; void setup() { pinMode(3, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); pinMode(11, INPUT_PULLUP); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); tampilan.tampilan(); tampilan.clearDisplay(); tampilan.setTextSize(0); display.drawBitmap(6, 11, badai, 48, 48, 1); display.setFont(&FreeSans9pt7b); display.setTextColor(PUTIH); display.setCursor(65, 14); display.println("xWing"); tampilan.setFont(); display.setCursor(65, 17); tampilan.setTextSize(0); display.println("vs"); display.setCursor(0, 0); float voltaza=bacaVcc()/1000; display.println(voltaza);; display.setFont(&FreeSans9pt7b); display.setCursor(65, 39); display.println("Kematian"); tampilan.setFont(); display.setCursor(65, 42); display.println("bintang"); tampilan.setTextSize(0); display.setCursor(65, 55); display.println("oleh VRAJ"); display.setCursor(65, 20); tampilan.tampilan(); tampilan.setFont(); bip(a, 500); bip(a, 500); bip(a, 500); bip(f, 350); bip(ch, 150); bip(a, 500); bip(f, 350); bip(ch, 150); bip(a, 650); penundaan (500); penundaan (500); } int metx=0; int mety=0; int postoji=0; int nep=8; int smjer=0; int pergi=0; intrx=95; int ry=0; int rx2=95; int ry2=0; int rx3=95; int ry3=0; int bodovi=0; int brzina=3; //kecepatan peluru 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 panjang yang tidak ditandatangani=0; odabrano panjang tanpa tanda=0; trenutno panjang yang tidak ditandatangani=0; nivovrije panjang yang tidak ditandatangani=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=milis(); odabrano= acak(400, 1200); poc=1; } trenutno=milis(); //nivoi jika((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) { tampilan.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; nada (9, 100, 100); zivoti=zivoti-1; } if(ry2>=pozicija-8 && ry2<=pozicija+8) if(rx24) { rx2=-50; ry2=-50; nada (9, 100, 100); zivoti=zivoti-1; } if(ry3>=pozicija-8 && ry3<=pozicija+8) if(rx34) { rx3=-50; ry3=-50; nada (9, 100, 100); zivoti=zivoti-1; } if(ry4>=pozicija-8 && ry4<=pozicija+8) if(rx44) { rx4=200; ry4=-50; ispaljeno=0; nada (9, 100, 100); zivoti=zivoti-1; } if(rx4<1){ ispaljeno=0; rx4=200;} jika(zivoti==0) pergi=1; } jika(pergi==1) { jika(zivoti==0){ nada(9, 200, 300); penundaan (300); nada (9, 250, 200); penundaan (200); nada (9, 300, 300); penundaan (300); zivoti=5; } tampilan.clearDisplay(); tampilan.setFont(); display.setTextSize(2); display.setTextColor(PUTIH); display.setCursor(7, 10); display.println("PERMAINAN SELESAI!"); display.setTextSize(1); display.setCursor(7, 30); display.println("nilai:"); display.setCursor(44, 30); display.println(bodovi); display.setCursor(7, 40); display.println("tingkat:"); display.setCursor(44, 40); tampilan.println(nivo); display.setCursor(7, 50); display.println("waktu:"); display.setCursor(60, 50); display.println(trenutno/1000); tampilan.tampilan(); if(digitalRead(3)==0) { tone(9, 280, 300); penundaan (300); nada (9, 250, 200); penundaan (200); nada (9, 370, 300); penundaan (300); ponovo(); } } } batal ponovo() { metx=0; mety=0; postoji=0; nep=8; smjer=0; pergi=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() { // Baca referensi 1.1V terhadap AVcc // setel referensi ke Vcc dan pengukuran ke referensi 1.1V internal #jika didefinisikan(_AVR_ATmega32U4_) || didefinisikan(_AVR_ATmega1280_) || didefinisikan(_AVR_ATmega2560_) ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif didefinisikan (_AVR_ATtiny24_) || didefinisikan(_AVR_ATtiny44_) || didefinisikan(_AVR_ATtiny84_) ADMUX = _BV(MUX5) | _BV(MUX0); #elif didefinisikan (_AVR_ATtiny25_) || didefinisikan(_AVR_ATtiny45_) || didefinisikan(_AVR_ATtiny85_) ADMUX = _BV(MUX3) | _BV(MUX2); #else ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #endif penundaan (2); // Tunggu Vref untuk menyelesaikan ADCSRA |= _BV(ADSC); // Mulai konversi while (bit_is_set(ADCSRA, ADSC)); // mengukur uint8_t rendah = ADCL; // harus membaca ADCL terlebih dahulu - kemudian mengunci ADCH uint8_t high = ADCH; // membuka kedua hasil panjang = (tinggi<<8) | rendah; hasil = 1125300L / hasil; // Hitung Vcc (dalam mV); 1125300 = 1,1*1023*1000 hasil pengembalian; // Vcc dalam milivolt } void beep(not note, int duration) { //Memutar nada pada nada buzzerPin (9, note, durasi); penundaan (durasi); tidakNada(9); penundaan(50); }
Langkah 4: Nikmati!
Selamat ? Anda akhirnya berhasil jadi jika Anda menyukainya maka berlangganan saluran youtube saya