Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créer un jeu de mémoire Arduino

Composants et fournitures

Arduino UNO
× 1
Résistances SparkFun 330 ohms
nous n'en avons besoin que de 4
× 1
Résistances SparkFun 10k ohm
nous n'en avons besoin que de 4
× 1
DEL assorties SparkFun
nous avons besoin de 4 LED de couleurs différentes
× 1
SparkFun Mini enceinte
Vous pouvez vous en passer si vous ne vous souciez pas du son
× 1
Planche à pain SparkFun (taille normale)
× 1
Câbles de raccordement (générique)
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Vous vous souvenez du jeu « Simon » ? Beaucoup de gens de mon âge (nés dans les années 70) ont perdu beaucoup de temps à y jouer. Le jeu était simple, il avait 4 boutons de couleurs différentes qui s'allumaient en séquence et il fallait répéter la séquence. Chaque fois que vous aviez raison, le jeu vous redonnait la séquence avec une couleur supplémentaire à la fin.

J'en ai eu un pour Noël il y a bien longtemps, mais j'ai ensuite déménagé et déménagé, et j'en ai déménagé d'autres donc le jeu s'est perdu dans l'une des nombreuses boîtes qui ne sont jamais déballées d'un déménagement à l'autre...

En tant qu'"adulte", j'ai découvert les joies de l'Arduino et avec cela, j'ai eu l'opportunité de faire revivre mon ami de longue date perdu.

Ce tutoriel va vous montrer comment faire un jeu similaire en utilisant un Arduino Uno quelques LED et résistances et un circuit relativement simple.

Le programme lui-même peut être un peu compliqué pour un débutant alors j'ai essayé d'expliquer dans le code ce qu'il fait et comment.

La façon la plus simple de lancer ce jeu est la suivante.

1) Connectez le circuit exactement comme indiqué sur le schéma. La couleur des fils n'a pas d'importance donc si vous n'avez plus de fils noirs, ça va. :)

2) Collez le code source dans votre éditeur Arduino préféré et téléchargez-le sur la carte

3) Jouez au jeu

Le jeu démarre après environ 3 secondes avec 5 clignotements lents de toutes les LED.

Si une ou plusieurs LED ne clignotent pas, vérifiez le câblage. Sur ma planche, les très petits boutons ne reposent pas toujours correctement et ont tendance à sortir d'eux-mêmes.

Si le câblage semble correct, essayez d'inverser une LED qui fonctionne avec une autre qui ne fonctionne pas pour voir s'il s'agit du câblage ou de la LED elle-même.

Une fois les 5 clignotements terminés, une LED s'allumera. Je ne peux pas vous dire lequel, c'est une surprise :) Appuyez sur le bouton de cette LED. Cette LED s'allumera à nouveau suivie d'une nouvelle. Appuyez sur les bons boutons dans l'ordre... Vous voyez où je veux en venir...

Puis, assez bientôt, vous les verrez tous clignoter rapidement. Cela signifie que vous avez perdu. :D

La dernière séquence qui vous a été donnée sera jouée afin que vous puissiez compter vos points suivis des 5 clignotements lents du début indiquant que le jeu recommence.

Vous avez 2 secondes pour appuyer sur chaque bouton.

Voilà! Amusez-vous bien !

Vous voulez rendre les choses un peu plus difficiles ? Pourquoi ne pas changer la première ligne du code en une valeur différente ?

#define PLAYER_WAIT_TIME 2000  

Ou vous pouvez ajouter une autre LED, si vous en avez une... Pour cela, vous devez d'abord reproduire cette portion du circuit :

Le fil orange ici ira à n'importe quelle broche inutilisée sur votre Arduino (évitez 0 et 1 cependant)

Modifiez ensuite les lignes suivantes dans le code :

byte noPins =4byte pins[] ={2, 13, 10, 8} ;  

si vous ajoutiez une LED sur la broche 6, le code deviendrait

byte noPins =5byte pins[] ={2, 13, 10, 8, 6} ;  

Une petite astuce pour écrire du code Arduino :

void setup() { delay(3000); Serial.begin(9600); Réinitialiser(); }  

Mettez un court délai comme première instruction de votre fonction setup(). Il est très facile de faire entrer l'Arduino dans une boucle infinie ou de le verrouiller d'une manière ou d'une autre. Si cela se produit, ce court délai vous permet de réinitialiser votre Arduino et de télécharger un croquis vierge avant qu'il ne se verrouille à nouveau. .

J'ai finalement pris cette petite idée et l'ai rendue portable...

Si vous voulez voir une idée vraiment cool pour un jeu similaire (mais beaucoup plus avancé). Vérifiez ce https://www.instructables.com/id/Lego-Mini-Memory-Game par Peter Kent. Il a créé le jeu sur mobile avec une interface avec une voiture Lego. C'est vraiment génial !

Code

  • Code de jeu de mémoire
Code de jeu de mémoireArduino
C'est le code complet du jeu. Copiez et collez-le simplement dans votre IDE préféré et téléchargez-le sur l'Arduino.
#define PLAYER_WAIT_TIME 2000 // Le temps autorisé entre les pressions sur les boutons - séquence d'octets de 2 s[100] ; // Stockage du light sequencebyte curLen =0; // Longueur actuelle de l'octet de séquence inputCount =0; // Le nombre de fois que le joueur a appuyé sur un bouton (correct) dans un octet de tour donné lastInput =0; // Dernière entrée du playerbyte expRd =0; // La LED qui est supposée être allumée par le playerbool btnDwn =false; // Utilisé pour vérifier si un bouton est enfoncé bool wait =false; // Le programme attend-il que l'utilisateur appuie sur un bouton bool resetFlag =false; // Utilisé pour indiquer au programme qu'une fois que le joueur a perdu l'octet soundPin =5; // Octet de sortie du haut-parleur noPins =4; // Nombre de boutons/LED (Pendant que je travaillais là-dessus, je n'utilisais que 2 LED) // Vous pourriez rendre le jeu plus difficile en ajoutant une combinaison LED/bouton/résistances supplémentaire.byte pins[] ={2, 13, 10 , 8} ; // Broches d'entrée de bouton et broches de sortie de LED - modifiez ces valeurs si vous souhaitez connecter vos boutons à d'autres broches // Le nombre d'éléments doit correspondre à noPins en dessous de long inputTime =0; // Variable de minuterie pour le délai entre les entrées utilisateurvoid setup() { delay(3000); // C'est pour me donner le temps de respirer après la connexion de l'arduino - peut être supprimé si vous voulez Serial.begin (9600); // Démarrer le moniteur série. Cela peut également être supprimé tant que vous supprimez toutes les références à Serial en dessous de Reset();}////// Définit toutes les broches comme INPUT ou OUTPUT en fonction de la valeur de 'dir' ///void setPinDirection(byte dir){ for(byte i =0; i  rapide | grand nombre -> slow///void flash(short freq){ setPinDirection(OUTPUT); /// Nous activons maintenant les LEDS for(int i =0; i <5; i++){ writeAllPins(HIGH); bip (50); retard(freq); writeAllPins(LOW); retard(freq); }}//////Cette fonction réinitialise toutes les variables du jeu à leurs valeurs par défaut///void Reset(){ flash(500); CourLen =0 ; inputCount =0 ; lastInput =0 ; expRd =0 ; btnDwn =faux ; attendre =faux ; resetFlag =false;}////// Utilisateur perdu///void Lose(){ flash(50); }////// L'arduino montre à l'utilisateur ce qui doit être mémorisé /// Également appelé après avoir perdu pour vous montrer quelle était votre dernière séquence /// void playSequence () { // Parcourez la séquence stockée et allumez le LED à leur tour for(int i =0; i  PLAYER_WAIT_TIME){ // Si le joueur prend plus que le temps autorisé, DoLoseProcess(); // Tout est perdu :( return; } if(!btnDwn){ // expRd =sequence[inputCount]; // Trouver la valeur que nous attendons du lecteur Serial.print("Expected:"); // Serial Monitor Output - Doit être supprimé si vous avez supprimé le Serial.begin au-dessus de Serial.println(expRd); // Sortie du moniteur série - Doit être supprimé si vous avez supprimé le Serial.begin ci-dessus pour (int i =0; i  

Schémas

simonsays_siKds3Jmk2.fzz

Processus de fabrication

  1. Créer un moniteur Ambilight à l'aide d'Arduino
  2. Jeu de gyroscope Arduino avec MPU-6050
  3. Gyroscope amusant avec l'anneau NeoPixel
  4. Jeu Arduino Pong - Écran OLED
  5. Contrôleur de jeu Arduino
  6. Arduino Touch Breakout Game
  7. Pixie :une montre-bracelet NeoPixel basée sur Arduino
  8. Jeu Pixel Chaser
  9. Jeu Dino automatisé utilisant arduino