Κονσόλα παιχνιδιών DIY χρησιμοποιώντας Arduino: 4 βήματα
Κονσόλα παιχνιδιών DIY χρησιμοποιώντας Arduino: 4 βήματα
Anonim
Image
Image

Σε αυτό το σεμινάριο θα σας δείξω πώς μπορείτε να φτιάξετε μια κονσόλα παιχνιδιών χρησιμοποιώντας το Arduino nano. Έτσι, αν θέλετε να δείτε αναλυτικό βίντεο σε αυτό, ελέγξτε το στο κανάλι μου στο youtube

Προμήθειες

Εάν αγοράζετε από αυτούς τους συνδέσμους θα με βοηθήσει να σας δώσω περισσότερα έργα

1) ARDUINO NANO2) OLED DISPLAY 3) PUSH BUTTONS 4) WIRES

Βήμα 1: Συγκόλληση όλων των εξαρτημάτων

Απολαμβάνω!!!
Απολαμβάνω!!!

Έτσι, αφού λάβετε όλα τα εξαρτήματα, πρέπει να κολλήσετε όλα τα εξαρτήματα όπως φαίνεται σε αυτό το διάγραμμα κυκλώματος

Βήμα 2: Τακτοποιήστε όλα τα πράγματα σε μέρη

Μετά τη συγκόλληση, τακτοποιήστε όλα τα εξαρτήματα έτσι ώστε να δώσετε μια ωραία εμφάνιση

Βήμα 3: Προγραμματισμός

Έτσι, τελικά αφού ακολουθήσετε σωστά όλα τα βήματα, ήρθε η ώρα να ανεβάσετε τον παρακάτω κώδικα στο Arduino

#περιλαμβάνω

#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, 0xFF, 0x00, 0x3C, 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, 0x7F 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBx, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0 ως, 0x70, 0x06, 0x06, 0x80, 0x01, 0xE0 ως, 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, 0x7C, 0x03, 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x0x, 0x07, 0xFC, 0xFC, 0x0 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x1 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0 ως, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA0, 0x80, 0x00, 0x6B, 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00}; void setup () {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, καταιγίδα, 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 (voltaza);; 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 (); μπιπ (α, 500)? μπιπ (α, 500)? μπιπ (α, 500)? μπιπ (f, 350)? μπιπ (cH, 150)? μπιπ (α, 500)? μπιπ (f, 350)? μπιπ (cH, 150)? μπιπ (α, 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; // ταχύτητα 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 nivo = 1; int centar = 95; ανυπόγραφο μακρύ pocetno = 0; ανυπόγραφο μακρύ odabrano = 0; ανυπόγραφο μακρύ trenutno = 0; ανυπόγραφο μακρύ 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); εάν (poc == 0) {pocetno = millis (); odabrano = τυχαίο (400, 1200); poc = 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; εάν (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; ispaljeno = 0; τόνος (9, 100, 100). ζιβωτη = ζιβωτη-1; } if (rx4 <1) {ispaljeno = 0; rx4 = 200;} if (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {tone (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 ("GAME OVER!"); 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 (); εάν (digitalRead (3) == 0) {τόνος (9, 280, 300); καθυστέρηση (300)? τόνος (9, 250, 200). καθυστέρηση (200)? τόνος (9, 370, 300). καθυστέρηση (300)? ponovo (); }}} void ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; go = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; Μποντόβι = 0; brzina = 3; // brizna neprijateljevog metka bkugle = 1; najmanja = 600; najveca = 1200; promjer = 12; rx4 = 95; ry4 = 0; ζιβότι = 5; poc = 0; ispaljeno = 0; nivo = 1; pocetno = 0; odabrano = 0; trenutno = 0; nivovrije = 0; } long readVcc () {// Ανάγνωση αναφοράς 1.1V έναντι AVcc // ορίστε την αναφορά στο Vcc και τη μέτρηση στην εσωτερική αναφορά 1.1V #εάν οριστεί (_ 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 note, int duration) {// Αναπαραγωγή τόνου στον ήχο buzzerPin (9, σημείωση, διάρκεια); καθυστέρηση (διάρκεια)? noTone (9); καθυστέρηση (50)? }

Βήμα 4: Απολαύστε !

Συγχαρητήρια; τελικά τα καταφέρατε, αν σας άρεσε, εγγραφείτε στο κανάλι μου στο youtube