Table des matières:

Jeu de devinettes de couleur à distance IR : 3 étapes
Jeu de devinettes de couleur à distance IR : 3 étapes

Vidéo: Jeu de devinettes de couleur à distance IR : 3 étapes

Vidéo: Jeu de devinettes de couleur à distance IR : 3 étapes
Vidéo: Tuto jeux ludique mémoire des couleurs au crochet 2024, Juillet
Anonim
Jeu de devinettes de couleur à distance IR
Jeu de devinettes de couleur à distance IR

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

Pièces nécessaires
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

Construire
Construire
Construire
Construire
Construire
Construire
Construire
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!

Conseillé: