Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
I denne opplæringen skal jeg vise deg at hvordan kan du lage en spillkonsoll ved hjelp av Arduino nano. Så hvis du vil se detaljert video om den, så sjekk den ut på min youtube -kanal
Rekvisita
Hvis du kjøper fra denne lenken, vil det hjelpe meg å gi deg flere prosjekter
1) ARDUINO NANO2) OLED -DISPLAY3) PUSH -KNAPPER4) TRÅD
Trinn 1: Lodding av alle komponentene
Så etter å ha fått alle komponentene må du lodde alle komponentene som vist i dette kretsdiagrammet
Trinn 2: Ordne alle tingene på steder
Etter lodding ordner du alle komponentene slik at det får et fint utseende
Trinn 3: Programmering
Så endelig, etter å ha fulgt alle trinnene riktig, er det på tide å laste opp koden nedenfor til Arduino
#inkludere
#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, 0x7F, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x7, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0, 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, 0x1, 0x,, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x0, 0x0, 0x0,, 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, 0x0, 0x0, 0x0, 0x0, 0x0 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x0, 0x00, 0x0, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA0, 0x00, 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0x00, 0xF8, 0x00, 0x00}; ugyldig oppsett () {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, storm, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (HVIT); 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 ("Død"); display.setFont (); display.setCursor (65, 42); display.println ("stjerne"); display.setTextSize (0); display.setCursor (65, 55); display.println ("av VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); pip (a, 500); pip (a, 500); pip (a, 500); pip (f, 350); pip (cH, 150); pip (a, 500); pip (f, 350); pip (cH, 150); pip (a, 650); forsinkelse (500); forsinkelse (500); } int metx = 0; int mety = 0; int postoji = 0; int nep = 8; int smjer = 0; int gå = 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; // bullet hastighet 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 nivå = 1; int centar = 95; usignert lang pocetno = 0; usignert lang odabrano = 0; usignert lang trenutno = 0; usignert 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); hvis (poc == 0) {pocetno = millis (); odabrano = tilfeldig (400, 1200); poc = 1; } trenutno = millis (); // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno; nivå = nivå+1; brzina = brzina+1; // brizna neprijateljevog metka if (nivå % 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; tone (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija+8) if (rx24) {rx2 = -50; ry2 = -50; tone (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija+8) if (rx34) {rx3 = -50; ry3 = -50; tone (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija+8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; tone (9, 100, 100); zivoti = zivoti-1; } hvis (rx4 <1) {ispaljeno = 0; rx4 = 200;} hvis (zivoti == 0) gå = 1; } if (go == 1) {if (zivoti == 0) {tone (9, 200, 300); forsinkelse (300); tone (9, 250, 200); forsinkelse (200); tone (9, 300, 300); forsinkelse (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (HVIT); display.setCursor (7, 10); display.println ("SPILL OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("score:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("nivå:"); display.setCursor (44, 40); display.println (nivå); display.setCursor (7, 50); display.println ("tid (er):"); display.setCursor (60, 50); display.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {tone (9, 280, 300); forsinkelse (300); tone (9, 250, 200); forsinkelse (200); tone (9, 370, 300); forsinkelse (300); ponovo (); }}} ugyldig ponovo () {metx = 0; mety = 0; postoji = 0; nei = 8; smjer = 0; gå = 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; nivå = 1; pocetno = 0; odabrano = 0; trenutno = 0; nivovrije = 0; } lang readVcc () {// Les 1.1V referanse mot AVcc // sett referansen til Vcc og målingen til den interne 1.1V referansen #hvis definert (_ AVR_ATmega32U4_) || definert (_ AVR_ATmega1280_) || definert (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif definert (_AVR_ATtiny24_) || definert (_ AVR_ATtiny44_) || definert (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif definert (_AVR_ATtiny25_) || definert (_ AVR_ATtiny45_) || definert (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif forsinkelse (2); // Vent til Vref avregner ADCSRA | = _BV (ADSC); // Start konvertering mens (bit_is_set (ADCSRA, ADSC)); // måling av uint8_t lav = ADCL; // må lese ADCL først - den låser deretter ADCH uint8_t høyt = ADCH; // låser opp begge lange resultat = (høy << 8) | lav; resultat = 1125300L / resultat; // Beregn Vcc (i mV); 1125300 = 1,1*1023*1000 returresultat; // Vcc i millivolt} ugyldig pip (int note, int duration) {// Play tone on buzzerPin tone (9, note, duration); forsinkelse (varighet); noTone (9); forsinkelse (50); }
Trinn 4: Nyt !
Gratulerer ? du klarte det endelig, så hvis du likte det, må du abonnere på YouTube -kanalen min