Aller au contenu


Clem'

Inscrit(e) (le) 18 juin 2015
Déconnecté Dernière activité sept. 04 2016 15:09
-----

#828474 [Arduino] Un jeu de société sur ca ! :D [Expliqué pour débutant !]

Posté par Clem' - 30 novembre 2015 - 22:14

Bonjour tout le monde ! Voilà un petit projet perso que je souhaite vous partager. 
 

PRESENTATION
 
Je ne sais pas si tout le monde connait le jeu de société Simon je vais donc l'expliquer en quelques mots. Le jeu se compose de 4 lumières (Bleu Jaune Rouge et Vert) et a chaque lumière son propre son. L'ordinateur génère une séquence aléatoirement et le joueur doit la reproduire. Si il réussi on augmente le nombre de notes a reproduire sinon le joueur perds tout simplement.
 
Le principe est donc très simple et très prenant pour un débutant en C sur Arduino.

 

PRE REQUIS

 

Je vais donc proposer mon propre montage sur arduino et expliquer en quelques mots le code et certaines lignes très spécifiques.
 
Le montage suivant a donc été réalisé avec un Starter Kit arduino (seuls quelques bouton poussoir sont a rajouter il me semble).
Le nécéssaire :
 
 
L'arduino, sa breadbord et les cables (Serieux ?)
4 Leds différentes couleur (Rouge Bleue Verte et Jaune de préférence) 
5 Boutons poussoir
Un buzzer
Un ou deux potentiomètre(s)
Un écran LCD
Des résistance de 220 Ohms

 

FONCTIONNALITES

 

Avant de mettre les mains dans le bordel comme on dit chez moi, je préfère exprimer les fonctionnalités finales du projet afin que vous compreniez tous.

 

Jouer au jeu de société (Ca parait logique ca)

Enregistrement du highscore permanent.

Possibilité d'entrer son nom quand le highscore est battu. (Bouton de la LED bleue et rouge pour faire défiler et le bouton démarrage pour valider le caractère)

 

NOTICE

 

Utiliser le bouton situé tout a droite sur le schéma pour démarrer. (Celui sans Led à ses cotés)

Lors de l'entrée du nom : Les bouton de la Led bleue et rouge servent a faire défiler les caractères. (A savoir que le caractère espace est situé après le Z pour ceux ayant un pseudo court)

Le bouton servant a démarrer sert aussi a validé les caractères du nom et à passer au l'entrée suivante.

 

CABLAGE

 

Voilà on a tout ce qu'il faut on va commencer par tout cabler. Voici le schéma de câblage a l'identique du mien. J'ai utiliser deux breadbords mais vous pouvez n'en utiliser qu'une si vous organisez bien votre travail mais moi je suis un peu bordélique et j'ai besoin de place. L'important étant de câbler les mêmes ports sur les mêmes choses car il faut être en cohérence avec le code. 

Spoiler

 
NOTE : N'hésitez pas a rajouter un câble dans le vide depuis le port A0.
 
N'ayez pas peur si vous débutez c'est normal. Ce projet est déjà bien avancé donc un peu compliqué a comprendre mais on va y arriver ! Comme je l'ai dit le schéma aurait pu être bien plus optimisé mais j'ai reproduit a l'identique mon prototype sur le schéma. Avec un peu de jugeote on peu facilement compacter le tout..
 
Une fois le tout câblé a l'identique il faut téléverser le code que voici ci dessous sauf que ce n'est pas si simple il a une petite complication. 
 

 

RESET MEMOIRE (EEPROM)

 

En effet le programme que je vais vous transmettre utilise l'EEPROM de l'arduino. C'est simplement une mémoire permanente sur l'arduino (Comme le disque dur sur votre PC). Le problème étant qu'il faut l'initialiser une première fois afin d'effacer les éventuelles données résiduelles présente dans celle-ci. Si vous n'avez pas compris cette partie, ce n'est pas grave vous n'aurez pas à la refaire. 
 

Spoiler

 

 

CODE
 
Voilà la mémoire est reset a notre propres valeurs on peut maintenant téléverser le code complet du jeu ! Voilà le code.
 

Spoiler

 
Si votre câblage est bien réalisé le jeu devrait normalement marcher. 
 
 
EXPLICATIONS
 
Un peu d'explication techniques niveau code et cablage. 
 
Bon déjà le câble depuis A0 dans le vide c'est pour un aléatoire meilleur. En effet si certains ont pris le temps de lire le code j'ai utiliser cette ligne particulièrement : 

randomSeed(analogRead(0));

Cela permet simplement de set la "graine" d'aléatoirement sur la tension présente aux bornes du port A0. Celle-ci sera toujours différentes en fonction des ondes autour de cette broche et nous avons donc un aléatoire parfait contrairement au random() basique.
 

 

 

Les lignes EEPROM. Elles sont simple mais méritent le détour. C'est ces instructions qui perment la sauvegarde et la lecture en mémoire par le biais d'adresses. Cela sert donc a la sauvegarde du score et du nom d'utilisateur.
 

 

 
A quelques endroits du code on peut remarquer cette structure :

do {
    appui = digitalRead(bpDemarrage);
  } while (appui == 1); 

Elle est connue de la plupart des utilisateur avancé mais vaut le détour aussi. C'est simplement une boucle bloquante attendant l'appui sur un bouton (ici le bouton de démarrage) Certains n'aiment pas ce genre de structure car elle est bloquante.
 
 

Les commandes lcd sont classiques elles aussi mais je préfère les expliquer un peu. 
Les plus utilisées sont celles-ci : 

lcd.print();
lcd.clear();
lcd.setCursor(); 

Le lcd.print affiche du texte a l'écran. 
NOTE : Si ce n'est pas une variable le texte ets entre double quote. lcd.print(" MON TEXTE")
Le lcd.clear() efface tout ce qui est affiché a l'écran. 
Le lcd.setCursor est plus complexe au début. Il permet de dire ou il faut écrire le texte qui va suivre cette instruction.
 
 
 
Voilà un peu ce travail m'as pris un peu de temps mais j'en ai pris de plaisir personnel et je souhaiter le partager. Les remarques sont les bienvenue en tout termes (optimisation code ect..) Bien évidemment vous pouvez utiliser tout ce qui est présent ci-dessus sans permission de ma part sinon je ne le mettrai pas a disposition ^^.

 

De même si vous souhaitez des explications sur certaines parties ou si des choses ne sont pas claires je suis disponible ! 

 

Enjoy !




#816732 Freeze sur falcon rgh 2 malgré changement smc

Posté par Clem' - 28 août 2015 - 11:12

Bonjour tout le monde ! 

 

Bon quelques nouvelles qui me vont a merveille. **m@dbox m'as mp et m'as bien aidé ! Ma console était encore compatible rgh 1 donc j'ai exploité ca. Il a pris un screen de mon xell et m'as générer une retail. Puis il m'as généré une freeboot en rgh 1 (que j'avait deja fait) et la sienne de me faisait pas freeze au bout de 45 min de jeu donc elle ne freeze plus. 

 

Merci encore m@d pour les nand ! 

 

Problème résolu merci a tout le monde d'avoir pris le temps de m'aidé c'est super sympa !