Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Σε αυτό το διδακτικό, θα σας δείξω πώς να ελέγχετε ένα 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
Έχω προσθέσει ένα πρόχειρο σχέδιο για την καλωδίωση.
Καλή τύχη και καλή διασκέδαση!