Πίνακας περιεχομένων:

Cyclone LED Arcade Game: 4 Βήματα
Cyclone LED Arcade Game: 4 Βήματα

Βίντεο: Cyclone LED Arcade Game: 4 Βήματα

Βίντεο: Cyclone LED Arcade Game: 4 Βήματα
Βίντεο: Sergio Llull wins the EuroLeague for Real Madrid! 2024, Σεπτέμβριος
Anonim
Image
Image
Εγκατάσταση στο Fixture
Εγκατάσταση στο Fixture

Ο σκοπός αυτού του έργου ήταν να δημιουργήσει ένα απλό παιχνίδι χρησιμοποιώντας ένα Arduino που θα ήταν διαδραστικό και διασκεδαστικό για τα παιδιά. Θυμάμαι ότι το παιχνίδι Cyclone arcade ήταν ένα από τα αγαπημένα μου παιχνίδια arcade όταν ήμουν νεότερος, οπότε αποφάσισα να το επαναλάβω. Αυτό είναι ένα πολύ απλό έργο που αποτελείται από ένα Arduino, μια σειρά από ξεχωριστά διευθετήσιμα LED και ένα κουμπί.

Ο στόχος του παιχνιδιού είναι να σταματήσει το φως ποδηλασίας όταν φτάσει στην ενδεικτική (κόκκινη) λυχνία LED. Εάν είναι επιτυχής, το επίπεδο δυσκολίας θα αυξηθεί. Εάν δεν είναι επιτυχής, ο κύκλος φωτός θα επανεκκινηθεί στο τρέχον επίπεδο δυσκολίας.

Αυτό το διδακτικό ήταν ένας τεράστιος πόρος για τον πυρήνα της κωδικοποίησης μου.

Βήμα 1: Συγκέντρωση προμηθειών

  • Κύρια εξαρτήματα:

    • Arduino (χρησιμοποίησα UNO)
    • Συμβολοσειρά LED με ξεχωριστή διεύθυνση (χρησιμοποίησα σύνδεσμο)
    • Κουμπί (χρησιμοποίησα σύνδεσμο)
    • Τυπωμένος πίνακας κυκλωμάτων (PCB) ή breadboard
    • Τροφοδοσία (χρησιμοποίησα δύο ξεχωριστά τροφοδοτικά, μπορεί να ξεφύγετε με ένα αν είστε δημιουργικοί)

      • 5V 3A για LED
      • 9V 1A για Arduino
  • Δομή:

    • Ηλεκτρονικό περίβλημα (τροποποίησα ένα ξύλινο φωτιστικό από την καλή θέληση)
    • Περίβλημα LED (τροποποίησα το τυπικό ρολόι τοίχου και άνοιξα τρύπες χρησιμοποιώντας τα αναγνωριστικά λεπτών ως σημάδια οπών. Χρησιμοποιήστε ξύλινο ρολόι αν είναι δυνατόν για να διευκολύνετε τη διάτρηση.)
    • Περίβλημα κουμπιού (χρησιμοποίησα σωλήνα PVC αγκώνα)
  • Εργαλεία / Άλλα υλικά:

    • Εφεδρική καλωδίωση για το κύκλωμά σας
    • Αντίσταση 10K (πτυσσόμενη αντίσταση για διακόπτη) και 470 ohm (για καλώδιο δεδομένων σε LED)
    • Τρυπάνι για τη δημιουργία οπών για τη στέγαση των LED και την πραγματοποίηση τυχόν απαραίτητων οπών στο εξάρτημα σας για να περάσετε τα καλώδια
    • Συγκολλητικό σίδερο για συγκόλληση του κυκλώματος σας σε PCB
    • Πιστόλι ζεστής κόλλας για τη στερέωση των LED στο φωτιστικό σας
    • Velcro ή κάποια μέσα διασφάλισης του πλαισίου μαζί
    • Φλάντζες προαιρετικές για οπές που ανοίγονται για να περάσουν καλώδια

Βήμα 2: Μεταφόρτωση κώδικα

Βεβαιωθείτε ότι έχετε κατεβάσει και προσθέσετε τη βιβλιοθήκη "FastLED"

Ο πυρήνας του κώδικα (κενός βρόχος) αποτελείται από δύο καταστάσεις: πατήστε το κουμπί ψηλά (Τέλος παιχνιδιού) και το κουμπί χαμηλό (Αναπαραγωγή). Μόλις ο χρήστης πατήσει το κουμπί, η διεύθυνση LED στην οποία έχει σταματήσει η φωτεινή ένδειξη συγκρίνεται με τη διεύθυνση της κεντρικής λυχνίας LED. Εάν δεν είναι τα ίδια, όλες οι λυχνίες αναβοσβήνουν δύο φορές κόκκινο και το τρέχον επίπεδο επανεκκινείται. Εάν είναι τα ίδια, το cylon (σενάριο βιβλιοθήκης FastLED) εκτελείται δύο φορές, το επίπεδο δυσκολίας αυξάνεται και η αναπαραγωγή συνεχίζει. Μόλις ο παίκτης κερδίσει το τελευταίο επίπεδο, ο κύλινδρος τρέχει όγδοος φορές και το παιχνίδι ξεκινά ξανά στο επίπεδο 1.

// Cyclone Game

#include "FastLED.h" // up to 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // range 0-64 #define BRIGHTNESS 50 // ορισμός επιπέδων δυσκολίας #define EASY 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // Δυσκολία εκκίνησης σε δυσκολία = 1; // Ορίστε τη σειρά των led led CRGB [NUM_LEDS]. // Ο παίκτης κέρδισε αυτόν τον γύρο; Αυτή η ετικέτα χρησιμοποιείται για παραμέτρους δυσκολίας. bool wonThisRound = false; // Θέση εκκίνησης του φωτιστικού ποδηλάτου int LEDaddress = 0; // Λειτουργεί το παιχνίδι; bool Παίζοντας = true; // Είναι η πρώτη νίκη; bool CycleEnded = true; // Λεπτομέρειες κουμπιού const int buttonPin = 9; int buttonState = 0; // Αρχικοποιήστε τη βιβλιοθήκη led και τις λειτουργίες arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Το κρέας και οι πατάτες // Two Modes - Playing and End Game void loop () {// END GAME buttonState = digitalRead (buttonPin); εάν (buttonState == Υ HIGHΗΛΗ) {Αναπαραγωγή = ψευδής; // Ο χρήστης πάτησε το κουμπί και η λυχνία LED σταμάτησε στη νικήτρια διεύθυνση. για (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } leds [CENTER_LED] = CRGB:: Κόκκινο; leds [LEDaddress] = CRGB:: Green; FastLED.show (); εάν (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Βρίσκει απόσταση μεταξύ του φωτισμένου led και του κεντρικού led εάν (diff == 0) {wonThisRound = true; // Ο παίκτης κέρδισε με επιτυχία το επίπεδο εάν (δυσκολία! = MISSION_IMPOSSIBLE) {για (int i = 0; i <2; i ++) {cylon (); }} if (δυσκολία == MISSION_IMPOSSIBLE) {για (int i = 0; i <8; i ++) {cylon (); } δυσκολία = 0; } raiseDifficulty (); wonThisRound = false; } else {καθυστέρηση (1000); για (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } Διεύθυνση LED = 0; καθυστέρηση (250)? buttonState = digitalRead (buttonPin); εάν (buttonState == LOW) {Παίζοντας = true? }} // ΠΑΙΖΟΝΤΑΣ αν (Παίζει) {για (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Απενεργοποιεί όλα τα leds} leds [CENTER_LED] = CRGB:: Red; // Ορίζει το χρώμα του κέντρου led σε πράσινα led [LEDaddress] = CRGB:: Green; // Ρυθμίζει το χρώμα led led στο κόκκινο FastLED.show (); // Αρχικοποιεί τον κύκλο φωτός LEDaddress ++; // Ορίζει τον κύκλο φωτός σε ένα led κάθε φορά εάν (LEDaddress == NUM_LEDS) {LEDaddress = 0; } καθυστέρηση (getTime (δυσκολία)); buttonState = digitalRead (buttonPin); εάν (buttonState == Υ HIGHΗΛΗ) {Αναπαραγωγή = ψευδής; CycleEnded = true; }}} // Παράμετροι επιπέδου int getTime (int diff) // Επιστρέφει την χρονική καθυστέρηση για βάση κίνησης led βάσει δυσκολίας {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; Διακοπή; θήκη MEDIUM: timeValue = 80; Διακοπή; θήκη HARD: timeValue = 60; Διακοπή; περίπτωση ON_SPEED: timeValue = 40; Διακοπή; θήκη SONIC_SPEED: timeValue = 30; Διακοπή; θήκη ROCKET_SPEED: timeValue = 20; Διακοπή; θήκη LIGHT_SPEED: timeValue = 13; Διακοπή; περίπτωση MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Επιστροφή του ποσού καθυστέρησης} // Η δυσκολία νίκης αυξάνει τις παραμέτρους void افزایشΔυσκολία () {if (δυσκολία! = MISSION_IMPOSSIBLE && wonThisRound) {δυσκολία ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); καθυστέρηση (500)? fill_solid (led, NUM_LEDS, CRGB:: Black); FastLED.show (); καθυστέρηση (500)? } // Won LED Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Πρώτα σύρετε το led προς μία κατεύθυνση για (int i = 0; i = 0; i--) {// Ορίστε το led i'th σε κόκκινα led = CHSV (απόχρωση ++, 255, 255); // Εμφάνιση των οδηγήσεων FastLED.show (); // τώρα που δείξαμε τα led, επαναφέρετε το led i'th σε μαύρο // leds = CRGB:: Black; fadeall (); // Περιμένετε λίγο πριν κάνουμε ένα βρόχο και ξανακάνουμε καθυστέρηση (10). }}

Βήμα 3: Εγκατάσταση στο Fixture

Εγκατάσταση στο Fixture
Εγκατάσταση στο Fixture
Εγκατάσταση στο Fixture
Εγκατάσταση στο Fixture

Δεν πρόκειται να μπω σε λεπτομέρειες σε αυτήν την ενότητα. Υπάρχουν χίλιοι διαφορετικοί τρόποι για να ακολουθήσετε αυτό το κομμάτι και νομίζω ότι πρέπει να είστε δημιουργικοί για να φαίνεται πώς σας αρέσει. Τούτου λεχθέντος, το ρολόι ήταν αρκετά βολικό για χρήση για τη στέγαση των LED καθώς είχε ενδείξεις λεπτών που μπορούσα να χρησιμοποιήσω ως σήμανση τρυπανιών. Επίσης, το γυάλινο κάλυμμα μου επιτρέπει επίσης να το χρησιμοποιήσω ως τραπέζι.

Το velcro ήταν πολύ χρήσιμο επίσης για τη στερέωση του φωτιστικού LED στο εξάρτημα του ηλεκτρονικού περιβλήματος. Χρησιμοποίησα επίσης velcro στο Arduino. Αυτό το έκανε πολύ βολικό για να τραβήξω το Arduino αν θέλω ποτέ να τροποποιήσω τον κώδικα.

Συνιστάται: