Fort Boyard Jeu des bâtonnets avec Arduino

Auteur avatarTess | Dernière modification 15/10/2019 par Pierreb

Fort Boyard Jeu des bâtonnets avec Arduino 400px-Cablage.png
Vous aussi, jouez au jeu des bâtonnets, le fameux jeu culte de Fort Boyard, en utilisant votre Arduino. 11 bâtonnets sont disposés en ligne. 2 joueurs face à face retirent tour à tour un, deux ou trois bâtonnets. Le joueur qui aura le malheur de retirer le dernier perdra la partie.
Licence : Attribution (CC-BY)

Introduction

Un micro-contrôleur est un circuit imprimé programmable via un pc, pouvant communiquer avec des appareils externes (moteurs, diodes... en sortie et capteurs en entrée). Il s'agit ici d'activer ou non les sorties, suivant les évènements en entrée ou les paramètres internes.

Étape 1 - Démarrer

  • Démarrer le logiciel Arduino
  • Copier dans le logiciel le programme ci-dessous, puis aller dans « édition » et cliquer sur « téléversement »

Voici le code :

// --- Programme Arduino --- //Projet Baton //par : Floran Masson, Kristen Joie, Kévin Jan, Alexandre Devalavieille, Josselin Kerdraon int i; //Utile pour les boucles //Les diodes sont stockées en mémoire dans un tableau int TABLEAUDIODE[12]={2,3,4,5,6,7,8,9,10,11,12,13}; //On associe les boutons en entrée int BOUTON14 = 14; // int BOUTON15 = 15; // int BOUTON16 = 16; // int BOUTON17 = 17; // int BOUTON18 = 18; // int BOUTON19 = 19; // //Ces variables servent à rendre les vérifications plus claires int APPUI = 1; int PAS_APPUI = 0; //Etat des boutons int ETAT_BOUTON14; int ETAT_BOUTON15; int ETAT_BOUTON16; int ETAT_BOUTON17; int ETAT_BOUTON18; int ETAT_BOUTON19; //Variables variables int nbr=13; //Nombre de bâtons restants int ordre=1; //À qui c'est de jouer ? 1 : Joueur 1, 2 : Joueur 2 void setup() { // dÉbut de la fonction setup()

 // --- ici instructions à exécuter au démarrage --- 
 // ------- Broches en sortie -------  

for(i=2 ; i++ ; i<=13) { pinMode(TABLEAUDIODE[i], OUTPUT); }

 pinMode(BOUTON14, INPUT); //met le bouton en entree
 pinMode(BOUTON15, INPUT); //met le bouton en entree
 pinMode(BOUTON16, INPUT); //met le bouton en entree
 pinMode(BOUTON17, INPUT); //met le bouton en entree
 pinMode(BOUTON18, INPUT); //met le bouton en entree
 pinMode(BOUTON19, INPUT); //met le bouton en entree
 //------- initialisation des LEDs au début = feu 1 au rouge et feu 2 au vert

//Au début du jeu, toutes les diodes sont allumÉes digitalWrite(TABLEAUDIODE[0],HIGH); digitalWrite(TABLEAUDIODE[1],HIGH); digitalWrite(TABLEAUDIODE[2],HIGH); digitalWrite(TABLEAUDIODE[3],HIGH); digitalWrite(TABLEAUDIODE[4],HIGH); digitalWrite(TABLEAUDIODE[5],HIGH); digitalWrite(TABLEAUDIODE[6],HIGH); digitalWrite(TABLEAUDIODE[7],HIGH); digitalWrite(TABLEAUDIODE[8],HIGH); digitalWrite(TABLEAUDIODE[9],HIGH); digitalWrite(TABLEAUDIODE[10],HIGH); digitalWrite(TABLEAUDIODE[11],HIGH); delay(5000); } // fin de la fonction setup() void loop() {

 //permet la lecture des boutons
 ETAT_BOUTON14=digitalRead(BOUTON14); //Joueur A : retirer 1
 ETAT_BOUTON15=digitalRead(BOUTON15); //Joueur A : retirer 2
 ETAT_BOUTON16=digitalRead(BOUTON16); //Joueur A : retirer 3
 ETAT_BOUTON17=digitalRead(BOUTON17); //Joueur B : retirer 1
 ETAT_BOUTON18=digitalRead(BOUTON18); //Joueur B : retirer 2
 ETAT_BOUTON19=digitalRead(BOUTON19); //Joueur B : retirer 3 

//Joueur A if (ETAT_BOUTON14 == APPUI)&&(ordre == 1)) {

   //Retirer 1 bâton
   nbr-=1;  //Le nombre de bâtons est diminué de 1
   ordre=2; //C'est au joueur 2 de jouer

} if ((ETAT_BOUTON15 == APPUI)&&(ordre == 1)) {

   //Retirer 2 bâtons
   nbr-=2;  //Le nombre de bâtons est diminué de 1
   ordre=2; //C'est au joueur 2 de jouer

} if ((ETAT_BOUTON16 == APPUI)&&(ordre == 1)) {

   //Retirer 3 bâtons
   nbr-=3;  //Le nombre de bâtons est diminué de 3
   ordre=2; //C'est au joueur 2 de jouer

} //Joueur B if ((ETAT_BOUTON17 == APPUI)&&(ordre == 2)) {

   //Retirer 1 bâton
   nbr-=1;  //Le nombre de bâtons est diminue de 1
   ordre=1; //C'est au joueur 1 de jouer 

} if ((ETAT_BOUTON18 == APPUI)&&(ordre == 2)) {

   //Retirer 2 bâtons
   nbr-=2;  //Le nombre de bâtons est diminué de 2
   ordre=1; //C'est au joueur 1 de jouer

} if ((ETAT_BOUTON19 == APPUI)&&(ordre == 2)) {

   //Retirer 3 bâtons
   nbr-=3;  //Le nombre de bâtons est diminué de 3
   ordre=1; //C'est au joueur 1 de jouer

} //Affichage for (i=2; i++; i<nbr) {

   digitalWrite(TABLEAUDIODE[i],HIGH);  //Les bâtons restants sont allumés

} for (i=nbr; i++; i<=13) {

   digitalWrite(TABLEAUDIODE[i],LOW);  //Les bâtons retirés ne sont pas allumés

} }

Étape 2 - Montage

Le montage

Il suffit de faire le montage sur la plaque Labdec comme ci-dessous (cliquer sur la photo pour avoir le schéma en entier)



Étape 3 - Resultat

Si tout se passe bien, toutes les diodes sont alors allumées. Chaque joueur se voit attribuer 3 boutons qui éteindront respectivement une, deux ou trois LED. Les LED sont des représentations symboliques des bâtonnets. Le joueur qui éteindra la dernière source de lumière visible sur la plaque Labdec perdra immédiatement la manche. Il suffit d'appuyer sur le bouton reset de l'Arduino pour relancer une manche.

Comment ça marche ?

Observations : que voit-on ?

Les LED s'éteignent tour à tour lorsque l'on appuie sur un bouton. En fonction du bouton appuyé, une deux ou trois LED s'éteignent.

Explications

Le bouton poussoir permet d'envoyer un signal sur une entrée de l'Arduino. Celui-ci l'interprète grâce au code transmis, et va alors émettre un signal sur ses sorties qui va éteindre ou non les diodes branchées sur celles-ci.

L'électron qui est allé voir Arduino a été bloqué par un bouton poussoir. En appuyant dessus, je lui permet de passer.

"L'électron va taper à la porte de monsieur diode : « - Que tu es beau quand tu t'illumines ! - Mais voyons électron, si tu veux que je m'illumine, tu dois marcher dans l'autre sens ! » Ainsi, l'électron fit demi-tour et la diode brilla de mille feux."

Plus d'explications

Nous avons écrit un programme sur un ordinateur, qui est traduit et envoyé à l'Arduino dans un langage machine qu'il peut comprendre.


Dernière modification 15/10/2019 par user:Pierreb. Draft