Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
In deze tutorial laat ik je zien hoe je een gameconsole kunt maken met Arduino nano. Dus als je een gedetailleerde video erover wilt zien, bekijk het dan op mijn YouTube-kanaal
Benodigdheden
Als je via deze links koopt, zal het me helpen je meer projecten te geven
1) ARDUINO NANO2) OLED-DISPLAY3) DRUKKNOPPEN4) DRADEN
Stap 1: Alle componenten solderen
Dus nadat je alle componenten hebt gekregen, moet je alle componenten solderen zoals weergegeven in dit schakelschema
Stap 2: Schik alle dingen op plaatsen
Na het solderen alles zo rangschikken om het een mooie uitstraling te geven
Stap 3: Programmeren
Dus, eindelijk, nadat je alle stappen goed hebt gevolgd, is het tijd om de onderstaande code naar Arduino te uploaden
#erbij betrekken
#include #include #include #include //#include #define 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; const unsigned char PROGMEM dioda16 = { 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x0xFF, 0xFF,00, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00 }; const unsigned char PROGMEM storm = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x007 0x00, 0xF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30,00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x002, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE001, 0x00,, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xFC, 0x1F, 0x, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x0680, 0x1,, 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, 0x0x1, 0x90,x 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x0026, 0x00, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC880, 0x00, 0x 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0x6 0x, 0x 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0,00, 0x00,00, 0xF8, 0x00, 0x00 }; void setup () { pinMode (3, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); pinMode (11, INPUT_PULLUP); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); weergave.weergave(); display.clearDisplay(); display.setTextSize(0); display.drawBitmap(6, 11, storm, 48, 48, 1); display.setFont(&FreeSans9pt7b); display.setTextColor(WIT); 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("Dood"); display.setFont(); display.setCursor(65, 42); display.println("ster "); display.setTextSize(0); display.setCursor(65, 55); display.println("door VRAJ"); display.setCursor(65, 20); weergave.weergave(); display.setFont(); piep (a, 500); piep (a, 500); piep (a, 500); piep (f, 350); piep (cH, 150); piep (a, 500); piep (f, 350); piep (cH, 150); piep (a, 650); vertraging (500); vertraging (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; // snelheid van opsommingsteken 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; niet-ondertekende lange pocetno=0; niet-ondertekende lange odabrano=0; niet-ondertekende lange trenutno=0; ongesigneerd lang 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= willekeurig (400, 1200); pok=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; toon (9, 100, 100); zivoti=zivoti-1; } if(ry2>=pozicija-8 && ry2<=pozicija+8) if(rx24) { rx2=-50; ry2=-50; toon (9, 100, 100); zivoti=zivoti-1; } if(ry3>=pozicija-8 && ry3<=pozicija+8) if(rx34) { rx3=-50; ry3=-50; toon (9, 100, 100); zivoti=zivoti-1; } if(ry4>=pozicija-8 && ry4<=pozicija+8) if(rx44) { rx4=200; ry4=-50; ispaljeno=0; toon (9, 100, 100); zivoti=zivoti-1; } if(rx4<1){ ispaljeno=0; rx4=200;} if(zivoti==0) go=1; } if(go==1) { if(zivoti==0){ tone(9, 200, 300); vertraging (300); toon (9, 250, 200); vertraging (200); toon (9, 300, 300); vertraging (300); zivoti=5; } display.clearDisplay(); display.setFont(); display.setTextSize(2); display.setTextColor(WIT); display.setCursor(7, 10); display.println("SPEL OVER!"); display.setTextSize(1); display.setCursor(7, 30); display.println("score:"); display.setCursor(44, 30); display.println(bodovi); display.setCursor(7, 40); display.println("niveau:"); display.setCursor(44, 40); display.println(nivo); display.setCursor(7, 50); display.println("tijd(en):"); display.setCursor(60, 50); display.println(trenutno/1000); weergave.weergave(); if(digitalRead(3)==0) {toon(9, 280, 300); vertraging (300); toon (9, 250, 200); vertraging (200); toon (9, 370, 300); vertraging (300); ponovo(); } } } void ponovo() { metx=0; mety=0; postoji=0; nep=8; smjer=0; ga = 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; pok=0; ispaljeno=0; nivo=1; pocetno=0; odabrano=0; trenutno=0; nivovrije=0; } long readVcc () {// Lees 1.1V-referentie tegen AVcc // stel de referentie in op Vcc en de meting op de interne 1.1V-referentie #if gedefinieerd (_AVR_ATmega32U4_) || gedefinieerd(_AVR_ATmega1280_) || gedefinieerd(_AVR_ATmega2560_) ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif gedefinieerd (_AVR_ATtiny24_) || gedefinieerd(_AVR_ATtiny44_) || gedefinieerd(_AVR_ATtiny84_) ADMUX = _BV(MUX5) | _BV(MUX0); #elif gedefinieerd (_AVR_ATtiny25_) || gedefinieerd(_AVR_ATtiny45_) || gedefinieerd(_AVR_ATtiny85_) ADMUX = _BV(MUX3) | _BV(MUX2); #else ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #endif vertraging(2); // Wacht tot Vref ADCSRA heeft afgehandeld |= _BV(ADSC); // Start conversie terwijl (bit_is_set (ADCSRA, ADSC)); // meten uint8_t laag = ADCL; // moet eerst ADCL lezen - het vergrendelt vervolgens ADCH uint8_t high = ADCH; // ontgrendelt beide lange resultaat = (hoog<<8) | laag; resultaat = 1125300L / resultaat; // Bereken Vcc (in mV); 1125300 = 1,1*1023*1000 retourresultaat; // Vcc in millivolts } void piep (int noot, int duur) {// Speel toon op zoemerPin toon (9, noot, duur); vertraging (duur); geen toon (9); vertraging (50); }
Stap 4: Geniet!
Gefeliciteerd ? je hebt het eindelijk gehaald, dus als je het leuk vond, abonneer je dan op mijn YouTube-kanaal