Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Dans ce instructable, je vais vous montrer comment contrôler une led RVB à l'aide d'une télécommande IR et en faire un jeu amusant !
Étape 1: Pièces nécessaires
Les pièces dont vous aurez besoin pour ce projet sont:
- arduino one- Led RGB- Capteur IR
(le nombre de led dépend du jeu, du nombre de vies ou)- 2 leds vertes- 1 led jaune - 1 led orange- 3 leds rouges
Étape 2: Coder
#comprendre
int redPin = 10;
int greenPin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int niveauPin1 = 2;
int niveauPin2 = 3; int niveauPin3 = 4; int niveauPin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN); decode_results résultats;
// entrer les couleurs
int entrée = {-1, -1, -1}; int couleur = {-1, -1, -1};
int indexNumber = 0;
int indexCouleur = 0;
int waarde = 0;
int rood = 0;
int vert = 0; int blauw = 0;
// générer des couleurs
int roodRandom = 0; int groenAléatoire = 0; int blauwRandom = 0;
// variables de jeu
diff int = 200;
int levelNumber = 1;
int niveau = {-1, -1, -1, -1};
entier t = 0;
int niveau1 = 255;
int niveau2 = 0; int niveau3 = 0; int niveau4 = 0;
vies int = 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(); // démarre le récepteur pinMode(redPin, OUTPUT); pinMode(vertPin, SORTIE); pinMode(bluePin, SORTIE);
pinMode(levensPin1, SORTIE);
pinMode(levensPin2, SORTIE); pinMode(levensPin3, SORTIE);
}
boucle vide() {
if (irrecv.decode(&results)) // reçoit les signaux de la télécommande { Serial.println(results.value, DEC); // affiche les signaux reçus de chaque bouton enfoncé irrecv.resume(); // recevoir le prochain signal switch(results.value){ // transformer les signaux en nombres sur les boutons et assigner des actions aux boutons
cas 109562864:
addWaarde(1); Pause;
cas 109562824:
addWaarde(2); Pause;
cas 109562856:
addWaarde(3); Pause;
cas 109562872:
addWaarde(4); Pause;
cas 109562820:
ajouterWaarde(5); Pause;
cas 109562852:
ajouterWaarde(6); Pause;
cas 109562868:
addWaarde(7); Pause;
cas 109562828:
addWaarde(8); Pause;
cas 109562860:
addWaarde(9); Pause;
cas 109562876:
addWaarde(0); Pause;
cas 109562818: //oud ding enter/R CLK
handleInput(); Pause;
cas 109562816: //oud ding puissance
handleCouleur(); Pause; case 109562878: //oud ding cancel/L CLK resetColor(); Pause;
affaire 109562866: //lege knop midden
couleur aléatoire(); Pause;
affaire 109562830: // pijltje naar rechts
afficherTout(); Pause; case 109562838: // esc case 109562822: // source AV resetEverything(); Pause; }
// assigner des boutons sur la télécommande pour contrôler la couleur: de cette façon, les joueurs peuvent voir à quoi ressemblent les couleurs et comment les combiner, // avant de commencer une partie. switch(results.value){ case 109562840: rood = 255; Pause;
cas 109562844:
vert = 255; Pause;
cas 109562850:
bleu = 255; Pause;
cas 109562836:
rood = 0; vert = 0; bleu = 0; Pause; }
}
analogWrite(redPin, abs(255 - rood)); // contrôle de la led RVB: à l'envers, car la mienne est câblée à l'envers.
analogWrite(greenPin, abs(255 - groen)); analogWrite(bluePin, abs(255 - blauw));
// contrôle des leds en direct
if (vit == 2){ levens1 = 0; } if (vit == 1){ levens2 = 0; } if (vit == 0){ levens3 = 0; } analogWrite(levensPin1, levens1); analogWrite(levensPin2, levens2); analogWrite(levensPin3, levens3);
// contrôle des leds de niveau
if (levelNumber == 1){ level1 = 255; } if (levelNumber == 2){ level1 = 255; niveau2 = 255; } if (levelNumber == 3){ level1 = 255; niveau2 = 255; niveau3 = 255; } if (levelNumber == 4){ level1 = 255; niveau2 = 255; niveau3 = 255; niveau4 = 255; } analogWrite(levelPin1, level1); analogWrite(levelPin2, level2); analogWrite(levelPin3, level3); analogWrite(levelPin4, level4);
}
void addWaarde(int value) { // ajoute la valeur pressée à la liste
if (indexNumber == 3) {
revenir; }
if (entrée[indexNumber] == -1){
input[indexNumber] = valeur; indexNumber++; } }
void handleInput() { // crée un 'waarde' (valeur) de la liste
waarde = abs(entrée[0] * 100 + entrée[1] * 10 + entrée[2]); entrée[0] = -1; // réinitialiser le signal input[1] = -1; entrée[2] = -1;
indexNumber = 0;
Serial.print("waarde opgeslagen: "); Serial.println(waarde); addColor(waarde); }
void addColor(int waarde) { // ajoute le 'waarde' à 3 chiffres à une liste
if (indexCouleur == 3) {
revenir; }
if (couleur[indexCouleur] == -1){
couleur[indexCouleur] = waarde; if (color[indexColor] > 255){ color[indexColor] = 255; } indexCouleur++; }
}
void randomColor(){ // fait que la lumière prend une couleur aléatoire et l'enregistre dans des variables
roodRandom = aléatoire (0, 255);
groenAléatoire = aléatoire(0, 255);
blauwAléatoire = aléatoire(0, 255);
rood = roodRandom;
groen = groenRandom; blauw = blauwAléatoire; Serial.print("roodRandom = "); Serial.println(roodRandom); Serial.print("groenRandom = "); Serial.println(groenRandom); Serial.print("blauwRandom = "); Serial.println(blauwRandom);
}
void handleColor() { // transforme le 'waarde' de la liste en variables 'Gok' (deviner)
roodGok = couleur[0]; groenGok = couleur[1]; blauwGok = couleur[2]; // vérifie si les variables Gok diffèrent trop avec la vraie couleur aléatoire: si c'est le cas, affiche la supposition pendant trois secondes, clignote en vert et change à nouveau de couleur, ajoute un niveau et réduit la différence autorisée // sinon, affiche le devinez pendant trois secondes, clignotez en rouge et déduisez une vie // si vous n'avez plus de vies, le jeu recommence si (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); retard(3000); analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); retard (300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (300); analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); retard (300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (300);
Serial.print("roodGok = ");
Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); resetCouleur(); couleur aléatoire(); levelNumber++; diff -= 50; } else{ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); retard(3000); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (300); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);
resetCouleur();
des vies--; } if (live == 0){ analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (100); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (100); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); retard (100); réinitialiserTout(); }
}
void resetColor () { // utiliser pour les valeurs de réinitialisation, pour une mauvaise pression ou chaque nouvelle supposition (juste pour plus de certitude)
couleur[0] = -1; couleur[1] = -1; couleur[2] = -1;
indexNumber=0;
indexCouleur=0; }
void resetEverything(){ // redémarre le jeu
couleur[0] = -1; couleur[1] = -1; couleur[2] = -1;
indexNumber=0;
indexCouleur=0;
vies = 3;
rood = 0; vert = 0; bleu = 0;
roodRandom = 0;
groenAléatoire = 0; blauwAléatoire = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
niveau1 = 255;
niveau2 = 0; niveau3 = 0; niveau4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything(){ // utiliser ceci pour afficher des informations importantes sur le moniteur série
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); }
Étape 3: Construire
Vous voulez évidemment une belle construction pour ce projet. cette partie est assez ouverte à l'interprétation, mais il y a certaines choses à garder à l'esprit à ce sujet:
- gardez suffisamment d'espace dans la construction pour l'arduino et une carte à souder
- assurez-vous qu'il y a un trou à l'arrière pour la puissance de l'arduino
J'ai ajouté un schéma approximatif pour le câblage.
Bonne chance et amusez-vous bien!