INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
In hierdie handleiding gaan ek u wys hoe u 'n spelkonsole kan maak met behulp van Arduino nano. Dus, as u gedetailleerde video daaroor wil sien, kyk dan op my youtube -kanaal
Voorrade
As u by hierdie skakels koop, sal dit my help om meer projekte te gee
1) ARDUINO NANO2) OLED DISPLAY3) DRUKKNOPPE 4) DRAADE
Stap 1: soldeer al die komponente
Nadat u al die komponente gekry het, moet u al die komponente soldeer soos in hierdie stroombaan -diagram getoon
Stap 2: Rangskik al die dinge op plekke
Na alles soldeer, rangskik al die komponente soos volg om dit 'n mooi voorkoms te gee
Stap 3: Programmering
Uiteindelik, nadat u al die stappe behoorlik gevolg het, is dit tyd om die onderstaande kode na Arduino op te laai
#insluit
#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, 0xFF, 0x,, 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, 0x0,, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0, 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,, 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, 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, 0xB 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 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, 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xB0, 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}; ongeldige opstelling () {pinMode (3, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); pinMode (11, INPUT_PULLUP); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); vertoon.display (); 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 ("deur VRAJ"); display.setCursor (65, 20); vertoon.display (); 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 gaan = 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; // spoed van bullet 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 vlak = 1; int sentre = 95; ongetekende lang pocetno = 0; ongetekende lang odabrano = 0; ongetekende lang trenutno = 0; ongetekende lang nivovrije = 0; int poz = 30; leemte -lus () {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); as (poc == 0) {pocetno = millis (); odabrano = ewekansig (400, 1200); poc = 1; } trenutno = millis (); // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno; vlak = vlak+1; brzina = brzina+1; // brizna neprijateljevog metka if (vlak % 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;} anders {nep = nep-bkugle;} if (nep> = (64-promjer)) smjer = 1; as (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; } as (rx4 <1) {ispaljeno = 0; rx4 = 200;} as (zivoti == 0) gaan = 1; } if (go == 1) {if (zivoti == 0) {toon (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 ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("telling:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("vlak:"); display.setCursor (44, 40); display.println (vlak); display.setCursor (7, 50); display.println ("tyd (e):"); display.setCursor (60, 50); display.println (trenutno/1000); vertoon.display (); as (digitalRead (3) == 0) {toon (9, 280, 300); vertraging (300); toon (9, 250, 200); vertraging (200); toon (9, 370, 300); vertraging (300); ponovo (); }}} leegte ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; gaan = 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; vlak = 1; pocetno = 0; odabrano = 0; trenutno = 0; nivovrije = 0; } lang readVcc () {// Lees 1.1V verwysing teen AVcc // stel die verwysing na Vcc en die meting op die interne 1.1V verwysing #as gedefinieer (_ AVR_ATmega32U4_) || gedefinieer (_ AVR_ATmega1280_) || gedefinieer (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif gedefinieer (_AVR_ATtiny24_) || gedefinieer (_ AVR_ATtiny44_) || gedefinieer (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif gedefinieer (_AVR_ATtiny25_) || gedefinieer (_ AVR_ATtiny45_) || gedefinieer (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif vertraging (2); // Wag totdat Vref ADCSRA | = _BV (ADSC) regstel; // Begin omskakeling terwyl (bit_is_set (ADCSRA, ADSC)); // meet uint8_t laag = ADCL; // moet eers ADCL lees - dit sluit dan ADCH uint8_t hoog = ADCH; // ontsluit albei lang resultate = (hoog << 8) | laag; resultaat = 1125300L / resultaat; // Bereken Vcc (in mV); 1125300 = 1,1*1023*1000 opbrengsresultaat; // Vcc in millivolts} leeg piep (int noot, int duur) {// Speel toon op buzzerPin toon (9, noot, duur); vertraging (duur); noTone (9); vertraging (50); }
Stap 4: Geniet !
Baie geluk ? U het dit uiteindelik gemaak, as u daarvan hou, teken dan in op my YouTube -kanaal