Retrouve aussi le tuto sur mon blog http://retroetgeek.com/geek/arduino-tutoriel-jeu-de-tir-westernduino/
On passe par l’explication du code !
Codes des cibles ( à télécharger à la fin)
Au début de mon programme je défini mes pin avec les cibles ,servo bouton et buzzer (j’aurai du définir mes pin avec des #define et pas des int, cela prends moins de place, mais cela fonctionne quand même).
Des variables de moyenne pour mes photorésistances, un tableau pour contrôler quelle cible est levée et d’autres petites variables.
Les round sont les tableaux qui contiennent les ordres des servos et des séquences de jeu.
Trois informations à l’intérieur , le temps en ms , le numéro du servo et l’angle à atteindre.
La variable tempsRound contient la durée du round du jeu.
Encore 2 variable de temps et séquence pour le jeu.
Les points du jeu qui ne sont pas utilisé ici ( pour la v2 oui ) mais comptés quand même.
On inclus une bibliothèque pour les notes du buzzer et les commandes servo
J’appelle mes servo et je les insères dans un tableau.
J’ai ensuite mes différentes variables pour jouer des mélodies, puis des tableaux contenant actuellement 2 mélodies et un tableau contenant le temps des notes.
Partie setup ou j’ai activé le serial pour contrôler quelques informations et je défini mes pin en entrée.
J’ai une fonction unlockServos pour attacher mes servo et les positionner en position basse.
LockServos détache les servo pour éviter que les perturbations électrique fasse bouger les servos.
initSensorLight ici est commenté dans le setup car on l’utilise à chaque démarrage de round de jeu.
Partie loop je contrôle l’état du bouton start pour démarrer le jeu si il est à l’état HIGH et je défini start a 1, les points a 0 et j’arrête la musique si elle est en cours.
On continue avec un switch pour aiguiller le jeu, pour start égal a 1 on démarre le round1, même chose pour le 2 round2 et j’ai mon cas de défaut ou je joue la musique et je relance la musique toutes les 60 secondes si aucun round n’est choisi.
Venons en a nos fonctions , initSensorLight sert à faire une moyenne sur nos photorésistances , on récupère 10 valeurs sur chaque photorésistance et on fait sa moyenne pour mieux détecter les variations de chaque capteur qui peut être différent.
La fonction preStart remet à 0 les point de la manche , appelle initSensorLight et fait un décompte avant de lancer la séquence de round.
Autre fonction scoreManche pour terminer la séquence de jeu avec une mélodie et l’affichage des score en V2.
Notre fonction demarrerRound est la plus importante car elle gère la séquence de jeu, en argument on a le temps du jeu et la séquence de jeu.
Je débloque les servo avec unlockServos puis un preStart pour lancer le décompte.
J’ai une boucle qui va tourner tant que le temps n’est pas écoulé et je vais activer mes actions au fur et à mesure de l’avancement du temps et faire bouger mes servos; j’autorise mes cibles quand elles montent pour que l’on puisse tirer dessus.
Puis j’ai mes différents contrôle des cibles quand elles sont activées je vérifie si leurs valeurs est supérieures à 50 par rapport a leur moyenne.
Si une cible est touchée elle redescend, un bip retenti et je compte 1 point.
Hors de ma boucle de temps on incrémente la valeur de start pour passer à la séquence de jeu suivante, je bloque mes servos et j’appelle scoreManche.
Encore une fonction cette fois ci pour jouer de la musique , jouerMusique lui retourne une valeur , true ou false pour me prévenir quand la musique est terminée.
boolMelody permet de lire la musique ou non , je récupère la durée de note de la melodie sélectionnée, je contrôle que je ne joue pas 2 fois la même note ( car ici je ne bloque pas mon arduino pendant le temps d’attente ). Je calcule mes temps de pause entre les notes et je progresse dans la mélodie suivant le temps .
A la fin si j’arrive au bout de mon tableau ou que une durée de note est égal a 999 alors je pourrai terminer la mélodie.
Et dernière fonction pour arrêter la musique avec stopMusique.
Code du pistolet (à télécharger à la fin)
Idem que pour les cible on initialise les pin nécessaires pour notre arduino, le bouton pour tirer et la commande du laser.
Aprés quelques variables pour notre programme pour éviter que le laser soit constamment allumé shootLaser et multiShoot.
Deux variable de temps pour séquencer le laser avec tempsLaser et tempsPause.
Partie setup on initialise le pin du bouton en INPUT et le laser en OUTPUT.
Dans mon loop j’ai une condition qui contrôle que le bouton est appuyé et que multiShoot est supérieur à 2 car dans ma condition quand mon bouton est a l’état bas d’incrémente multishoot ( on doit passer pas l’état bas au moins 3 itérations pour pouvoir retirer ).
Puis dernière condition qui nous permet d’activer le laser, allume le laser un temps, puis l’éteint.
J’en ai terminé avec le fonctionnement du programme, c’est assez lourd à expliquer mais j’espère que vous avez compris l’essentiel.
Je vous met le code à télécharger pour réaliser votre jeu, vous allez pouvoir rajouter des niveaux, les modifier et faire ce que vous voulez avec.
Télécharger les codes : Westernduino_V1
La fabrication :
Pour le support des cibles j’ai construit le base en bois de taille 50cm de long sur lesquels j’ai collé au pistolet à colle mes servo.
Pour lever les cibles j’ai utilisé des bâtons de glaces sur lesquels j’ai collé mes photorésistances; le tout est démontable ou non.
Et pour les cibles j’ai utilisé du carton plume sur lequel j’ai collé ce que je souhaite et j’ai découpé tout cela, j’ai crée 2 points d’encrage pour les bâtonnets de glace et c’est parti.
Je referai toute la structure pour que ce soit joli et pratique à utiliser dans une version 2.
Télécharger les cowboys : Cowboy
Niveau pistolet j’ai acheté un pistolet que j’ai trouvé dans une boutique de déguisement, j’ai cherché un pistolet assez grand et vide a l’intérieur pour un mettre l’électronique.
Si tu souhaites réaliser ce même jeu libre à toi de trouver les matériaux nécessaires, on peut trouver différentes manières de fabriquer ce jeu.
Maintenant c’est à ton tour, partagez vos création de jeu de tir avec le hashtag #retroetgeek #westernduino et fais profiter la communauté .
Si tu pense que cette vidéo et tuto peut intéresser quelqu’un n’hésite pas à la partager, j’ai passé pas mal de temps à construire ce tuto autant que cela serve à un maximum de maker.
C’était ma contribution au challenge des makers pour ouiaremakers.com bonne chance à tous les participantes et participants.
N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagram , twitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel, me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel ,à partager les projets que vous aimeriez créer etc…
Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.
Merci les RetroGeeker et RetroGeekeuse