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

Παιχνίδι IR-Remote Color Guessing Color: 3 Βήματα
Παιχνίδι IR-Remote Color Guessing Color: 3 Βήματα

Βίντεο: Παιχνίδι IR-Remote Color Guessing Color: 3 Βήματα

Βίντεο: Παιχνίδι IR-Remote Color Guessing Color: 3 Βήματα
Βίντεο: 3 ΣΥΝΤΑΓΕΣ ΠΑΤΕ ΣΥΚΩΤΙ ΚΟΤΟΠΟΥΛΟ!! ΟΙ ΚΑΛΕΣΜΕΝΟΙ ΘΑ ΣΟΚΑΡΙΣΤΟΥΝ!! ΕΚΠΟΜΠΗ ΜΑΓΕΙΡΙΚΗΣ 2024, Νοέμβριος
Anonim
Παιχνίδι IR-Remote Color Guessing Color
Παιχνίδι IR-Remote Color Guessing Color

Σε αυτό το διδακτικό, θα σας δείξω πώς να ελέγχετε ένα led RGB χρησιμοποιώντας ένα τηλεχειριστήριο IR και να κάνετε ένα διασκεδαστικό παιχνίδι από αυτό!

Βήμα 1: Απαιτούνται εξαρτήματα

Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά

Τα μέρη που θα χρειαστείτε για αυτό το έργο είναι:

- arduino one- RGB Led- IR-Sensor

(η μέτρηση led εξαρτάται από το παιχνίδι, τον αριθμό των ζωών ή)- 2 πράσινα leds- 1 κίτρινο led- 1 πορτοκαλί led- 3 κόκκινα led

Βήμα 2: Κωδικός

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

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int levelPin1 = 2;

int levelPin2 = 3; int levelPin3 = 4; int levelPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); decode_results αποτελέσματα?

// χρώματα εισαγωγής

int είσοδος = {-1, -1, -1}; int χρώμα = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// δημιουργία χρωμάτων

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// μεταβλητές παιχνιδιού

int diff = 200;

int levelNumber = 1;

int επίπεδο = {-1, -1, -1, -1};

int t = 0;

int επίπεδο1 = 255;

int επίπεδο2 = 0; int επίπεδο3 = 0; int επίπεδο4 = 0;

int lives = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

Serial.begin (9600); irrecv.enableIRIn (); // ξεκινήστε το pinMode του δέκτη (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

void loop () {

εάν (irrecv.decode (& results)) // λάβετε τα σήματα από το τηλεχειριστήριο {Serial.println (results.value, DEC); // εμφανίζει τα σήματα που λαμβάνονται από κάθε πατημένο κουμπί irrecv.resume (); // λάβετε τον επόμενο διακόπτη σήματος (results.value) {// μετατρέψτε τα σήματα σε αριθμούς στα κουμπιά και εκχωρήστε ενέργειες στα κουμπιά

θήκη 109562864:

addWaarde (1); Διακοπή;

υπόθεση 109562824:

addWaarde (2); Διακοπή;

υπόθεση 109562856:

addWaarde (3); Διακοπή;

υπόθεση 109562872:

addWaarde (4); Διακοπή;

θήκη 109562820:

addWaarde (5); Διακοπή;

υπόθεση 109562852:

addWaarde (6); Διακοπή;

θήκη 109562868:

addWaarde (7); Διακοπή;

υπόθεση 109562828:

addWaarde (8); Διακοπή;

θήκη 109562860:

addWaarde (9); Διακοπή;

υπόθεση 109562876:

addWaarde (0); Διακοπή;

υπόθεση 109562818: // oud ding enter/R CLK

handleInput (); Διακοπή;

θήκη 109562816: // δύναμη ουντ ντινγκ

handleColor (); Διακοπή; θήκη 109562878: // oud ding cancel/L CLK resetColor (); Διακοπή;

θήκη 109562866: // lege knop midden

randomColor (); Διακοπή;

υπόθεση 109562830: // pijltje naar rechts

displayEverything (); Διακοπή; θήκη 109562838: // esc case 109562822: // Πηγή AV resetEverything (); Διακοπή; }

// ανάθεση κουμπιών στο τηλεχειριστήριο για τον έλεγχο του χρώματος: με αυτόν τον τρόπο, οι παίκτες μπορούν να δουν πώς φαίνονται τα χρώματα και πώς να τα συνδυάζουν, // πριν ξεκινήσετε ένα παιχνίδι. switch (results.value) {case 109562840: rood = 255; Διακοπή;

υπόθεση 109562844:

groen = 255; Διακοπή;

θήκη 109562850:

blauw = 255; Διακοπή;

θήκη 109562836:

rood = 0; groen = 0; blauw = 0; Διακοπή; }

}

analogWrite (redPin, abs (255 - rood)); // έλεγχος led RGB: αντίστροφα, επειδή το δικό μου είναι καλωδιωμένο αντίστροφα.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));

// έλεγχος ζωντανών οδηγήσεων

αν (ζει == 2) {levens1 = 0? } if (lives == 1) {levens2 = 0; } if (lives == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// έλεγχος led επιπέδου

if (levelNumber == 1) {level1 = 255? } if (levelNumber == 2) {level1 = 255; επίπεδο2 = 255; } if (levelNumber == 3) {level1 = 255; επίπεδο2 = 255; επίπεδο3 = 255; } if (levelNumber == 4) {level1 = 255; επίπεδο2 = 255; επίπεδο3 = 255; επίπεδο4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int value) {// προσθέστε πατημένη τιμή στη λίστα

εάν (indexNumber == 3) {

ΕΠΙΣΤΡΟΦΗ; }

εάν (εισαγωγή [indexNumber] == -1) {

εισαγωγή [indexNumber] = τιμή. indexNumber ++; }}

void handleInput () {// make a 'waarde' (value) εκτός της λίστας

waarde = abs (είσοδος [0] * 100 + είσοδος [1] * 10 + είσοδος [2]); είσοδος [0] = -1; // επαναφορά της εισόδου σήματος [1] = -1; είσοδος [2] = -1;

indexNumber = 0;

Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }

void addColor (int waarde) {// προσθέστε το τριψήφιο 'waarde' σε μια λίστα

αν (indexColor == 3) {

ΕΠΙΣΤΡΟΦΗ; }

εάν (χρώμα [indexColor] == -1) {

χρώμα [indexColor] = waarde; εάν (χρώμα [indexColor]> 255) {χρώμα [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// κάντε το φως να γίνει τυχαίο χρώμα και αποθηκεύστε το σε μεταβλητές

roodRandom = τυχαίο (0, 255);

groenRandom = τυχαίο (0, 255);

blauwRandom = τυχαίο (0, 255);

rood = roodRandom;

groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// μετατρέψτε το 'waarde' από τη λίστα σε μεταβλητές 'Gok' (μαντέψτε)

roodGok = χρώμα [0]; groenGok = χρώμα [1]; blauwGok = χρώμα [2]; // ελέγξτε εάν οι μεταβλητές Gok διαφέρουν πάρα πολύ με το πραγματικό τυχαίο χρώμα: αν ναι, εμφανίστε την εικασία για τρία δευτερόλεπτα, αναβοσβήνετε πράσινο και αλλάξτε ξανά το χρώμα, προσθέστε ένα επίπεδο και μειώστε την επιτρεπόμενη διαφορά // αν όχι, εμφανίστε το μαντέψτε για τρία δευτερόλεπτα, αναβοσβήνετε με κόκκινο χρώμα και αφαιρέστε μια ζωή // εάν είστε εκτός ζωής, το παιχνίδι ξεκινά ξανά εάν (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= διαφορά) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); καθυστέρηση (3000)? analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); καθυστέρηση (300)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (300)? analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); καθυστέρηση (300)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (300)?

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; διαφορά -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); καθυστέρηση (3000)? analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (300)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (300)? analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (300)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (300)? Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

ζει--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (100)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (100)? analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (100)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (100)? analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (100)? analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); καθυστέρηση (100)? resetEverything (); }

}

void resetColor () {// χρήση για τιμές επαναφοράς, για λάθος πάτημα ή κάθε νέα εικασία (μόνο για βεβαιότητα)

χρώμα [0] = -1; χρώμα [1] = -1; χρώμα [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// επανεκκίνηση του παιχνιδιού

χρώμα [0] = -1; χρώμα [1] = -1; χρώμα [2] = -1;

indexNumber = 0;

indexColor = 0;

ζει = 3?

rood = 0; groen = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

επίπεδο 1 = 255;

επίπεδο2 = 0; επίπεδο3 = 0; επίπεδο4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// χρησιμοποιήστε αυτό για να εμφανίσετε σημαντικές πληροφορίες στη σειριακή οθόνη

Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

Serial.print ("rood =");

Serial.println (rood); Serial.print ("groen ="); Serial.println (groen); Serial.print ("blauw ="); Serial.println (blauw);

Serial.print ("waarde opgeslagen:");

Serial.println (waarde); }

Βήμα 3: Δημιουργία

Χτίζω
Χτίζω
Χτίζω
Χτίζω
Χτίζω
Χτίζω
Χτίζω
Χτίζω

Προφανώς θέλετε μια ωραία κατασκευή για αυτό το έργο. Αυτό το μέρος είναι αρκετά ανοιχτό για ερμηνεία, αλλά υπάρχουν μερικά πράγματα που πρέπει να έχετε κατά νου με αυτό: - κρατήστε λεπτό τον μπροστινό πίνακα, έτσι ώστε να μπορείτε ακόμα να κολλήσετε τα led σας και ο δέκτης IR εξακολουθεί να λειτουργεί

- κρατήστε αρκετό χώρο στην κατασκευή για το arduino και μια σανίδα συγκόλλησης

- βεβαιωθείτε ότι υπάρχει μια τρύπα στο πίσω μέρος για τη δύναμη του arduino

Έχω προσθέσει ένα πρόχειρο σχέδιο για την καλωδίωση.

Καλή τύχη και καλή διασκέδαση!

Συνιστάται: