Airsoft Krispies

Bonjour à tous et bienvenue


    Boitier avec plusieurs mode de jeu

    Partagez

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Sam 20 Juin - 16:34

    Bonjour aux arduino-softeurs

    Après m'être beaucoup inspiré de ce que j'ai pu voir sur le forum je vous présente à mon tour ma réalisation qui pourra peut être en inspirer d'autres

    Matériel utilisé :
    - 1 arduino uno
    - 1 écran lcd 20x4 en I2C
    - 1 calvier 16 touches
    - 2 boutons poussoirs
    - 1 haut parleur
    - 1 interrupteur
    - 3 transistors
    - 1 bande led rgb
    - 4 paires de fiches banane
    - 1 li-po 11.1v
    - des fils électriques

    Mon boitier se présente donc sous la forme d'une boite de dérivation électrique (dimensions pour ceux que ça intéresse : 21x17x8 cm). Sur le dessus on a donc l'écran, les boutons poussoirs, le claier la bande led et 4 fils connectés grâce aux fiches banane



    Sur le côté j'ai mis un interrupteur pour pouvoir allumer et éteindre le boitier plus facilement sans avoir besoin de l'ouvrir pour accéder à la batterie. Le cable usb de programmation est également accessible en retirant un cache



    J'ai donc programmer 4 modes de jeu :
    - Conquête : contrôle d'un point le plus longtemps possible durant le temps de jeu de la partie (peut également servir de point de respawn comme à Battelfield)
    - Bombe : mode de jeu classique où la bombe peut être désamorcé par code ou en coupant des fils (grâce aux fiches banane). En cas d'erreur de code, le compte à rebours est divisé par 2 ou accélère à chaque erreur. Pour les fils il y a plusieurs cas de figures : aucun effet, réduit le compte à rebours à 1 minute ou l'accélère s'il est déjà inférieur à 1 minute, fait exploser ou désamorce la bombe.
    - Sabotage : deux équipes doivent trouver une bombe cachée (le boitier) et l'amorcer puis la défendre jusqu'à son explosion sans que l'équipe adverse n'en prenne le contrôle pour en faire de même
    - Search & destroy : idem que sabotage mais une fois la bombe amorcée elle doit simplement être désamorcée par l'équipe adverse (pas de changement du contrôle de la bombe)

    Voici le schéma de cablage (attention n'apparait sur ce schéma l'alimentation 3.3v provenant de la carte pour alimenter les leds des boutons poussoirs)


    Je vous mets également d'autres photos pour illustration
    Merci de m'avoir lu












    Dernière édition par Bidou914 le Mer 23 Déc - 11:21, édité 3 fois

    Wood
    boulon d'argent
    boulon d'argent

    Messages : 1110
    Date d'inscription : 03/06/2011
    Age : 39
    Localisation : Liré

    Re: Boitier avec plusieurs mode de jeu

    Message par Wood le Sam 20 Juin - 18:29

    Génial !!! Bien trouvé le système des fiches bananes.

    Manque plus que le tuto.

    freeman83
    boulon d'argent
    boulon d'argent

    Messages : 1221
    Date d'inscription : 23/06/2012
    Age : 38
    Localisation : Rougiers / Var

    Re: Boitier avec plusieurs mode de jeu

    Message par freeman83 le Sam 20 Juin - 22:58

    approuved  et le code par la même occasion. de plus un petit passage par la case présentation ne serai pas de trop, en attendant bienvenu sur le forum...

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Sam 20 Juin - 23:12

    freeman83 a écrit:approuved  et le code par la même occasion. de plus un petit passage par la case présentation ne serai pas de trop, en attendant bienvenu sur le forum...
    La présentation est déjà faite Arrow http://airsoft-krispies.forumactif.org/t4792-presentation-d-un-arduinophile J'avais justement parlé de présenter mon travail Very Happy
    Concernant un tuto et le partage du code ça va venir je prépare un schéma de cablage tout beau tout propre et je partage ça !

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Mer 1 Juil - 12:51

    Et voici le code (merci d'être indulgent le code peut certainement être très amélioré, surtout pour la longueur, mais je ne suis pas un programmeur Smile )
    1ère partie
    Code:
    // Projet_airsoft3.ino

    /////////////////////////////////////////////////////
    //                                                 //
    //          de Pierro pour la team 1911            //
    //                                                 //
    /////////////////////////////////////////////////////

    /////////////////////////////////////////////////////

    //reste a faire : rien pour le moment

    /////////////////////////////////////////////////////
    #include "Wire.h" //bibliothèque wire
    #include "LiquidCrystal_I2C.h" //bibliothèque écran lcd I2C
    #include "Keypad.h" //bibliothèque keypad

    const byte LIGNES = 4;
    const byte COLONNES = 4;

    // définition des pins utilisés
    const int bouton_vert = 8; // bp vert sur pin 6
    const int bouton_rouge = 7; // bp rouge sur pin 7
    const int buzzer = 6; // buzzer sur pin 8
    const int filvert = 15; // fil noir sur pin 15
    const int filjaune = 14; // fil jaune sur pin 14
    const int filbleu = 12; // fil bleu sur pin 12
    const int filblanc = 13; // fil blanc sur pin 13
    const int ledbleu = 9; // led bleu bande RGB sur pin 9
    const int ledrouge = 10; // led rouge bande RGB sur pin 10
    const int ledvert = 11; // led vert bande RGB sur pin 11

    //définition des différentes valeurs utilisées
    int heure = 0; // compteur secondes
    int minute = 0; // compteur minutes
    int seconde = 0; // compteur heures
    int heure_rouge = 0; // compteur heure pour l'équipe rougee
    int heure_vert = 0; //compteur heure pour l'équipe verte
    int minute_rouge = 0; //compteur minute pour l'équipe rougee
    int minute_vert = 0; //compteur minute pour l'équipe verte
    int seconde_rouge = 0; //compteur seconde pour l'équipe rougee
    int seconde_vert = 0; //compteur seconde pour l'équipe verte
    int jeu = 0; //numéro du jeu
    int zone = 0; //numéro de la zone pour conquête
    int numbombe = 0; // numéro de la bobme pour mode sabotage et s&d
    int tempstempo = 0; //temps d'appui pour capturer une zone en mode conquete
    float tempo = 0; //définition du tempo
    int heure_detonation_init = 0; // compteur heure initial pour la détonation
    int minute_detonation_init = 0; // compteur minute initial pour la détonation
    int seconde_detonation_init = 0; // compteur seconde initial pour la détonation
    int heure_detonation = 0; // compteur heure pour la détonation
    int minute_detonation = 0; // compteur minute pour la détonation
    int seconde_detonation = 0; // compteur seconde pour la détonation
    char heureset[2];
    char minuteset[2];
    char secondeset[2];
    char heure_detonationset[2];
    char minute_detonationset[2];
    char seconde_detonationset[2];
    char tempstemposet[2];
    boolean etat_bp_vert; // état de l'appui du bouton vert
    boolean etat_bp_rouge; // état de l'appui du bouton rouge
    boolean etat_filblanc; // etat de coupure du fil blanc
    boolean etat_filbleu; // etat de coupure du fil bleu
    boolean etat_filjaune; // etat de coupure du fil jaune
    boolean etat_filvert; // etat de la coupure du fil noir
    boolean etat_badwire; // etat de la coupure de badwire
    boolean etat_goodwire; // etat de la coupure de goodwire
    boolean etat_oupswire; // etat de la coupure de oupswire
    boolean etat_ledbleu; // etat bleu des led de la bande RGB
    boolean etat_ledrouge; // etat rouge des led de la bande RGB
    boolean etat_ledvert; // etat vert des led de la bande RGB
    int compteur_fil = 0; // compteur pour oupswire
    char password[4]; // nombre de chiffre dans le code
    char mdpentre[4]; // nombre de chiffre entré pour le code
    int mdplong = 0; // nombre de caractère écrit pour le mot de passe
    int mdperreur = 0; // nombre d'erreur dans la saisi du code
    int goodwire = 0; // numéro du fil à couper pour désamorcer la bombe
    int badwire = 0; // numéro du fin à couper pour faire exploser la bombe
    int oupswire = 0; // numéro du fil à couper pour réduire le temps de la bombe
    int nonwire = 0; // numéro du fil à couper inutile

    long secMillis = 0;
    long secMillis_conquete = 0;
    long secMillis_sabotage = 0;
    long secMillis_search = 0;
    long secMillis_bip = 0;
    long secMillis_appui = 0;
    int interval = 1000; // delais pour 1 seconde en ms


    //définition des broches utilisées pour le keypad (lignes et colonnes)
    const int C4 = 2;
    const int C3 = 3;
    const int C2 = 4;
    const int C1 = 5;
    const int L4 = 16;
    const int L3 = 17;
    const int L2 = 18;
    const int L1 = 19;

    //définition des keys
    char keys[LIGNES][COLONNES] =
    {
       {'1','2','3','A'},
       {'4','5','6','B'},
       {'7','8','9','C'},
       {'*','0','#','D'}
    };//fin de définition des keys du keypad

    byte BrochesLignes[LIGNES] = {L1,L2,L3,L4};
    byte BrochesColonnes[COLONNES] = {C1,C2,C3,C4};

    char key;
     
      LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display

      Keypad keypad = Keypad( makeKeymap(keys), BrochesLignes, BrochesColonnes, LIGNES, COLONNES);


    void setup()
    {
       lcd.init();                        //
       lcd.backlight();                  //
       lcd.setCursor(3,0);                  //
       lcd.print("Projet Airsoft");         //
       lcd.setCursor(1,1);                  //
       lcd.print("pour la team 1911");         //  initialisation test du LCD et présentation
       lcd.setCursor(5,2);                  //
       lcd.print("Par Pierro");            //
       lcd.setCursor(0,3);                  //
       lcd.print("Appuyer A pour jouer");      //
       pinMode(filjaune, INPUT_PULLUP); // définition du fil jaune comme entrée
       pinMode(filbleu, INPUT_PULLUP); // définition du fil bleu comme entrée
       pinMode(filblanc, INPUT_PULLUP); // définition du fil blanc comme entrée
       pinMode(bouton_vert, INPUT); // définition pin bp vert comme entrée
       pinMode(bouton_rouge, INPUT); // définition pin bp rouge comme entrée
       pinMode(ledbleu, OUTPUT); // définition pin led bleu comme sortie
       pinMode(ledrouge, OUTPUT); // définition pin led rouge comme sortie
       pinMode(ledvert, OUTPUT); // définition pin led verte comme sortie
       digitalWrite(ledbleu, LOW); // mise à l'état éteint de la led bleu
       digitalWrite(ledrouge, LOW); // mise à l'état éteint de la led rouge
       digitalWrite(ledvert, LOW); // mise à l'état éteint de la led vert
       digitalWrite(bouton_vert, HIGH); // mise à l'état haut du bp vert
       digitalWrite(bouton_rouge, HIGH); // mise à l'état haut du bp rouge
       randomSeed(analogRead(0));
       while(1)//boucle d'attente pour commencer à jouer
       {
          key = keypad.getKey();//lecture de la key appuyée
          if(key == 'A')
          {
             tone(buzzer,300);
             delay(150);
             tone(buzzer,400);
             delay(150);
             tone(buzzer,500);
             delay(150);
             tone(buzzer,600);
             delay(150);
             tone(buzzer,700,150);
             menu();
          }//si la key A est appuyée on va au menu
       } //fin boucle d'attente
    } //fin void setup

    void loop()
    {
    } //fin void loop

    void menu()//fonction menu
    {
       jeu = 0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("A = Conquete"); //contrôler un point pour réapparaitre et marquer des points
       lcd.setCursor(0,1);
       lcd.print("B = Bombe"); //désamorcer une bombe dans le temps imparti
       lcd.setCursor(0,2);
       lcd.print("C = Sabotage"); //trouver une bombe et la faire exploser pendant le temps imparti
       lcd.setCursor(0,3);
       lcd.print("D = Search & destroy"); // trouver une bombe et la défendre pour la faire exploser
       while(1) //boucle d'attente pour choisir le mode de jeu
       {
          digitalWrite(ledvert, LOW);
          digitalWrite(ledrouge, LOW);
          digitalWrite(ledbleu, HIGH);
          key = keypad.getKey();//lecture de la key appuyée
          if(key == 'A'){tone(buzzer,500,100);digitalWrite(ledbleu, LOW);conquete();} //si appui sur la key A alors menu conquete
          if(key == 'B'){tone(buzzer,500,100);digitalWrite(ledbleu, LOW);bombe();} //si appui sur la key B alors menu bombe
          if(key == 'C'){tone(buzzer,500,100);digitalWrite(ledbleu, LOW);sabotage();} //si appui sur la key C alors menu sabotage
          if(key == 'D'){tone(buzzer,500,100);digitalWrite(ledbleu, LOW);search();} //si appui sur la key D alors menu search
       } //fin boucle d'attente
    } //fin void menu

    void conquete()//point de respawn capturable à garder le plus de temps possible
    {
       digitalWrite(ledbleu, HIGH);
       digitalWrite(ledvert, HIGH);
       zone = 0;
       jeu = 1;
       heure_vert = 0;
       heure_rouge = 0;
       minute_rouge = 0;
       minute_vert = 0;
       seconde_rouge = 0;
       seconde_vert = 0;
       lcd.clear();
       tempsjeu(); //selection du temps de jeu
       deftempstempo(); // selection du temps d'appui sur le bouton pour capturer une zone
       digitalWrite(ledbleu, LOW);
       digitalWrite(ledvert, LOW);
       startgamecount(); //compte à rebours pour jouer
       while(1)
       {
          etat_bp_vert = digitalRead(bouton_vert);
          etat_bp_rouge = digitalRead(bouton_rouge);
          if (etat_bp_vert == LOW) // si on appui sur bp vert
          {
             if (zone == 0) // si la zone est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(1,0);
                lcd.print("Capture de la zone");
                while (i != 20) // tant que le bouton vert est appuyé : neutre => vert
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone neutre
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone verte
                   {
                      tone(buzzer,1000,1000);
                      zone = 1;
                      lcd.clear();
                      break;
                   } // fin if zone capturé : vert
                } // fin while neutre => vert
             } // fin if zone neutre
             if (zone == 2) // si la zone est rouge
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton vert est appuyé : rouge => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(19-i,1);
                   lcd.print(" ");
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone rouge
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone neutre
                   {
                      tone(buzzer,1000,1000);
                      zone = 0;
                      lcd.clear();
                      break;
                   } // fin if zone neutralisé
                } // fin while rouge => neutre
             } // fin if zone rouge
          } // fin if bp vert
          if (etat_bp_rouge == LOW) //si appui sur bp rouge
          {
             if (zone == 0) // si la zone est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(1,0);
                lcd.print("Capture de la zone");
                while (i != 20) // tant que le bouton rouge est appuyé : neutre => rouge
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone neutre
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone rouge
                   {
                      tone(buzzer,1000,1000);
                      zone = 2;
                      lcd.clear();
                      break;
                   } // fin if zone capturé : rouge
                } // fin while neutre => rouge
             } // fin if zone neutre
             if (zone == 1) // si la zone est verte
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton rouge est appuyé : vert => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(20-i,1);
                   lcd.print(" ");
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone verte
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone neutre
                   {
                      tone(buzzer,1000,1000);
                      zone = 0;
                      lcd.clear();
                      break;
                   } // fin if zone neutralisé
                } // fin while rouge => neutre
             } // fin if zone verte
          } // fin if bp rouge
          if(zone == 0) // si la zone est neutre on note "zone neutre" et on affiche le temps des deux équipes
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(4,0);
             lcd.print("ZONE NEUTRE");
             lcd.setCursor(0,2);
             lcd.print("Temps vert:");
             if (heure_vert < 10)
             {
                lcd.setCursor(11,2);
                lcd.print("0");
                lcd.print(heure_vert);
             }
             if (heure_vert >= 10)
             {
                lcd.setCursor(11,2);
                lcd.print(heure_vert);
             }
             lcd.print(":");
             if (minute_vert < 10);
             {
                lcd.setCursor(14,2);
                lcd.print("0");
                lcd.print(minute_vert);
             }
             if (minute_vert >= 10)
             {
                lcd.setCursor(14,2);
                lcd.print(minute_vert);
             }
             lcd.print(":");
             if (seconde_vert < 10)
             {
                lcd.setCursor(17,2);
                lcd.print("0");
                lcd.print(seconde_vert);
             }
             if (seconde_vert >= 10)
             {
                lcd.setCursor(17,2);
                lcd.print(seconde_vert);
             }
             lcd.setCursor(0,3);
             lcd.print("Temps rouge:");
             if (heure_rouge < 10)
             {
                lcd.setCursor(12,3);
                lcd.print("0");
                lcd.print(heure_rouge);
             }
             if (heure_rouge >= 10)
             {
                lcd.setCursor(12,3);
                lcd.print(heure_rouge);
             }
             lcd.print(":");
             if (minute_rouge < 10);
             {
                lcd.setCursor(15,3);
                lcd.print("0");
                lcd.print(minute_rouge);
             }
             if (minute_rouge >= 10)
             {
                lcd.setCursor(15,3);
                lcd.print(minute_rouge);
             }
             lcd.print(":");
             if (seconde_rouge < 10)
             {
                lcd.setCursor(18,3);
                lcd.print("0");
                lcd.print(seconde_rouge);
             }
             if (seconde_rouge >= 10)
             {
                lcd.setCursor(18,3);
                lcd.print(seconde_rouge);
             }               
          } // fin if zone neutre
          else if(zone == 1) // si la zone est verte on lance ou relance et on affiche le temps de l'équipe verte
          {
             digitalWrite(ledvert, HIGH);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(5,0);
             lcd.print("ZONE VERTE");
             lcd.setCursor(0,2);
             lcd.print("Temps vert:");
             lcd.setCursor(11,2);
             if (heure_vert < 10)
             {
                lcd.print("0");
                lcd.print(heure_vert);
             }
             if (heure_vert >= 10)
             {
                lcd.print(heure_vert);
             }
             lcd.print(":");
             if (minute_vert < 10);
             {
                lcd.print("0");
                lcd.print(minute_vert);
             }
             if (minute_vert >= 10)
             {
                lcd.print(minute_vert);
             }
             lcd.print(":");
             if (seconde_vert < 10)
             {
                lcd.print("0");
                lcd.print(seconde_vert);
             }
             if (seconde_vert >= 10)
             {
                lcd.print(seconde_vert);
             }

             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_conquete > interval)
             {
                secMillis_conquete = currentMillis;
                seconde_vert++;
                if (seconde_vert > 59)
                {
                   minute_vert++;
                   seconde_vert = 0;
                }
                if (minute_vert > 59)
                {
                   heure_vert++;
                   minute_vert = 0;
                }
             }         
          } // fin if zone verte
          else if(zone == 2) // si la zone est rouge on lance ou relance et on affiche le temps de l'équipe rouge
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, HIGH);
             lcd.setCursor(5,0);
             lcd.print("ZONE ROUGE");
             lcd.setCursor(0,2);
             lcd.print("Temps rouge:");
             if (heure_rouge < 10)
             {
                lcd.setCursor(12,2);
                lcd.print("0");
                lcd.print(heure_rouge);
             }
             if (heure_rouge >= 10)
             {
                lcd.setCursor(12,2);
                lcd.print(heure_rouge);
             }
             lcd.print(":");
             if (minute_rouge < 10);
             {
                lcd.setCursor(15,2);
                lcd.print("0");
                lcd.print(minute_rouge);
             }
             if (minute_rouge >= 10)
             {
                lcd.setCursor(15,2);
                lcd.print(minute_rouge);
             }
             lcd.print(":");
             if (seconde_rouge < 10)
             {
                lcd.setCursor(18,2);
                lcd.print("0");
                lcd.print(seconde_rouge);
             }
             if (seconde_rouge >= 10)
             {
                lcd.setCursor(18,2);
                lcd.print(seconde_rouge);
             }

             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_conquete > interval)
             {
                secMillis_conquete = currentMillis;
                seconde_rouge++;
                if (seconde_rouge > 59)
                {
                   minute_rouge++;
                   seconde_rouge = 0;
                }
                if (minute_rouge > 59)
                {
                   heure_rouge++;
                   minute_rouge = 0;
                }
             }
          } // fin if zone rouge
          timer(); // compte a rebours du jeu
       } // fin while(1) conquete
    } //fin void conquete

    void deftempstempo() //definition du temps d'appui pour capturer une zone
    {
       boolean suivant;
       tempstempo = 0;
       tempstemposet[0] = '\0';
       lcd.clear();
       lcd.setCursor(2,0);
       lcd.print("Temps de capture");

       lcd.setCursor(8,1);
       lcd.print("SSs");
       lcd.setCursor(6,3);
       lcd.print("*: MENU");
       while (tempstempo < 2)
       {
          lcd.setCursor(tempstempo + 8,1);
          lcd.cursor();
          key = keypad.getKey();
          if (key != NO_KEY)
          {
             if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
             {
                lcd.print(key);
                tempstemposet[tempstempo] = key;
                tempstempo++;
                tone(buzzer, 500, 100);
             }
             if (key == '*'){tone(buzzer, 500, 100);menu();}
          }
       }
       tempstempo = (int) strtol(tempstemposet, (char **)NULL, 10);
       tempstempo = tempstempo * 1000;
       tempo = tempstempo /20;
       lcd.noCursor();
       lcd.clear();
       lcd.setCursor(2,0);
       lcd.print("Vous avez choisi");
       lcd.setCursor(9,1);
       lcd.print(tempstempo/1000);
       lcd.print("s");
       lcd.setCursor(1,3);
       lcd.print("Touche = continuer");
       keypad.waitForKey();
       tone(buzzer,500,100);
    } // fin void deftempstempo

    void bombe()//bombe à désamorcer par un code avant la fin du jeu
    {
       digitalWrite(ledvert, HIGH);
       digitalWrite(ledrouge, HIGH);
       jeu = 2;
       lcd.clear();
       tempsjeu(); //selection du temps de jeu
       entrer_code(); // saisi du code
       digitalWrite(ledvert, LOW);
       digitalWrite(ledrouge, LOW);
       check_wire(); // vérifie la connection des fil à couper
       randow_wire(); // définie au hasardle rôles des fils à couper
       startgamecount(); //compte à rebours pour jouer
       lcd.clear();
       boolean suivant = false;
       interval = 1000; // intervalle initial 1s
       compteur_fil = 0;
       while (mdplong < 4) // tant que la longueur du mot de passe < 4
       {
          timer(); // compte a rebours du jeu
          etat_oupswire = digitalRead(oupswire);
          etat_goodwire = digitalRead(goodwire);
          etat_badwire = digitalRead(badwire);
          if (etat_oupswire == HIGH && compteur_fil == 0) // si oups wire est coupé
          {
             if (heure >= 0 && minute > 1)
             {
                heure = 0;
                minute = 1;
                seconde = 0;
                compteur_fil = 1;
             }
             else
             {
                interval = 10;
                compteur_fil = 1;
             }
          } // fin if oupswire
          if (etat_goodwire == HIGH) // si le bon fil est coupé
          {
             lcd.clear();
             lcd.noCursor();
             lcd.setCursor(0,0);
             lcd.print("BOMBE DESAMORCEE !!!");
             lcd.setCursor(2,2);
             lcd.print("FELICITATIONS !!");
             mdperreur = 0;
             mdplong = 0;
             do
             {
                for (int i=500;i<1000;i++)
                {
                   tone(buzzer,i);
                   digitalWrite(ledvert, HIGH);
                   delay(1);
                   key = keypad.getKey();
                   if (key != NO_KEY){suivant = true;}
                }
                for (int i=1000;i>500;i--)
                {
                   tone(buzzer,i);
                   digitalWrite(ledvert, LOW);
                   delay(1);
                   key = keypad.getKey();
                   if (key != NO_KEY){suivant = true;}
                }
             }
             while (suivant != true);
             noTone(buzzer);
             digitalWrite(ledvert, LOW);
             rejouer();
          } // fin if goodwire
          if (etat_badwire == HIGH){boom();break;}
          lcd.setCursor(3,2);
          lcd.print("Code :");
          key = keypad.getKey();
          if (key == '*') // si appui sur *
          {
             mdplong = 0; // efface le mot de passe
             lcd.clear();
             lcd.setCursor(3,2);
             lcd.print("Code :");
          } // fin if touche *
          else if (key != NO_KEY && key != '*') // si l'appui est différent de *
          {
             lcd.setCursor(mdplong + 10,2);
             lcd.cursor();
             lcd.print(key); // affiche la touche appuyé
             mdpentre[mdplong] = key;
             mdplong++;
          } // fin if touche entrée
          if (mdplong == 4) // si la longueur du mdp = 4
          {
             if (mdpentre [0] == password[0] && mdpentre [1] == password[1] && mdpentre [2] == password[2] && mdpentre [3] == password[3]) // si mdp est correct
             {
                lcd.clear();
                lcd.noCursor();
                lcd.setCursor(0,0);
                lcd.print("BOMBE DESAMORCEE !!!");
                lcd.setCursor(2,2);
                lcd.print("FELICITATIONS !!");
                mdperreur = 0;
                mdplong = 0;
                do
                {
                   for (int i=500;i<1000;i++)
                   {
                      tone(buzzer,i);
                      digitalWrite(ledvert, HIGH);
                      delay(1);
                      key = keypad.getKey();
                      if (key != NO_KEY){suivant = true;}
                   }
                   for (int i=1000;i>500;i--)
                   {
                      tone(buzzer,i);
                      digitalWrite(ledvert, LOW);
                      delay(1);
                      key = keypad.getKey();
                      if (key != NO_KEY){suivant = true;}
                   }
                }
                while (suivant != true);
                noTone(buzzer);
                digitalWrite(ledvert, LOW);
                rejouer();
             } // fin if bombe désamorcée
             else // si mdp incorrect
             {
                lcd.noCursor();
                lcd.clear();
                lcd.setCursor(3,1);
                lcd.print("Mauvais code !");
                digitalWrite(ledrouge, HIGH);
                delay(100);
                digitalWrite(ledrouge, LOW);
                delay(100);
                digitalWrite(ledrouge, HIGH);
                delay(100);
                digitalWrite(ledrouge, LOW);
                delay(200);
                lcd.clear();
                mdperreur++; // augmente compteur d'erreur
                if (mdperreur == 1){heure = heure/2; minute = minute/2; seconde = seconde/2;} // divise le temps restant par deux
                if (mdperreur == 2){interval = 100;} // 1s = 10s
                if (mdperreur == 3){heure = heure/2; minute = minute/2; seconde = seconde/2;} // divise le temps restant par deux
                if (mdperreur == 4){interval = 1;} // 1s = 1000s
                if (mdperreur > 4){heure = heure/2; minute = minute/2; seconde = seconde/2;} // divise le temps restant par deux
                mdplong = 0; // remet à zéro longueur mdp
             } // fin else mdp incorrect
          } // fin if longueur mdp = 4
       } // fin while longueur mdp < 4
    } //fin void bombe

    void sabotage()//bombe réamorçable à désamorcer avant la fin du jeu
    {
       digitalWrite(ledbleu, HIGH);
       digitalWrite(ledrouge, HIGH);
       jeu = 3;
       numbombe = 0;
       lcd.clear();
       tempsjeu(); //delection du temps de jeu
       deftempstempo(); // définition du temps d'appui pour capturer une zone
       temps_detonation(); //définition du compte à rebours de détonation
       digitalWrite(ledbleu, LOW);
       digitalWrite(ledrouge, LOW);
       startgamecount(); //compte à rebours pour jouer
       boolean suivant = false;
       while(1)
       {
          etat_bp_vert = digitalRead(bouton_vert);
          etat_bp_rouge = digitalRead(bouton_rouge);
          if (etat_bp_vert == LOW) // si on appui sur bp vert
          {
             if (numbombe == 0) // si la bombe est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Amorcage de la bombe");
                while (i != 20) // tant que le bouton vert est appuyé : bombe neutre => vert
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe verte
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 1;
                      lcd.clear();
                      break;
                   } // fin if bombe verte
                } // fin while bombe neutre => verte
             } // fin if bombe neutre
             if (numbombe == 2) // si la bombe est rouge
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton vert est appuyé : bombe rouge => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(19-i,1);
                   lcd.print(" ");
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe rouge
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe neutre
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 0;
                      lcd.clear();
                      break;
                   } // fin if bombe neutre
                } // fin while bombe rouge => neutre
             } // fin if bombe rouge
          } // fin if bp vert
          if (etat_bp_rouge == LOW) //si appui bp rouge
          {
             if (numbombe == 0) // si la bombe est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Amorcage de la bombe");
                while (i != 20) // tant que le bouton est appuyé : bombe neutre => rouge
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe rouge
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 2;
                      lcd.clear();
                      break;
                   } // fin if bombe rouge
                } // fin while neutre => rouge
             } // fin if bombe neutre
             if (numbombe == 1) // si la bombe est verte
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton est appuyé : bombe verte => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(20-i,1);
                   lcd.print(" ");
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();break;} // si le bouton est relaché retour bombe verte
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe neutre
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 0;
                      lcd.clear();
                      break;
                   } // fin if bombe neutre
                } // fin while bombe verte => neutre
             } // fin if bombe verte
          } // fin if bp rouge
          if (numbombe == 0) // si la bombe n'a pas été amorcée
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, LOW);
             heure_detonation = heure_detonation_init;
             minute_detonation = minute_detonation_init;
             seconde_detonation = seconde_detonation_init;
             lcd.setCursor(1,0);
             lcd.print("Bombe non amorcee");
          } // fin if bombe non amorcée
          else if (numbombe == 1) // si la bombe est amorcée par les verts
          {
             digitalWrite(ledvert, HIGH);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(4,0);
             lcd.print("BOMBE VERTE");
             lcd.setCursor(2,2);
             lcd.print("Avant explosion :");
             lcd.setCursor(5,3);
             if (heure_detonation >= 10)
             {
                lcd.print(heure_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(heure_detonation);
             }
             lcd.print(":");
             if (minute_detonation >= 10)
             {
                lcd.print(minute_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(minute_detonation);
             }
             lcd.print(":");
             if (seconde_detonation >= 10)
             {
                lcd.print(seconde_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(seconde_detonation);
             }
             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_sabotage > interval)
             {
                secMillis_sabotage = currentMillis;
                seconde_detonation--;
                if (seconde_detonation < 0)
                {
                   minute_detonation--;
                   seconde_detonation = 59;
                }
                if (minute_detonation < 0)
                {
                   heure_detonation--;
                   minute_detonation = 59;
                }
                if (heure_detonation < 0)
                {
                   heure_detonation = 0;
                }
             }
             if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
             {
                lcd.clear();
                while (1)
                {
                   lcd.setCursor(3,0);
                   lcd.print("VICTOIRE !!!");
                   lcd.setCursor(1,2);
                   lcd.print("Les verts ont fait");
                   lcd.setCursor(1,3);
                   lcd.print("exploser la bombe!");
                   do
                   {
                      for (int i=500;i<1000;i++)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledvert, HIGH);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                      for (int i=1000;i>500;i--)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledvert, LOW);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                   }
                   while (suivant != true);
                   noTone(buzzer);
                   digitalWrite(ledvert, LOW);
                   rejouer();
                }
             }
          }
          else if (numbombe == 2) // si la bombe est amorcée par les rouges
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, HIGH);
             lcd.setCursor(4,0);
             lcd.print("BOMBE ROUGE");
             lcd.setCursor(2,2);
             lcd.print("Avant explosion :");
             lcd.setCursor(5,3);
             if (heure_detonation >= 10)
             {
                lcd.print(heure_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(heure_detonation);
             }
             lcd.print(":");
             if (minute_detonation >= 10)
             {
                lcd.print(minute_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(minute_detonation);
             }
             lcd.print(":");
             if (seconde_detonation >= 10)
             {
                lcd.print(seconde_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(seconde_detonation);
             }
             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_sabotage > interval)
             {
                secMillis_sabotage = currentMillis;
                seconde_detonation--;
                if (seconde_detonation < 0)
                {
                   minute_detonation--;
                   seconde_detonation = 59;
                }
                if (minute_detonation < 0)
                {
                   heure_detonation--;
                   minute_detonation = 59;
                }
                if (heure_detonation < 0)
                {
                   heure_detonation = 0;
                }
             }
             if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
             {
                lcd.clear();
                while (1)
                {
                   lcd.setCursor(3,0);
                   lcd.print("VICTOIRE !!!");
                   lcd.setCursor(0,2);
                   lcd.print("Les rouges ont fait");
                   lcd.setCursor(1,3);
                   lcd.print("exploser la bombe!");
                   do
                   {
                      for (int i=500;i<1000;i++)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledrouge, HIGH);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                      for (int i=1000;i>500;i--)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledrouge, LOW);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                   }
                   while (suivant != true);
                   noTone(buzzer);
                   digitalWrite(ledrouge, LOW);
                   rejouer();
                }
             }
          }
          timer();
       }
    } //fin void sabotage


    Dernière édition par Bidou914 le Mer 1 Juil - 12:53, édité 1 fois

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Mer 1 Juil - 12:52

    Désolé pour la longueur du code voici la 2e partie :
    Code:
    void search()//trouver, amorcer et défendre la bombe avant la fin du jeu
    {
     digitalWrite(ledrouge, HIGH);
     digitalWrite(ledbleu, HIGH);
     digitalWrite(ledvert, HIGH);
     jeu = 4;
     numbombe = 0;
     lcd.clear();
     tempsjeu(); //delection du temps de jeu
     deftempstempo();
     temps_detonation(); //définition du compte à rebours de détonation
     digitalWrite(ledrouge, LOW);
     digitalWrite(ledbleu, LOW);
     digitalWrite(ledvert, LOW);
     startgamecount(); //compte à rebours pour jouer
     boolean suivant = false;
     while(1)
     {
     etat_bp_vert = digitalRead(bouton_vert);
     etat_bp_rouge = digitalRead(bouton_rouge);
     if (etat_bp_vert == LOW) // si on appui sur bp vert
     {
     if (numbombe == 0) // si la bombe est neutre
     {
     int i = 0;
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Amorcage de la bombe");
     while (i != 20) // tant que le bouton est appuyé : bombe neutre => verte
     {
     tone(buzzer,300,500);
     tone(buzzer,700,500);
     lcd.setCursor(i,1);
     lcd.print((char)255);
     etat_ledvert = digitalRead(ledvert);
     if (etat_ledvert == LOW)
     {
     digitalWrite(ledvert, HIGH);
     }
     else if (etat_ledvert == HIGH)
     {
     digitalWrite(ledvert, LOW);
     }
     delay(tempo);
     i++;
     etat_bp_vert = digitalRead(bouton_vert);
     if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
     if (i == 20) // si le bouton est appuyé le temps demandé
     {
     tone(buzzer,1000,1000);
     numbombe = 1;
     lcd.clear();
     break;
     } // fin if bombe neutre
     } // fin while bombe neutre => verte
     } // fin if bombe neutre
     if (numbombe == 2) // si la bombe est rouge
     {
     int i = 0;
     lcd.clear();
     barre();
     lcd.setCursor(3,0);
     lcd.print("Neutralisation");
     while (i != 20) // tant que le bouton est appuyé : désamorçage de la bombe
     {
     tone(buzzer,300,500);
     tone(buzzer,700,500);
     lcd.setCursor(19-i,1);
     lcd.print(" ");
     etat_ledrouge = digitalRead(ledrouge);
     if (etat_ledrouge == LOW)
     {
     digitalWrite(ledrouge, HIGH);
     }
     else if (etat_ledrouge == HIGH)
     {
     digitalWrite(ledrouge, LOW);
     }
     delay(tempo);
     i++;
     etat_bp_vert = digitalRead(bouton_vert);
     if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe rouge
     if (i == 20) // si le bouton est appuyé le temps demandé : bombe désamorcée = victoire des verts
     {
     digitalWrite(ledrouge, LOW);
     tone(buzzer,1000,1000);
     numbombe = 0;
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("VICTOIRE !!!");
     lcd.setCursor(2,2);
     lcd.print("Les verts ont");
     lcd.setCursor(0,3);
     lcd.print("desamorce la bombe !");
     do
     {
     for (int i=500;i<1000;i++)
     {
     tone(buzzer,i);
     digitalWrite(ledvert, HIGH);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     for (int i=1000;i>500;i--)
     {
     tone(buzzer,i);
     digitalWrite(ledvert, LOW);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     }
     while (suivant != true);
     noTone(buzzer);
     digitalWrite(ledvert, LOW);
     rejouer();
     } // fin if victoire vert
     } // fin while bombe rouge => désamorcée
     } // fin if bombe rouge
     } // fin if bp vert
     if (etat_bp_rouge == LOW) //si appui sur bp rouge
     {
     if (numbombe == 0) // si la bombe est neutre
     {
     int i = 0;
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Amorcage de la bombe");
     while (i != 20) // tant que le bouton est appuyé : bombe neutre => rouge
     {
     tone(buzzer,300,500);
     tone(buzzer,700,500);
     lcd.setCursor(i,1);
     lcd.print((char)255);
     etat_ledrouge = digitalRead(ledrouge);
     if (etat_ledrouge == LOW)
     {
     digitalWrite(ledrouge, HIGH);
     }
     else if (etat_ledrouge == HIGH)
     {
     digitalWrite(ledrouge, LOW);
     }
     delay(tempo);
     i++;
     etat_bp_rouge = digitalRead(bouton_rouge);
     if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
     if (i == 20) // si le bouton est appuyé le temps demandé : bombe neutre => rouge
     {
     tone(buzzer,1000,1000);
     numbombe = 2;
     lcd.clear();
     break;
     } // fin if bombe rouge
     } // fin while bombe neutre => rouge
     } // fin if bombe neutre
     if (numbombe == 1) // si la bombe est verte
     {
     int i = 0;
     lcd.clear();
     barre();
     lcd.setCursor(3,0);
     lcd.print("Neutralisation");
     while (i != 20) // tant que le bouton est appuyé : désamorçage de la bombe
     {
     tone(buzzer,300,500);
     tone(buzzer,700,500);
     lcd.setCursor(20-i,1);
     lcd.print(" ");
     etat_ledvert = digitalRead(ledvert);
     if (etat_ledvert == LOW)
     {
     digitalWrite(ledvert, HIGH);
     }
     else if (etat_ledvert == HIGH)
     {
     digitalWrite(ledvert, LOW);
     }
     delay(tempo);
     i++;
     etat_bp_rouge = digitalRead(bouton_rouge);
     if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe verte
     if (i == 20) // si le bouton est appuuyé le temps demandé : bombe désamorcée = victoire rouge
     {
     digitalWrite(ledvert, LOW);
     tone(buzzer,1000,1000);
     numbombe = 0;
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("VICTOIRE !!!");
     lcd.setCursor(2,2);
     lcd.print("Les rouges ont");
     lcd.setCursor(0,3);
     lcd.print("desamorce la bombe");
     do
     {
     for (int i=500;i<1000;i++)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, HIGH);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     for (int i=1000;i>500;i--)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, LOW);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     }
     while (suivant != true);
     noTone(buzzer);
     digitalWrite(ledrouge, LOW);
     rejouer();
     } // fin if victoire rouge
     } // fin while bombe verte => désamorcée
     } // fin if bombe verte
     } // fin if bp rouge
     if (numbombe == 0) // si la bombe n'a pas été amorcée
     {
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     heure_detonation = heure_detonation_init;
     minute_detonation = minute_detonation_init;
     seconde_detonation = seconde_detonation_init;
     lcd.setCursor(1,0);
     lcd.print("Bombe non amorcee");
     } // fin if bombe non amorcée
     else if (numbombe == 1) // si la bombe est amorcée par les verts
     {
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW);
     lcd.setCursor(4,0);
     lcd.print("BOMBE VERTE");
     lcd.setCursor(2,2);
     lcd.print("Avant explosion :");
     lcd.setCursor(5,3);
     if (heure_detonation >= 10)
     {
     lcd.print(heure_detonation);
     }
     else
     {
     lcd.print("0");
     lcd.print(heure_detonation);
     }
     lcd.print(":");
     if (minute_detonation >= 10)
     {
     lcd.print(minute_detonation);
     }
     else
     {
     lcd.print("0");
     lcd.print(minute_detonation);
     }
     lcd.print(":");
     if (seconde_detonation >= 10)
     {
     lcd.print(seconde_detonation);
     }
     else
     {
     lcd.print("0");
     lcd.print(seconde_detonation);
     }
     unsigned long currentMillis = millis();
     if (currentMillis - secMillis_sabotage > interval)
     {
     secMillis_sabotage = currentMillis;
     seconde_detonation--;
     if (seconde_detonation < 0)
     {
     minute_detonation--;
     seconde_detonation = 59;
     }
     if (minute_detonation < 0)
     {
     heure_detonation--;
     minute_detonation = 59;
     }
     if (heure_detonation < 0)
     {
     heure_detonation = 0;
     }
     }
     if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
     {
     lcd.clear();
     while (1)
     {
     lcd.setCursor(3,0);
     lcd.print("VICTOIRE !!!");
     lcd.setCursor(1,2);
     lcd.print("Les verts ont fait");
     lcd.setCursor(1,3);
     lcd.print("exploser la bombe!");
     do
     {
     for (int i=500;i<1000;i++)
     {
     tone(buzzer,i);
     digitalWrite(ledvert, HIGH);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     for (int i=1000;i>500;i--)
     {
     tone(buzzer,i);
     digitalWrite(ledvert, LOW);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     }
     while (suivant != true);
     noTone(buzzer);
     digitalWrite(ledvert, LOW);
     rejouer();
     }
     }
     }
     else if (numbombe == 2) // si la bombe est amorcée par les rouges
     {
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH);
     lcd.setCursor(4,0);
     lcd.print("BOMBE ROUGE");
     lcd.setCursor(2,2);
     lcd.print("Avant explosion :");
     lcd.setCursor(5,3);
     if (heure_detonation >= 10)
     {
     lcd.print(heure_detonation);
     }
     else
     {
     lcd.print("0");
     lcd.print(heure_detonation);
     }
     lcd.print(":");
     if (minute_detonation >= 10)
     {
     lcd.print(minute_detonation);
     }
     else
     {
     lcd.print("0");
     lcd.print(minute_detonation);
     }
     lcd.print(":");
     if (seconde_detonation >= 10)
     {
     lcd.print(seconde_detonation);
     }
     else
     {
     lcd.print("0");
     lcd.print(seconde_detonation);
     }
     unsigned long currentMillis = millis();
     if (currentMillis - secMillis_sabotage > interval)
     {
     secMillis_sabotage = currentMillis;
     seconde_detonation--;
     if (seconde_detonation < 0)
     {
     minute_detonation--;
     seconde_detonation = 59;
     }
     if (minute_detonation < 0)
     {
     heure_detonation--;
     minute_detonation = 59;
     }
     if (heure_detonation < 0)
     {
     heure_detonation = 0;
     }
     }
     if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
     {
     lcd.clear();
     while (1)
     {
     lcd.setCursor(3,0);
     lcd.print("VICTOIRE !!!");
     lcd.setCursor(0,2);
     lcd.print("Les rouges ont fait");
     lcd.setCursor(1,3);
     lcd.print("exploser la bombe!");
     do
     {
     for (int i=500;i<1000;i++)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, HIGH);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     for (int i=1000;i>500;i--)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, LOW);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     }
     while (suivant != true);
     noTone(buzzer);
     digitalWrite(ledrouge, LOW);
     rejouer();
     }
     }
     }
     timer();
     }
    } //fin void search and destroy

    void temps_detonation() // définition du timer de la bombe
    {
     heure_detonation_init = 0;
     minute_detonation_init = 0;
     seconde_detonation_init = 0;
     heure_detonationset [0] = '\0';
     minute_detonationset [0] = '\0';
     seconde_detonationset [0] = '\0';
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Definir temps bombe");
     lcd.setCursor(6,1);
     lcd.print("HH:MM:SS");
     lcd.setCursor(6,3);
     lcd.print("*: MENU");
     while (heure_detonation_init < 2)
     {
       lcd.setCursor(heure_detonation_init + 6, 1);
       lcd.cursor();
       key = keypad.getKey();
       if (key != NO_KEY)
       {
         if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
         {
         lcd.print(key);
         heure_detonationset[heure_detonation_init] = key;
         heure_detonation_init++;
         tone(buzzer, 500, 100);
         }
         if (key == '*'){tone(buzzer, 500, 100);menu();}
       }
     }
     heure_detonation_init = (int) strtol(heure_detonationset, (char **)NULL, 10);
     while (minute_detonation_init < 2)
     {
     lcd.setCursor(minute_detonation_init + 9, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     minute_detonationset[minute_detonation_init] = key;
     minute_detonation_init ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     minute_detonation_init = (int) strtol(minute_detonationset, (char **)NULL, 10);
     while (seconde_detonation_init < 2)
     {
     lcd.setCursor(seconde_detonation_init + 12, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     seconde_detonationset[seconde_detonation_init] = key;
     seconde_detonation_init ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     seconde_detonation_init = (int) strtol(seconde_detonationset, (char **)NULL, 10);
     //récapitulatif temps de detonation
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(2,0);
     lcd.print("Vous avez choisi");
     lcd.setCursor(5,1);
     lcd.print(heure_detonation_init);
     lcd.print(":");
     lcd.print(minute_detonation_init);
     lcd.print(":");
     lcd.print(seconde_detonation_init);
     lcd.setCursor(1,3);
     lcd.print("Touche = continuer");
     keypad.waitForKey(); // attente du l'appui sur une touche pour sortir de la fonction
     tone(buzzer,500,100);
    } // fin void temps_detonation

    void tempsjeu()//définition du temps de jeu de la partie
    {
     heure = 0;
     minute = 0;
     seconde = 0;
     heureset [0] = '\0';
     minuteset [0] = '\0';
     secondeset [0] = '\0';
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Definir temps de jeu");
     lcd.setCursor(6,1);
     lcd.print("HH:MM:SS");
     lcd.setCursor(6,3);
     lcd.print("*: MENU");
     while (heure < 2)
     {
       lcd.setCursor(heure + 6, 1);
       lcd.cursor();
       key = keypad.getKey();
       if (key != NO_KEY)
       {
         if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
         {
         lcd.print(key);
         heureset[heure] = key;
         heure++;
         tone(buzzer, 500, 100);
         }
         if (key == '*'){tone(buzzer, 500, 100);menu();}
       }
     }
     heure = (int) strtol(heureset, (char **)NULL, 10);
     while (minute < 2)
     {
     lcd.setCursor(minute + 9, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     minuteset[minute] = key;
     minute ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     minute = (int) strtol(minuteset, (char **)NULL, 10);
     while (seconde < 2)
     {
     lcd.setCursor(seconde + 12, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     secondeset[seconde] = key;
     seconde ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     seconde = (int) strtol(secondeset, (char **)NULL, 10);
     //récapitulatif temps de jeu
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(2,0);
     lcd.print("Vous avez choisi");
     lcd.setCursor(5,1);
     lcd.print(heure);
     lcd.print(":");
     lcd.print(minute);
     lcd.print(":");
     lcd.print(seconde);
     lcd.setCursor(1,3);
     lcd.print("Touche = continuer");
     keypad.waitForKey();
     tone(buzzer,500,100);
    }//fin void temps jeu

    void timer()//compte à rebours
    {
     lcd.setCursor(1,1);
     lcd.print("Temps:");
     if (heure >= 10)
     {
     lcd.setCursor(8,1);
     lcd.print(heure);
     }
     if (heure < 10)
     {
     lcd.setCursor(8,1);
     lcd.print("0");
     lcd.setCursor(9,1);
     lcd.print(heure);
     }
     lcd.print(":");
     if (minute >= 10)
     {
     lcd.setCursor(11,1);
     lcd.print(minute);
     }
     if (minute < 10)
     {
     lcd.setCursor(11,1);
     lcd.print("0");
     lcd.setCursor(12,1);
     lcd.print(minute);
     }
     lcd.print(":");
     if (seconde >= 10)
     {
     lcd.setCursor(14,1);
     lcd.print(seconde);
     }
     if (seconde < 10)
     {
     lcd.setCursor(14,1);
     lcd.print("0");
     lcd.setCursor(15,1);
     lcd.print(seconde);
     }
     if (heure <= 0) //
     {
       if ( minute < 0) //si le timer arrive à 0
       {
       while (1)
       {
       if(jeu == 1){finchrono();}
         if(jeu == 2){boom();}
         if(jeu == 3)
         {
         if (numbombe != 0)
         {
         minute = minute +1;
         timer();
         }
         else
         {
         nobomb();
         }
         }
         if(jeu == 4)
         {
         if (numbombe != 0)
         {
         minute = minute +1;
         timer();
         }
         else
         {
         nobomb();
         }
         }
         }
       }
     }
     if (heure < 0)
       {
         heure = 0;
       }
     if (minute < 0)
       {
         heure --;
         minute = 59;
       }
     if (seconde < 0)
       {
       lcd.clear();
         minute --;
         seconde = 59;
       }
     if (seconde >= 0) // si il reste du temps de jeu
       {
         unsigned long currentMillis = millis();
         if(currentMillis - secMillis >= interval) // 1s écoulée
         {
             secMillis = currentMillis;
             seconde --; // décrémente 1s
         }
         if ( heure > 0 || minute >= 10) // s'il reste au moins 10 minutes de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval * 10){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toute les 30s
         }
         if (heure == 0 && minute < 10 && minute >= 2) // s'il reste plus de 2 minutes de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval * 5){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les 10s
         }
         if (heure == 0 && minute < 2) // s'il reste moins de 2 minutes de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les secondes
         }
         if (heure == 0 && minute == 0 && seconde < 30) // s'il reste moins de 30s de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval/2){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les 1/2s
         }
         if (heure == 0 && minute == 0 && seconde <= 10) // s'il reste moins de 10s de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval/4){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les 1/4s
         }
       }
    } //fin void timer

    void finchrono() // fin du temps de jeu comquête
    {
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Fin du temps de jeu!");
     if (heure_vert > heure_rouge) // si plus d'heure pour les verts
     {
     lcd.setCursor(1,1);
     lcd.print("Victoire des verts");
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW); // alors victoire des verts
     } // fin if heure vert
     else if (heure_rouge > heure_vert) // si plus d'heure pour les rouges
     {
     lcd.setCursor(0,1);
     lcd.print("Victoire des rouges");
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH); // alors victoire des rouges
     } // fin if heure rouge
     else if (heure_vert == heure_rouge) // si égalité des heures
     {
     if (minute_vert > minute_rouge) // si plus de minute pour les verts
     {
     lcd.setCursor(1,1);
     lcd.print("Victoire des verts");
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW); // alors victoire des verts
     } // fin if minute vert
     else if (minute_rouge > minute_vert) // si plus de minute pour les rouges
     {
     lcd.setCursor(0,1);
     lcd.print("Victoire des rouges");
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH); // alors victoire des rouges
     } // fin if minute rouge
     else if (minute_vert == minute_rouge) // si égalité des minutes
     {
     if (seconde_vert > seconde_rouge) // si plus de seconde pour les verts
     {
     lcd.setCursor(1,1);
     lcd.print("Victoire des verts");
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW); // alors victoire des verts
     } // fin if seconde vert
     else if (seconde_rouge > seconde_vert) // si plus de seconde pour les rouges
     {
     lcd.setCursor(0,1);
     lcd.print("Victoire des rouges");
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH); // alors victoire des rouges
     } // fin if seconde rouge
     } // fin if minute
     } // fin if heure
     // affichage du temps de chaque équipe
     lcd.setCursor(0,2);
     lcd.print("Temps vert:");
     if (heure_vert < 10)
     {
     lcd.setCursor(11,2);
     lcd.print("0");
     lcd.print(heure_vert);
     }
     if (heure_vert >= 10)
     {
     lcd.setCursor(11,2);
     lcd.print(heure_vert);
     }
     lcd.print(":");
     if (minute_vert < 10);
     {
     lcd.setCursor(14,2);
     lcd.print("0");
     lcd.print(minute_vert);
     }
     if (minute_vert >= 10)
     {
     lcd.setCursor(14,2);
     lcd.print(minute_vert);
     }
     lcd.print(":");
     if (seconde_vert < 10)
     {
     lcd.setCursor(17,2);
     lcd.print("0");
     lcd.print(seconde_vert);
     }
     if (seconde_vert >= 10)
     {
     lcd.setCursor(17,2);
     lcd.print(seconde_vert);
     }
     lcd.setCursor(0,3);
     lcd.print("Temps rouge:");
     if (heure_rouge < 10)
     {
     lcd.setCursor(12,3);
     lcd.print("0");
     lcd.print(heure_rouge);
     }
     if (heure_rouge >= 10)
     {
     lcd.setCursor(12,3);
     lcd.print(heure_rouge);
     }
     lcd.print(":");
     if (minute_rouge < 10);
     {
     lcd.setCursor(15,3);
     lcd.print("0");
     lcd.print(minute_rouge);
     }
     if (minute_rouge >= 10)
     {
     lcd.setCursor(15,3);
     lcd.print(minute_rouge);
     }
     lcd.print(":");
     if (seconde_rouge < 10)
     {
     lcd.setCursor(18,3);
     lcd.print("0");
     lcd.print(seconde_rouge);
     }
     if (seconde_rouge >= 10)
     {
     lcd.setCursor(18,3);
     lcd.print(seconde_rouge);
     }
     marche_imp();
     keypad.waitForKey();
     tone(buzzer,500,100);
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     rejouer();
    } //fin void finchrono

    void boom() // si la bombe n'est pas désamorcée
    {
     mdperreur = 0;
     boolean suivant = false;
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(2,0);
     lcd.print("BOOOOOOOOOOOOM");
     lcd.setCursor(5,1);
     lcd.print("Victoire");
     lcd.setCursor(7,2);
     lcd.print("des");
     lcd.setCursor(3,3);
     lcd.print("terroristes!");
     do
     {
     for (int i=500;i<1000;i++)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, HIGH);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     for (int i=1000;i>500;i--)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, LOW);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     }
     while (suivant != true);
     noTone(buzzer);
     digitalWrite(ledrouge, LOW);
     rejouer();
    } //fin void boom

    void nobomb() // si la bombe n'a pas explosée
    {
     lcd.clear();
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     lcd.setCursor(1,0);
     lcd.print("La bombe n'a pas");
     lcd.setCursor(5,1);
     lcd.print("explosee");
     marche_imp();
     keypad.waitForKey();
     tone(buzzer,500,100);
     rejouer();
    } //fin void nobomb

    void rejouer() // question pour rejouer
    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Voulez-vous rejouer?");
     lcd.setCursor(0,2);
     lcd.print("A = OUI");
     lcd.setCursor(13,2);
     lcd.print("D = NON");
     delay(250);
     while(1) //boucle d'attente pour rejouer ou non
     {
     key = keypad.getKey();//lecture de la key appuyée
     if(key == 'A')
     {
     tone(buzzer,500,100);
     if(jeu == 1){conquete();} //
     if(jeu == 2){bombe();} //renvoi au précédent jeu
     if(jeu == 3){sabotage();} //
     if(jeu == 4){search();} //
     }
     if(key == 'D'){tone(buzzer,500,100);menu();} //retour au menu
     }
    } //fin void rejouer

    void startgamecount() // compte a rebours du lancement du jeu
    {
     lcd.clear();
     lcd.setCursor(3,0);
     lcd.print("Pret a jouer ?");
     lcd.setCursor(7,2);
     lcd.print("Appuyer");
     lcd.setCursor(3,3);
     lcd.print("sur une touche");
     keypad.waitForKey(); //si appui sur un bouton le jeu commence
     lcd.clear();
     for(int i = 5; i > 0; i--)
     {
     lcd.setCursor(4,1);
     lcd.print("Debut dans ");
     lcd.print(i);
     tone(buzzer,500,100);
     digitalWrite(ledbleu, HIGH);
     delay(200);
     digitalWrite(ledbleu, LOW);
     delay(800);
     }
     lcd.clear();
    } // fin void startgamecount

    void barre() // affichage de la barre de neutralisation
    {
     lcd.setCursor(0,1);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
    } // fin void barre

    void entrer_code() // choix du code de désamorçage de la bombe
    {
     lcd.clear();
     mdplong = 0;
     lcd.setCursor(4,0);
     lcd.print("Entrer code :");
     lcd.setCursor(3,3);
     lcd.print("* pour effacer");
     while (mdplong < 4)
     {
     lcd.setCursor(mdplong + 8,2);
     lcd.cursor();
     key = keypad.getKey();
     if (key == '*')
     {
     mdplong = 0;
     tone(buzzer,400,100);
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("Entrer code :");
     lcd.setCursor(3,3);
     lcd.print("* pour effacer");
     }
     else if (key != NO_KEY && key != '*')
     {
     lcd.print(key);
     tone(buzzer,500,100);
     password[mdplong] = key;
     mdplong++;
     }
     }
     if (mdplong = 4)
     {
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("Code saisi :");
     lcd.setCursor(8,1);
     lcd.print(password[0]);
     lcd.print(password[1]);
     lcd.print(password[2]);
     lcd.print(password[3]);
     lcd.setCursor(2,2);
     lcd.print("Est-ce correct ?");
     lcd.setCursor(0,3);
     lcd.print("A = OUI");
     lcd.setCursor(13,3);
     lcd.print("D = NON");
     while (1)
     {
     key = keypad.getKey();
     if (key == 'A'){tone(buzzer,500,100);lcd.clear();mdplong = 0;break;}
     if (key == 'D'){tone(buzzer,400,100);entrer_code();}
     }
     }
    } // fin void entrer_code

    void check_wire() // vérifie la connection des fils
    {
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("Verification");
     lcd.setCursor(2,2);
     lcd.print("des fils en cours");
     int i = 0;
     while (i != 20)
     {
     lcd.setCursor(i,3);
     lcd.print((char)255);
     tone(buzzer,500,100);
     digitalWrite(ledbleu, HIGH);
     delay(50);
     digitalWrite(ledbleu, LOW);
     delay(50);
     i++;
     if (i == 20){lcd.clear();}
     }
     etat_filblanc = digitalRead(filblanc);
     etat_filbleu = digitalRead(filbleu);
     etat_filjaune = digitalRead(filjaune);
     etat_filvert = digitalRead(filvert);
     while (etat_filjaune == HIGH || etat_filbleu == HIGH || etat_filblanc == HIGH || etat_filvert == HIGH) // si au moins un fin est déconnecté
     {
     etat_filblanc = digitalRead(filblanc);
     etat_filbleu = digitalRead(filbleu);
     etat_filjaune = digitalRead(filjaune);
     digitalWrite(ledrouge, HIGH);
     lcd.setCursor(0,1);
     lcd.print("Verifier les fils !!");
     if (etat_filblanc == LOW && etat_filbleu == LOW && etat_filjaune == LOW && etat_filvert == LOW){digitalWrite(ledrouge, LOW); break;}
     } // fin if fil déconnecté
     if (etat_filblanc == LOW && etat_filbleu == LOW && etat_filjaune == LOW && etat_filvert == LOW) // si tous les fils sont connectés
     {
     lcd.clear();
     lcd.setCursor(2,1);
     lcd.print("Fils connectes !");
     digitalWrite(ledvert, HIGH);
     delay(1000);
     digitalWrite(ledvert, LOW);
     } // fin if fils connectés
    } // fin void check_wire

    void randow_wire() // défini au hasard le rôle des fils à couper
    {
     badwire = 0;
     goodwire = 0;
     oupswire = 0;
     nonwire = 0;
     badwire = random(12,16);
     goodwire = random(12,16);
     oupswire = random(12,16);
     nonwire = random(12,16);
     if (badwire == goodwire || badwire == oupswire || badwire == nonwire || goodwire == oupswire || goodwire == nonwire || oupswire == nonwire){randow_wire();}
    } // fin void randow_wire

    void marche_imp()
    {
     //used 500 ms for a quart note
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 349, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 349, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 440, 1000);delay(1000);
     //first bit
     tone(buzzer, 659, 500);delay(500);
     tone(buzzer, 659, 500);delay(500);
     tone(buzzer, 659, 500);delay(500);
     tone(buzzer, 698, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 415, 500);delay(500);
     tone(buzzer, 349, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 440, 1000);delay(1000);
     //second bit...
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 440, 350);delay(350);
     tone(buzzer, 440, 150);delay(150);
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 830, 250);delay(250);
     tone(buzzer, 784, 250);delay(250);
     tone(buzzer, 740, 125);delay(125);
     tone(buzzer, 698, 125);delay(125);
     tone(buzzer, 740, 250);delay(250);
     delay(250);
     tone(buzzer, 455, 250);delay(250);
     tone(buzzer, 622, 500);delay(500);
     tone(buzzer, 587, 250);delay(250);
     tone(buzzer, 554, 250);delay(250);
     //start of the interesting bit
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 466, 125);delay(125);
     tone(buzzer, 523, 250);delay(250);
     delay(250);
     tone(buzzer, 349, 125);delay(125);
     tone(buzzer, 415, 500);delay(500);
     tone(buzzer, 349, 375);delay(375);
     tone(buzzer, 440, 125);delay(125);
     tone(buzzer, 523, 500);delay(500);
     tone(buzzer, 440, 375);delay(375);
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 659, 1000);delay(1000);
     //more interesting stuff (this doesn't quite get it right somehow)
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 440, 350);delay(350);
     tone(buzzer, 440, 150);delay(150);
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 830, 250);delay(250);
     tone(buzzer, 784, 250);delay(250);
     tone(buzzer, 740, 125);delay(125);
     tone(buzzer, 698, 125);delay(125);
     tone(buzzer, 740, 250);delay(250);
     delay(250);
     tone(buzzer, 455, 250);delay(250);
     tone(buzzer, 622, 500);delay(500);
     tone(buzzer, 587, 250);delay(250);
     tone(buzzer, 554, 250);delay(250);
     //repeat... repeat
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 466, 125);delay(125);
     tone(buzzer, 523, 250);delay(250);
     delay(250);
     tone(buzzer, 349, 250);delay(250);
     tone(buzzer, 415, 500);delay(500);
     tone(buzzer, 349, 375);delay(375);
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 349, 375);delay(375);
     tone(buzzer, 261, 125);delay(125);
     tone(buzzer, 440, 1000);delay(1000);
     //and we're done \ó/
    }

    obelix21
    ecrou argent
    ecrou argent

    Messages : 349
    Date d'inscription : 06/05/2013

    Re: Boitier avec plusieurs mode de jeu

    Message par obelix21 le Mer 1 Juil - 21:10

    merci c'est très sympas de partager cheers

    Wood
    boulon d'argent
    boulon d'argent

    Messages : 1110
    Date d'inscription : 03/06/2011
    Age : 39
    Localisation : Liré

    Re: Boitier avec plusieurs mode de jeu

    Message par Wood le Mer 1 Juil - 22:26

    Un grand merci à toi

    rausko
    vis rouillée
    vis rouillée

    Messages : 101
    Date d'inscription : 27/01/2012
    Age : 44
    Localisation : oise

    Re: Boitier avec plusieurs mode de jeu

    Message par rausko le Lun 6 Juil - 9:57

    Bonjour

    Beau boulot et Merci beaucoup

    j'aurais juste deux questions. Question

    Quelle version de l'ide tu utilise ?
    et , a tu la bibliothèque  "LiquidCrystal_I2C.h"
    car avec l'i2c je galère, mais comme pas possible ! Sad

    sur les différents tutos que je trouve, personne ne déclare de la même façon, et rien ne fonctionne chez moi Sad

    merci

    ps: j’utilise un UNO v3

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Ven 17 Juil - 14:17

    rausko a écrit:Bonjour

    Beau boulot et Merci beaucoup

    j'aurais juste deux questions. Question

    Quelle version de l'ide tu utilise ?
    et , a tu la bibliothèque  "LiquidCrystal_I2C.h"
    car avec l'i2c je galère, mais comme pas possible ! Sad

    sur les différents tutos que je trouve, personne ne déclare de la même façon, et rien ne fonctionne chez moi Sad

    merci

    ps: j’utilise un UNO v3
    Merci du compliment Very Happy

    Concernant l'IDE j'utilise la version 1.0.5 r2 (que l'on peut trouver dans le lien du tuto de ciblerie de krispies et naudnaud) avec sublime text (qui ne sert que d'un point de vue esthétique et pratique mais n'apporte rien à l'IDE.

    Pour la bibliothèque LiquidCrystal_I2C je ne pourrais pas te la passer pour le moment car je ne suis pas chez moi mais j'ai eu aussi des difficultés à trouver la bibliothèque qui fonctionnnait correctement j'ai donc fait plusieurs essais avec les différentes bibliothèques qu'on trouve sur le site d'arduino (à vérifier mais il me semble que la dernière version de la bibliothèque des écrans LCD prend en charge la connexion I2C).

    Désolé de pas pouvoir t'aider plus pour le moment mais j'espère t'avoir aidé

    biddal

    Messages : 6
    Date d'inscription : 30/07/2016

    Timer

    Message par biddal le Lun 26 Sep - 22:06

    Salut j'ai une petite question.
    Je me suis inspiré de ton code pour mon timer de bombe par contre il y a quelque chose que je ne comprend pas avec le code que tu as mis concernant le choix du temps pour la bombe.
    Lorsque j utilise ton code en fait ça me considère que c'est des centaines d'heure c 'est à dire que 1 minute dure 100 sec.

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Lun 26 Sep - 22:28

    biddal a écrit:Salut j'ai une petite question.
    Je me suis inspiré de ton code pour mon timer de bombe par contre il y a quelque chose que je ne comprend pas avec le code que tu as mis concernant le choix du temps pour la bombe.
    Lorsque j utilise ton code en fait ça me considère que c'est des centaines d'heure c 'est à dire que 1 minute dure 100 sec.
    Je ne comprends pas bien ta question. Le problème vient de la définition du temps de jeu ou d'un autre temps à définir ? Parce que je n'ai pas compris pour regarder dans mon code de quoi tu parles exactement et pouvoir t'éclairer

    biddal

    Messages : 6
    Date d'inscription : 30/07/2016

    Re: Boitier avec plusieurs mode de jeu

    Message par biddal le Lun 26 Sep - 22:33

    Bien en fait lorsque je rentre par exemple 1min bien lorsque ça me lance le compte à rebour ça me mets 100min au lieu de 1 pourtant j'ai pris ton code tel quel.
    En fait concrétement sur l'écran quand j'ai :
    HH:MM:SS
    Lorsque je rentre :
    00:01:00
    Lorsque ça me demande si j'ai bien rentré le bon temps ça me marque non pas 00:01:00 mais 00:100:100.
    Du coup je me retrouve avec 100* 1min (et la minute ne dure pas 60 sec mais 100 sec).

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Mar 27 Sep - 22:05

    Alors je viens de revoir le code et je ne vois pas comment c'est possible tel quel...
    Quel type d'écran as-tu ? utilises-tu bien des int pour les compteurs heure minute et seconde ? utilises-tu bien des char pour heureset minuteset et secondeset ? As-tu bien mis les lignes de ce type : heure = (int) strtol(heureset, (char **)NULL, 10); ? Quel carte arduino tu utilise ?
    A part ces choses là je ne vois pas pour le moment

    biddal

    Messages : 6
    Date d'inscription : 30/07/2016

    Re: Boitier avec plusieurs mode de jeu

    Message par biddal le Mer 28 Sep - 10:12

    Voilà le code que j'ai mis j'ai presque rien changé et ce que j'ai changé c'est sans importance.
    Pour ce qui est de l'écran c'est un 1602A pareil j'ai bien vérifié que rien ne sorte de l'écran du fait que toi tu utilisais un 2004.
    Pour l'arduino c'est un R3 uno.
    J'ai vérifié plusieurs fois sans trouver de où cela provient.

    Code:
    int heure = 0; // compteur secondes
    int minute = 0; // compteur minutes
    int seconde = 0; // compteur heures
    Code:
    char heureset[2];
    char minuteset[2];
    char secondeset[2];
    Code:
    void tempsjeu()//définition du temps de jeu de la partie
    {
      heure = 0;
      minute = 0;
      seconde = 0;
      heureset [0] = '\0';
      minuteset [0] = '\0';
      secondeset [0] = '\0';
      lcd.setCursor(2,0);
      lcd.print("Appuyer sur *");
      lcd.setCursor(2,1);
      lcd.print("pour le menu");
      delay(2000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Definir temps de jeu");
      lcd.setCursor(6,1);
      lcd.print("HH:MM:SS");
      while (heure < 2)
      {
            lcd.setCursor(heure + 6, 1);
            lcd.cursor();
            key = clavier.getKey();
            if (key != NO_KEY)
            {
              if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
              {
                    lcd.print(key);
                    heureset[heure] = key;
                    heure++;
                    //tone(buzzer, 500, 100);
              }
              if (key == '*'){/*tone(buzzer, 500, 100);*/menu();}
            }
      }
      heure = (int) strtol(heureset, (char **)NULL, 10);
      while (minute < 2)
      {
          lcd.setCursor(minute + 9, 1);
          lcd.cursor();
          key = clavier.getKey();
          if (key != NO_KEY)
          {
            if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
            {
                lcd.print(key);
                minuteset[minute] = key;
                minute ++;
                //tone(buzzer, 500, 100);
            }
            if (key == '*'){/*tone(buzzer, 500, 100);*/menu();}
          }
      }
      minute = (int) strtol(minuteset, (char **)NULL, 10);
      while (seconde < 2)
      {
          lcd.setCursor(seconde + 12, 1);
          lcd.cursor();
          key = clavier.getKey();
          if (key != NO_KEY)
          {
            if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
            {
                lcd.print(key);
                secondeset[seconde] = key;
                seconde ++;
                //tone(buzzer, 500, 100);
            }
            if (key == '*'){/*tone(buzzer, 500, 100);*/menu();}
          }
      }
      seconde = (int) strtol(secondeset, (char **)NULL, 10);
      //récapitulatif temps de jeu
      lcd.noCursor();
      lcd.clear();
      lcd.setCursor(1,0);
      lcd.print("Vous avez choisi");
      lcd.setCursor(4,1);
      lcd.print(heure);
      lcd.print(":");
      lcd.print(minute);
      lcd.print(":");
      lcd.print(seconde);
      delay(3000);
      lcd.clear();
      lcd.setCursor(3,0);
      lcd.print("Appuyer pour");
      lcd.setCursor(5,1);
      lcd.print("continuer");
      clavier.waitForKey();
      //tone(buzzer,500,100);
    }//fin void temps jeu

    En tout cas merci pour tes réponses

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Mer 28 Sep - 17:19

    Bon dans ton code il y a certaines choses qui ne doivent pas rentrer dans l'écran mais ça ne devrait pas en toute logique poser problème pour définir le temps de jeu... scratch
    Dernière que je vois à la limite la version d'arduino que tu utilise ? Pour ma part j'utilise la version 1.0.5 r2 du tuto sur la ciblerie de krispies et naudnaud si tu en as une différente ça pourrait peut être venir de là ? Rolling Eyes

    Naudnaud
    ecrou argent
    ecrou argent

    Messages : 367
    Date d'inscription : 30/08/2011
    Age : 26
    Localisation : Metabief

    Re: Boitier avec plusieurs mode de jeu

    Message par Naudnaud le Mer 28 Sep - 20:32

    Ha tiens, j'avais zapper ce post !!!!!

    Beau boulot !!!!!!!
    Le bandeau de LED ne bouffe pas trop la batterie ?

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Jeu 29 Sep - 9:59

    Non ça tient bien à l'intérieur j'ai mis une batterie de 2200 mAh et après plus d'une dizaine de partie d'une durée de 20-25 minutes en moyenne la batterie commence seulement à faiblir donc ça va

    biddal

    Messages : 6
    Date d'inscription : 30/07/2016

    Re: Boitier avec plusieurs mode de jeu

    Message par biddal le Dim 2 Oct - 22:17

    Salut.
    Pour ce qui est de la version je suis en 1.6.12. Mais je ne pense pas que le soucis vienne de là.
    J'ai fait différent test lors de la saisie des valeurs en les affichant avec des lcd.print et il semblerait que lors de la transformation du char en int des minutes celui-ci me récupére également la valeur de heure. Je ne vois pas par quelle opération cela est possible mais je vais te donner un exemple.
    Lorsque je saisis 04:07:00
    Lorsque je saisi le 04 et que j'affiche la variable heure qui est le résultat de la transformation du char en int, il m affiche bien 4.
    Ensuite lorsque je rentre le 07 il m'affiche bien le 07 lorsque j'appuie sur les touches mais lorsque j'affiche la variable minute il me renvoie 704 qui est en fait les minutes et les heures dans le sens inverse.
    Je ne sais pas si tu comprends bien ce que j'essaie d'expliquer mais si tu trouvais la solution ça serait juste parfait :p

    Krispies
    Admin

    Messages : 3783
    Date d'inscription : 16/08/2009
    Age : 49
    Localisation : VERS-Pont du gard

    Re: Boitier avec plusieurs mode de jeu

    Message par Krispies le Mar 4 Oct - 23:41

    Salut j'ai chargé ton code et plusieurs erreurs lors de la vérif sont apparues et notement il me dit qu'il manque une parenthèse dans le menu "search" je vois pas ou?


    _________________

    http://airsoft-krisp.e-monsite.com/
    http://www.facebook.com/pages/Krispies-Team/470577369635210

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Mer 5 Oct - 16:19

    Etonnant ça j'ai vraiment du mal à comprendre je viens de vérifier chez moi et ça fonctionne parfaitement...
    je remets le code au cas où j'aurais fait une erreur on ne sait jamais.

    Code:
    #include "Wire.h" //bibliothèque wire
    #include "LiquidCrystal_I2C.h" //bibliothèque écran lcd I2C
    #include "Keypad.h" //bibliothèque keypad

    const byte LIGNES = 4;
    const byte COLONNES = 4;

    // définition des pins utilisés
    const int bouton_vert = 8; // bp vert sur pin 8
    const int bouton_rouge = 7; // bp rouge sur pin 7
    const int buzzer = 6; // buzzer sur pin 6
    const int filvert = 15; // fil noir sur pin 15
    const int filjaune = 14; // fil jaune sur pin 14
    const int filbleu = 12; // fil bleu sur pin 12
    const int filblanc = 13; // fil blanc sur pin 13
    const int ledbleu = 9; // led bleu bande RGB sur pin 9
    const int ledrouge = 10; // led rouge bande RGB sur pin 10
    const int ledvert = 11; // led vert bande RGB sur pin 11

    //définition des différentes valeurs utilisées
    int heure = 0; // compteur secondes
    int minute = 0; // compteur minutes
    int seconde = 0; // compteur heures
    int heure_rouge = 0; // compteur heure pour l'équipe rougee
    int heure_vert = 0; //compteur heure pour l'équipe verte
    int minute_rouge = 0; //compteur minute pour l'équipe rougee
    int minute_vert = 0; //compteur minute pour l'équipe verte
    int seconde_rouge = 0; //compteur seconde pour l'équipe rougee
    int seconde_vert = 0; //compteur seconde pour l'équipe verte
    int jeu = 0; //numéro du jeu
    int zone = 0; //numéro de la zone pour conquête
    int numbombe = 0; // numéro de la bobme pour mode sabotage et s&d
    int tempstempo = 0; //temps d'appui pour capturer une zone en mode conquete
    float tempo = 0; //définition du tempo
    int heure_detonation_init = 0; // compteur heure initial pour la détonation
    int minute_detonation_init = 0; // compteur minute initial pour la détonation
    int seconde_detonation_init = 0; // compteur seconde initial pour la détonation
    int heure_detonation = 0; // compteur heure pour la détonation
    int minute_detonation = 0; // compteur minute pour la détonation
    int seconde_detonation = 0; // compteur seconde pour la détonation
    char heureset[2];
    char minuteset[2];
    char secondeset[2];
    char heure_detonationset[2];
    char minute_detonationset[2];
    char seconde_detonationset[2];
    char tempstemposet[2];
    boolean etat_bp_vert; // état de l'appui du bouton vert
    boolean etat_bp_rouge; // état de l'appui du bouton rouge
    boolean etat_filblanc; // etat de coupure du fil blanc
    boolean etat_filbleu; // etat de coupure du fil bleu
    boolean etat_filjaune; // etat de coupure du fil jaune
    boolean etat_filvert; // etat de la coupure du fil noir
    boolean etat_badwire; // etat de la coupure de badwire
    boolean etat_goodwire; // etat de la coupure de goodwire
    boolean etat_oupswire; // etat de la coupure de oupswire
    boolean etat_ledbleu; // etat bleu des led de la bande RGB
    boolean etat_ledrouge; // etat rouge des led de la bande RGB
    boolean etat_ledvert; // etat vert des led de la bande RGB
    int compteur_fil = 0; // compteur pour oupswire
    char password[4]; // nombre de chiffre dans le code
    char mdpentre[4]; // nombre de chiffre entré pour le code
    int mdplong = 0; // nombre de caractère écrit pour le mot de passe
    int mdperreur = 0; // nombre d'erreur dans la saisi du code
    int goodwire = 0; // numéro du fil à couper pour désamorcer la bombe
    int badwire = 0; // numéro du fin à couper pour faire exploser la bombe
    int oupswire = 0; // numéro du fil à couper pour réduire le temps de la bombe
    int nonwire = 0; // numéro du fil à couper inutile

    long secMillis = 0;
    long secMillis_conquete = 0;
    long secMillis_sabotage = 0;
    long secMillis_search = 0;
    long secMillis_bip = 0;
    long secMillis_appui = 0;
    int interval = 1000; // delais pour 1 seconde en ms


    //définition des broches utilisées pour le keypad (lignes et colonnes)
    const int C4 = 2;
    const int C3 = 3;
    const int C2 = 4;
    const int C1 = 5;
    const int L4 = 16;
    const int L3 = 17;
    const int L2 = 18;
    const int L1 = 19;

    //définition des keys
    char keys[LIGNES][COLONNES] =
    {
       {'1','2','3','A'},
       {'4','5','6','B'},
       {'7','8','9','C'},
       {'*','0','#','D'}
    };//fin de définition des keys du keypad

    byte BrochesLignes[LIGNES] = {L1,L2,L3,L4};
    byte BrochesColonnes[COLONNES] = {C1,C2,C3,C4};

    char key;
     
      LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display

      Keypad keypad = Keypad( makeKeymap(keys), BrochesLignes, BrochesColonnes, LIGNES, COLONNES);


    void setup()
    {
       lcd.init();                        //
       lcd.backlight();                  //
       lcd.setCursor(3,0);                  //
       lcd.print("Projet Airsoft");         //
       lcd.setCursor(1,1);                  //
       lcd.print("pour la team 1911");         //  initialisation test du LCD et présentation
       lcd.setCursor(5,2);                  //
       lcd.print("Par Pierro");            //
       lcd.setCursor(0,3);                  //
       lcd.print("Appuyer A pour jouer");      //
       pinMode(filjaune, INPUT_PULLUP); // définition du fil jaune comme entrée
       pinMode(filbleu, INPUT_PULLUP); // définition du fil bleu comme entrée
       pinMode(filblanc, INPUT_PULLUP); // définition du fil blanc comme entrée
       pinMode(bouton_vert, INPUT); // définition pin bp vert comme entrée
       pinMode(bouton_rouge, INPUT); // définition pin bp rouge comme entrée
       pinMode(ledbleu, OUTPUT); // définition pin led bleu comme sortie
       pinMode(ledrouge, OUTPUT); // définition pin led rouge comme sortie
       pinMode(ledvert, OUTPUT); // définition pin led verte comme sortie
       digitalWrite(ledbleu, LOW); // mise à l'état éteint de la led bleu
       digitalWrite(ledrouge, LOW); // mise à l'état éteint de la led rouge
       digitalWrite(ledvert, LOW); // mise à l'état éteint de la led vert
       digitalWrite(bouton_vert, HIGH); // mise à l'état haut du bp vert
       digitalWrite(bouton_rouge, HIGH); // mise à l'état haut du bp rouge
       randomSeed(analogRead(0));
       while(1)//boucle d'attente pour commencer à jouer
       {
          key = keypad.getKey();//lecture de la key appuyée
          if(key == 'A')
          {
             tone(buzzer,300);
             delay(150);
             tone(buzzer,400);
             delay(150);
             tone(buzzer,500);
             delay(150);
             tone(buzzer,600);
             delay(150);
             tone(buzzer,700,150);
             menu();
          }//si la key A est appuyée on va au menu
       } //fin boucle d'attente
    } //fin void setup

    void loop()
    {
    } //fin void loop

    void menu()//fonction menu
    {
       jeu = 0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("A = Conquete"); //contrôler un point pour réapparaitre et marquer des points
       lcd.setCursor(0,1);
       lcd.print("B = Bombe"); //désamorcer une bombe dans le temps imparti
       lcd.setCursor(0,2);
       lcd.print("C = Sabotage"); //trouver une bombe et la faire exploser pendant le temps imparti
       lcd.setCursor(0,3);
       lcd.print("D = Search & destroy"); // trouver une bombe et la défendre pour la faire exploser
       while(1) //boucle d'attente pour choisir le mode de jeu
       {
          key = keypad.getKey();//lecture de la key appuyée
          if(key == 'A'){tone(buzzer,500,100);conquete();} //si appui sur la key A alors menu conquete
          if(key == 'B'){tone(buzzer,500,100);bombe();} //si appui sur la key B alors menu bombe
          if(key == 'C'){tone(buzzer,500,100);sabotage();} //si appui sur la key C alors menu sabotage
          if(key == 'D'){tone(buzzer,500,100);search();} //si appui sur la key D alors menu search
       } //fin boucle d'attente
    } //fin void menu

    void conquete()//point de respawn capturable à garder le plus de temps possible
    {
       zone = 0;
       jeu = 1;
       heure_vert = 0;
       heure_rouge = 0;
       minute_rouge = 0;
       minute_vert = 0;
       seconde_rouge = 0;
       seconde_vert = 0;
       lcd.clear();
       tempsjeu(); //selection du temps de jeu
       deftempstempo(); // selection du temps d'appui sur le bouton pour capturer une zone
       startgamecount(); //compte à rebours pour jouer
       while(1)
       {
          etat_bp_vert = digitalRead(bouton_vert);
          etat_bp_rouge = digitalRead(bouton_rouge);
          if (etat_bp_vert == LOW) // si on appui sur bp vert
          {
             if (zone == 0) // si la zone est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(1,0);
                lcd.print("Capture de la zone");
                while (i != 20) // tant que le bouton vert est appuyé : neutre => vert
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone neutre
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone verte
                   {
                      tone(buzzer,1000,1000);
                      zone = 1;
                      lcd.clear();
                      break;
                   } // fin if zone capturé : vert
                } // fin while neutre => vert
             } // fin if zone neutre
             if (zone == 2) // si la zone est rouge
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton vert est appuyé : rouge => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(19-i,1);
                   lcd.print(" ");
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone rouge
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone neutre
                   {
                      tone(buzzer,1000,1000);
                      zone = 0;
                      lcd.clear();
                      break;
                   } // fin if zone neutralisé
                } // fin while rouge => neutre
             } // fin if zone rouge
          } // fin if bp vert
          if (etat_bp_rouge == LOW) //si appui sur bp rouge
          {
             if (zone == 0) // si la zone est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(1,0);
                lcd.print("Capture de la zone");
                while (i != 20) // tant que le bouton rouge est appuyé : neutre => rouge
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone neutre
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone rouge
                   {
                      tone(buzzer,1000,1000);
                      zone = 2;
                      lcd.clear();
                      break;
                   } // fin if zone capturé : rouge
                } // fin while neutre => rouge
             } // fin if zone neutre
             if (zone == 1) // si la zone est verte
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton rouge est appuyé : vert => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(20-i,1);
                   lcd.print(" ");
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour en zone verte
                   if (i == 20) // si le bouton est maintenu le temps demandé : zone neutre
                   {
                      tone(buzzer,1000,1000);
                      zone = 0;
                      lcd.clear();
                      break;
                   } // fin if zone neutralisé
                } // fin while rouge => neutre
             } // fin if zone verte
          } // fin if bp rouge
          if(zone == 0) // si la zone est neutre on note "zone neutre" et on affiche le temps des deux équipes
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(4,0);
             lcd.print("ZONE NEUTRE");
             lcd.setCursor(0,2);
             lcd.print("Temps vert:");
             if (heure_vert < 10)
             {
                lcd.setCursor(11,2);
                lcd.print("0");
                lcd.print(heure_vert);
             }
             if (heure_vert >= 10)
             {
                lcd.setCursor(11,2);
                lcd.print(heure_vert);
             }
             lcd.print(":");
             if (minute_vert < 10);
             {
                lcd.setCursor(14,2);
                lcd.print("0");
                lcd.print(minute_vert);
             }
             if (minute_vert >= 10)
             {
                lcd.setCursor(14,2);
                lcd.print(minute_vert);
             }
             lcd.print(":");
             if (seconde_vert < 10)
             {
                lcd.setCursor(17,2);
                lcd.print("0");
                lcd.print(seconde_vert);
             }
             if (seconde_vert >= 10)
             {
                lcd.setCursor(17,2);
                lcd.print(seconde_vert);
             }
             lcd.setCursor(0,3);
             lcd.print("Temps rouge:");
             if (heure_rouge < 10)
             {
                lcd.setCursor(12,3);
                lcd.print("0");
                lcd.print(heure_rouge);
             }
             if (heure_rouge >= 10)
             {
                lcd.setCursor(12,3);
                lcd.print(heure_rouge);
             }
             lcd.print(":");
             if (minute_rouge < 10);
             {
                lcd.setCursor(15,3);
                lcd.print("0");
                lcd.print(minute_rouge);
             }
             if (minute_rouge >= 10)
             {
                lcd.setCursor(15,3);
                lcd.print(minute_rouge);
             }
             lcd.print(":");
             if (seconde_rouge < 10)
             {
                lcd.setCursor(18,3);
                lcd.print("0");
                lcd.print(seconde_rouge);
             }
             if (seconde_rouge >= 10)
             {
                lcd.setCursor(18,3);
                lcd.print(seconde_rouge);
             }               
          } // fin if zone neutre
          else if(zone == 1) // si la zone est verte on lance ou relance et on affiche le temps de l'équipe verte
          {
             digitalWrite(ledvert, HIGH);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(5,0);
             lcd.print("ZONE VERTE");
             lcd.setCursor(0,2);
             lcd.print("Temps vert:");
             lcd.setCursor(11,2);
             if (heure_vert < 10)
             {
                lcd.print("0");
                lcd.print(heure_vert);
             }
             if (heure_vert >= 10)
             {
                lcd.print(heure_vert);
             }
             lcd.print(":");
             if (minute_vert < 10);
             {
                lcd.print("0");
                lcd.print(minute_vert);
             }
             if (minute_vert >= 10)
             {
                lcd.print(minute_vert);
             }
             lcd.print(":");
             if (seconde_vert < 10)
             {
                lcd.print("0");
                lcd.print(seconde_vert);
             }
             if (seconde_vert >= 10)
             {
                lcd.print(seconde_vert);
             }

             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_conquete > interval)
             {
                secMillis_conquete = currentMillis;
                seconde_vert++;
                if (seconde_vert > 59)
                {
                   minute_vert++;
                   seconde_vert = 0;
                }
                if (minute_vert > 59)
                {
                   heure_vert++;
                   minute_vert = 0;
                }
             }         
          } // fin if zone verte
          else if(zone == 2) // si la zone est rouge on lance ou relance et on affiche le temps de l'équipe rouge
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, HIGH);
             lcd.setCursor(5,0);
             lcd.print("ZONE ROUGE");
             lcd.setCursor(0,2);
             lcd.print("Temps rouge:");
             if (heure_rouge < 10)
             {
                lcd.setCursor(12,2);
                lcd.print("0");
                lcd.print(heure_rouge);
             }
             if (heure_rouge >= 10)
             {
                lcd.setCursor(12,2);
                lcd.print(heure_rouge);
             }
             lcd.print(":");
             if (minute_rouge < 10);
             {
                lcd.setCursor(15,2);
                lcd.print("0");
                lcd.print(minute_rouge);
             }
             if (minute_rouge >= 10)
             {
                lcd.setCursor(15,2);
                lcd.print(minute_rouge);
             }
             lcd.print(":");
             if (seconde_rouge < 10)
             {
                lcd.setCursor(18,2);
                lcd.print("0");
                lcd.print(seconde_rouge);
             }
             if (seconde_rouge >= 10)
             {
                lcd.setCursor(18,2);
                lcd.print(seconde_rouge);
             }

             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_conquete > interval)
             {
                secMillis_conquete = currentMillis;
                seconde_rouge++;
                if (seconde_rouge > 59)
                {
                   minute_rouge++;
                   seconde_rouge = 0;
                }
                if (minute_rouge > 59)
                {
                   heure_rouge++;
                   minute_rouge = 0;
                }
             }
          } // fin if zone rouge
          timer(); // compte a rebours du jeu
       } // fin while(1) conquete
    } //fin void conquete

    void deftempstempo() //definition du temps d'appui pour capturer une zone
    {
       boolean suivant;
       tempstempo = 0;
       tempstemposet[0] = '\0';
       lcd.clear();
       lcd.setCursor(2,0);
       lcd.print("Temps de capture");

       lcd.setCursor(8,1);
       lcd.print("SSs");
       lcd.setCursor(6,3);
       lcd.print("*: MENU");
       while (tempstempo < 2)
       {
          lcd.setCursor(tempstempo + 8,1);
          lcd.cursor();
          key = keypad.getKey();
          if (key != NO_KEY)
          {
             if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
             {
                lcd.print(key);
                tempstemposet[tempstempo] = key;
                tempstempo++;
                tone(buzzer, 500, 100);
             }
             if (key == '*'){tone(buzzer, 500, 100);menu();}
          }
       }
       tempstempo = (int) strtol(tempstemposet, (char **)NULL, 10);
       tempstempo = tempstempo * 1000;
       tempo = tempstempo /20;
       lcd.noCursor();
       lcd.clear();
       lcd.setCursor(2,0);
       lcd.print("Vous avez choisi");
       lcd.setCursor(9,1);
       lcd.print(tempstempo/1000);
       lcd.print("s");
       lcd.setCursor(1,3);
       lcd.print("Touche = continuer");
       keypad.waitForKey();
       tone(buzzer,500,100);
    } // fin void deftempstempo

    void bombe()//bombe à désamorcer par un code avant la fin du jeu
    {
       jeu = 2;
       lcd.clear();
       tempsjeu(); //selection du temps de jeu
       entrer_code(); // saisi du code
       check_wire(); // vérifie la connection des fil à couper
       randow_wire(); // définie au hasardle rôles des fils à couper
       startgamecount(); //compte à rebours pour jouer
       lcd.clear();
       boolean suivant = false;
       interval = 1000; // intervalle initial 1s
       compteur_fil = 0;
       while (mdplong < 4) // tant que la longueur du mot de passe < 4
       {
          timer(); // compte a rebours du jeu
          etat_oupswire = digitalRead(oupswire);
          etat_goodwire = digitalRead(goodwire);
          etat_badwire = digitalRead(badwire);
          if (etat_oupswire == HIGH && compteur_fil == 0) // si oups wire est coupé
          {
             if (heure >= 0 && minute > 1)
             {
                heure = 0;
                minute = 1;
                seconde = 0;
                compteur_fil = 1;
             }
             else
             {
                interval = 10;
                compteur_fil = 1;
             }
          } // fin if oupswire
          if (etat_goodwire == HIGH) // si le bon fil est coupé
          {
             lcd.clear();
             lcd.noCursor();
             lcd.setCursor(0,0);
             lcd.print("BOMBE DESAMORCEE !!!");
             lcd.setCursor(2,2);
             lcd.print("FELICITATIONS !!");
             mdperreur = 0;
             mdplong = 0;
             do
             {
                for (int i=500;i<1000;i++)
                {
                   tone(buzzer,i);
                   digitalWrite(ledvert, HIGH);
                   delay(1);
                   key = keypad.getKey();
                   if (key != NO_KEY){suivant = true;}
                }
                for (int i=1000;i>500;i--)
                {
                   tone(buzzer,i);
                   digitalWrite(ledvert, LOW);
                   delay(1);
                   key = keypad.getKey();
                   if (key != NO_KEY){suivant = true;}
                }
             }
             while (suivant != true);
             noTone(buzzer);
             digitalWrite(ledvert, LOW);
             rejouer();
          } // fin if goodwire
          if (etat_badwire == HIGH){boom();break;}
          lcd.setCursor(3,2);
          lcd.print("Code :");
          key = keypad.getKey();
          if (key == '*') // si appui sur *
          {
             mdplong = 0; // efface le mot de passe
             lcd.clear();
             lcd.setCursor(3,2);
             lcd.print("Code :");
          } // fin if touche *
          else if (key != NO_KEY && key != '*') // si l'appui est différent de *
          {
             lcd.setCursor(mdplong + 10,2);
             lcd.cursor();
             lcd.print(key); // affiche la touche appuyé
             mdpentre[mdplong] = key;
             mdplong++;
          } // fin if touche entrée
          if (mdplong == 4) // si la longueur du mdp = 4
          {
             if (mdpentre [0] == password[0] && mdpentre [1] == password[1] && mdpentre [2] == password[2] && mdpentre [3] == password[3]) // si mdp est correct
             {
                lcd.clear();
                lcd.noCursor();
                lcd.setCursor(0,0);
                lcd.print("BOMBE DESAMORCEE !!!");
                lcd.setCursor(2,2);
                lcd.print("FELICITATIONS !!");
                mdperreur = 0;
                mdplong = 0;
                do
                {
                   for (int i=500;i<1000;i++)
                   {
                      tone(buzzer,i);
                      digitalWrite(ledvert, HIGH);
                      delay(1);
                      key = keypad.getKey();
                      if (key != NO_KEY){suivant = true;}
                   }
                   for (int i=1000;i>500;i--)
                   {
                      tone(buzzer,i);
                      digitalWrite(ledvert, LOW);
                      delay(1);
                      key = keypad.getKey();
                      if (key != NO_KEY){suivant = true;}
                   }
                }
                while (suivant != true);
                noTone(buzzer);
                digitalWrite(ledvert, LOW);
                rejouer();
             } // fin if bombe désamorcée
             else // si mdp incorrect
             {
                lcd.noCursor();
                lcd.clear();
                lcd.setCursor(3,1);
                lcd.print("Mauvais code !");
                digitalWrite(ledrouge, HIGH);
                delay(100);
                digitalWrite(ledrouge, LOW);
                delay(100);
                digitalWrite(ledrouge, HIGH);
                delay(100);
                digitalWrite(ledrouge, LOW);
                delay(200);
                lcd.clear();
                mdperreur++; // augmente compteur d'erreur
                if (mdperreur == 1){heure = heure/2; minute = minute/2; seconde = seconde/2;} // divise le temps restant par deux
                if (mdperreur == 2){interval = 100;} // 1s = 10s
                if (mdperreur == 3){heure = heure/2; minute = minute/2; seconde = seconde/2;} // divise le temps restant par deux
                if (mdperreur == 4){interval = 1;} // 1s = 1000s
                if (mdperreur > 4){heure = heure/2; minute = minute/2; seconde = seconde/2;} // divise le temps restant par deux
                mdplong = 0; // remet à zéro longueur mdp
             } // fin else mdp incorrect
          } // fin if longueur mdp = 4
       } // fin while longueur mdp < 4
    } //fin void bombe

    void sabotage()//bombe réamorçable à désamorcer avant la fin du jeu
    {
       jeu = 3;
       numbombe = 0;
       lcd.clear();
       tempsjeu(); //delection du temps de jeu
       deftempstempo(); // définition du temps d'appui pour capturer une zone
       temps_detonation(); //définition du compte à rebours de détonation
       startgamecount(); //compte à rebours pour jouer
       boolean suivant = false;
       while(1)
       {
          etat_bp_vert = digitalRead(bouton_vert);
          etat_bp_rouge = digitalRead(bouton_rouge);
          if (etat_bp_vert == LOW) // si on appui sur bp vert
          {
             if (numbombe == 0) // si la bombe est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Amorcage de la bombe");
                while (i != 20) // tant que le bouton vert est appuyé : bombe neutre => vert
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe verte
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 1;
                      lcd.clear();
                      break;
                   } // fin if bombe verte
                } // fin while bombe neutre => verte
             } // fin if bombe neutre
             if (numbombe == 2) // si la bombe est rouge
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton vert est appuyé : bombe rouge => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(19-i,1);
                   lcd.print(" ");
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe rouge
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe neutre
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 0;
                      lcd.clear();
                      break;
                   } // fin if bombe neutre
                } // fin while bombe rouge => neutre
             } // fin if bombe rouge
          } // fin if bp vert
          if (etat_bp_rouge == LOW) //si appui bp rouge
          {
             if (numbombe == 0) // si la bombe est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Amorcage de la bombe");
                while (i != 20) // tant que le bouton est appuyé : bombe neutre => rouge
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe rouge
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 2;
                      lcd.clear();
                      break;
                   } // fin if bombe rouge
                } // fin while neutre => rouge
             } // fin if bombe neutre
             if (numbombe == 1) // si la bombe est verte
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton est appuyé : bombe verte => neutre
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(20-i,1);
                   lcd.print(" ");
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();break;} // si le bouton est relaché retour bombe verte
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe neutre
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 0;
                      lcd.clear();
                      break;
                   } // fin if bombe neutre
                } // fin while bombe verte => neutre
             } // fin if bombe verte
          } // fin if bp rouge
          if (numbombe == 0) // si la bombe n'a pas été amorcée
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, LOW);
             heure_detonation = heure_detonation_init;
             minute_detonation = minute_detonation_init;
             seconde_detonation = seconde_detonation_init;
             lcd.setCursor(1,0);
             lcd.print("Bombe non amorcee");
          } // fin if bombe non amorcée
          else if (numbombe == 1) // si la bombe est amorcée par les verts
          {
             digitalWrite(ledvert, HIGH);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(4,0);
             lcd.print("BOMBE VERTE");
             lcd.setCursor(2,2);
             lcd.print("Avant explosion :");
             lcd.setCursor(5,3);
             if (heure_detonation >= 10)
             {
                lcd.print(heure_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(heure_detonation);
             }
             lcd.print(":");
             if (minute_detonation >= 10)
             {
                lcd.print(minute_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(minute_detonation);
             }
             lcd.print(":");
             if (seconde_detonation >= 10)
             {
                lcd.print(seconde_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(seconde_detonation);
             }
             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_sabotage > interval)
             {
                secMillis_sabotage = currentMillis;
                seconde_detonation--;
                if (seconde_detonation < 0)
                {
                   minute_detonation--;
                   seconde_detonation = 59;
                }
                if (minute_detonation < 0)
                {
                   heure_detonation--;
                   minute_detonation = 59;
                }
                if (heure_detonation < 0)
                {
                   heure_detonation = 0;
                }
             }
             if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
             {
                lcd.clear();
                while (1)
                {
                   lcd.setCursor(3,0);
                   lcd.print("VICTOIRE !!!");
                   lcd.setCursor(1,2);
                   lcd.print("Les verts ont fait");
                   lcd.setCursor(1,3);
                   lcd.print("exploser la bombe!");
                   do
                   {
                      for (int i=500;i<1000;i++)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledvert, HIGH);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                      for (int i=1000;i>500;i--)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledvert, LOW);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                   }
                   while (suivant != true);
                   noTone(buzzer);
                   digitalWrite(ledvert, LOW);
                   rejouer();
                }
             }
          }
          else if (numbombe == 2) // si la bombe est amorcée par les rouges
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, HIGH);
             lcd.setCursor(4,0);
             lcd.print("BOMBE ROUGE");
             lcd.setCursor(2,2);
             lcd.print("Avant explosion :");
             lcd.setCursor(5,3);
             if (heure_detonation >= 10)
             {
                lcd.print(heure_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(heure_detonation);
             }
             lcd.print(":");
             if (minute_detonation >= 10)
             {
                lcd.print(minute_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(minute_detonation);
             }
             lcd.print(":");
             if (seconde_detonation >= 10)
             {
                lcd.print(seconde_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(seconde_detonation);
             }
             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_sabotage > interval)
             {
                secMillis_sabotage = currentMillis;
                seconde_detonation--;
                if (seconde_detonation < 0)
                {
                   minute_detonation--;
                   seconde_detonation = 59;
                }
                if (minute_detonation < 0)
                {
                   heure_detonation--;
                   minute_detonation = 59;
                }
                if (heure_detonation < 0)
                {
                   heure_detonation = 0;
                }
             }
             if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
             {
                lcd.clear();
                while (1)
                {
                   lcd.setCursor(3,0);
                   lcd.print("VICTOIRE !!!");
                   lcd.setCursor(0,2);
                   lcd.print("Les rouges ont fait");
                   lcd.setCursor(1,3);
                   lcd.print("exploser la bombe!");
                   do
                   {
                      for (int i=500;i<1000;i++)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledrouge, HIGH);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                      for (int i=1000;i>500;i--)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledrouge, LOW);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                   }
                   while (suivant != true);
                   noTone(buzzer);
                   digitalWrite(ledrouge, LOW);
                   rejouer();
                }
             }
          }
          timer();
       }
    } //fin void sabotage

    void search()//trouver, amorcer et défendre la bombe avant la fin du jeu
    {
       jeu = 4;
       numbombe = 0;
       lcd.clear();
       tempsjeu(); //delection du temps de jeu
       deftempstempo();
       temps_detonation(); //définition du compte à rebours de détonation
       startgamecount(); //compte à rebours pour jouer
       boolean suivant = false;
       while(1)
       {
          etat_bp_vert = digitalRead(bouton_vert);
          etat_bp_rouge = digitalRead(bouton_rouge);
          if (etat_bp_vert == LOW) // si on appui sur bp vert
          {
             if (numbombe == 0) // si la bombe est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Amorcage de la bombe");
                while (i != 20) // tant que le bouton est appuyé : bombe neutre => verte
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
                   if (i == 20) // si le bouton est appuyé le temps demandé
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 1;
                      lcd.clear();
                      break;
                   } // fin if bombe neutre
                } // fin while bombe neutre => verte
             } // fin if bombe neutre
             if (numbombe == 2) // si la bombe est rouge
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton est appuyé : désamorçage de la bombe
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(19-i,1);
                   lcd.print(" ");
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_vert = digitalRead(bouton_vert);
                   if (etat_bp_vert == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe rouge
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe désamorcée = victoire des verts
                   {
                      digitalWrite(ledrouge, LOW);
                      tone(buzzer,1000,1000);
                      numbombe = 0;
                      lcd.clear();
                      lcd.setCursor(4,0);
                      lcd.print("VICTOIRE !!!");
                      lcd.setCursor(2,2);
                      lcd.print("Les verts ont");
                      lcd.setCursor(0,3);
                      lcd.print("desamorce la bombe !");
                      do
                      {
                         for (int i=500;i<1000;i++)
                         {
                            tone(buzzer,i);
                            digitalWrite(ledvert, HIGH);
                            delay(1);
                            key = keypad.getKey();
                            if (key != NO_KEY){suivant = true;}
                         }
                         for (int i=1000;i>500;i--)
                         {
                            tone(buzzer,i);
                            digitalWrite(ledvert, LOW);
                            delay(1);
                            key = keypad.getKey();
                            if (key != NO_KEY){suivant = true;}
                         }
                      }
                      while (suivant != true);
                      noTone(buzzer);
                      digitalWrite(ledvert, LOW);
                      rejouer();                  
                   } // fin if victoire vert
                } // fin while bombe rouge => désamorcée
             } // fin if bombe rouge
          } // fin if bp vert
          if (etat_bp_rouge == LOW) //si appui sur bp rouge
          {
             if (numbombe == 0) // si la bombe est neutre
             {
                int i = 0;
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Amorcage de la bombe");
                while (i != 20) // tant que le bouton est appuyé : bombe neutre => rouge
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(i,1);
                   lcd.print((char)255);
                   etat_ledrouge = digitalRead(ledrouge);
                   if (etat_ledrouge == LOW)
                   {
                      digitalWrite(ledrouge, HIGH);
                   }
                   else if (etat_ledrouge == HIGH)
                   {
                      digitalWrite(ledrouge, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe neutre
                   if (i == 20) // si le bouton est appuyé le temps demandé : bombe neutre => rouge
                   {
                      tone(buzzer,1000,1000);
                      numbombe = 2;
                      lcd.clear();
                      break;
                   } // fin if bombe rouge
                } // fin while bombe neutre => rouge
             } // fin if bombe neutre
             if (numbombe == 1) // si la bombe est verte
             {
                int i = 0;
                lcd.clear();
                barre();
                lcd.setCursor(3,0);
                lcd.print("Neutralisation");
                while (i != 20) // tant que le bouton est appuyé : désamorçage de la bombe
                {
                   tone(buzzer,300,500);
                   tone(buzzer,700,500);               
                   lcd.setCursor(20-i,1);
                   lcd.print(" ");
                   etat_ledvert = digitalRead(ledvert);
                   if (etat_ledvert == LOW)
                   {
                      digitalWrite(ledvert, HIGH);
                   }
                   else if (etat_ledvert == HIGH)
                   {
                      digitalWrite(ledvert, LOW);
                   }
                   delay(tempo);
                   i++;
                   etat_bp_rouge = digitalRead(bouton_rouge);
                   if (etat_bp_rouge == HIGH){lcd.clear();noTone(buzzer);break;} // si le bouton est relaché retour bombe verte
                   if (i == 20) // si le bouton est appuuyé le temps demandé : bombe désamorcée = victoire rouge
                   {
                      digitalWrite(ledvert, LOW);
                      tone(buzzer,1000,1000);
                      numbombe = 0;
                      lcd.clear();
                      lcd.setCursor(4,0);
                      lcd.print("VICTOIRE !!!");
                      lcd.setCursor(2,2);
                      lcd.print("Les rouges ont");
                      lcd.setCursor(0,3);
                      lcd.print("desamorce la bombe");
                      do
                      {
                         for (int i=500;i<1000;i++)
                         {
                            tone(buzzer,i);
                            digitalWrite(ledrouge, HIGH);
                            delay(1);
                            key = keypad.getKey();
                            if (key != NO_KEY){suivant = true;}
                         }
                         for (int i=1000;i>500;i--)
                         {
                            tone(buzzer,i);
                            digitalWrite(ledrouge, LOW);
                            delay(1);
                            key = keypad.getKey();
                            if (key != NO_KEY){suivant = true;}
                         }
                      }
                      while (suivant != true);
                      noTone(buzzer);
                      digitalWrite(ledrouge, LOW);
                      rejouer();                  
                   } // fin if victoire rouge
                } // fin while bombe verte => désamorcée
             } // fin if bombe verte
          } // fin if bp rouge
          if (numbombe == 0) // si la bombe n'a pas été amorcée
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, LOW);
             heure_detonation = heure_detonation_init;
             minute_detonation = minute_detonation_init;
             seconde_detonation = seconde_detonation_init;
             lcd.setCursor(1,0);
             lcd.print("Bombe non amorcee");
          } // fin if bombe non amorcée
          else if (numbombe == 1) // si la bombe est amorcée par les verts
          {
             digitalWrite(ledvert, HIGH);
             digitalWrite(ledrouge, LOW);
             lcd.setCursor(4,0);
             lcd.print("BOMBE VERTE");
             lcd.setCursor(2,2);
             lcd.print("Avant explosion :");
             lcd.setCursor(5,3);
             if (heure_detonation >= 10)
             {
                lcd.print(heure_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(heure_detonation);
             }
             lcd.print(":");
             if (minute_detonation >= 10)
             {
                lcd.print(minute_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(minute_detonation);
             }
             lcd.print(":");
             if (seconde_detonation >= 10)
             {
                lcd.print(seconde_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(seconde_detonation);
             }
             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_sabotage > interval)
             {
                secMillis_sabotage = currentMillis;
                seconde_detonation--;
                if (seconde_detonation < 0)
                {
                   minute_detonation--;
                   seconde_detonation = 59;
                }
                if (minute_detonation < 0)
                {
                   heure_detonation--;
                   minute_detonation = 59;
                }
                if (heure_detonation < 0)
                {
                   heure_detonation = 0;
                }
             }
             if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
             {
                lcd.clear();
                while (1)
                {
                   lcd.setCursor(3,0);
                   lcd.print("VICTOIRE !!!");
                   lcd.setCursor(1,2);
                   lcd.print("Les verts ont fait");
                   lcd.setCursor(1,3);
                   lcd.print("exploser la bombe!");
                   do
                   {
                      for (int i=500;i<1000;i++)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledvert, HIGH);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                      for (int i=1000;i>500;i--)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledvert, LOW);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                   }
                   while (suivant != true);
                   noTone(buzzer);
                   digitalWrite(ledvert, LOW);
                   rejouer();
                }
             }
          }
          else if (numbombe == 2) // si la bombe est amorcée par les rouges
          {
             digitalWrite(ledvert, LOW);
             digitalWrite(ledrouge, HIGH);
             lcd.setCursor(4,0);
             lcd.print("BOMBE ROUGE");
             lcd.setCursor(2,2);
             lcd.print("Avant explosion :");
             lcd.setCursor(5,3);
             if (heure_detonation >= 10)
             {
                lcd.print(heure_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(heure_detonation);
             }
             lcd.print(":");
             if (minute_detonation >= 10)
             {
                lcd.print(minute_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(minute_detonation);
             }
             lcd.print(":");
             if (seconde_detonation >= 10)
             {
                lcd.print(seconde_detonation);
             }
             else
             {
                lcd.print("0");
                lcd.print(seconde_detonation);
             }
             unsigned long currentMillis = millis();
             if (currentMillis - secMillis_sabotage > interval)
             {
                secMillis_sabotage = currentMillis;
                seconde_detonation--;
                if (seconde_detonation < 0)
                {
                   minute_detonation--;
                   seconde_detonation = 59;
                }
                if (minute_detonation < 0)
                {
                   heure_detonation--;
                   minute_detonation = 59;
                }
                if (heure_detonation < 0)
                {
                   heure_detonation = 0;
                }
             }
             if (heure_detonation == 0 && minute_detonation == 0 && seconde_detonation == 0)
             {
                lcd.clear();
                while (1)
                {
                   lcd.setCursor(3,0);
                   lcd.print("VICTOIRE !!!");
                   lcd.setCursor(0,2);
                   lcd.print("Les rouges ont fait");
                   lcd.setCursor(1,3);
                   lcd.print("exploser la bombe!");
                   do
                   {
                      for (int i=500;i<1000;i++)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledrouge, HIGH);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                      for (int i=1000;i>500;i--)
                      {
                         tone(buzzer,i);
                         digitalWrite(ledrouge, LOW);
                         delay(1);
                         key = keypad.getKey();
                         if (key != NO_KEY){suivant = true;}
                      }
                   }
                   while (suivant != true);
                   noTone(buzzer);
                   digitalWrite(ledrouge, LOW);
                   rejouer();
                }
             }
          }
          timer();
       }
    } //fin void search and destroy

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Mer 5 Oct - 16:20

    2ème partie :

    Code:
    void temps_detonation() // définition du timer de la bombe
    {
     heure_detonation_init = 0;
     minute_detonation_init = 0;
     seconde_detonation_init = 0;
     heure_detonationset [0] = '\0';
     minute_detonationset [0] = '\0';
     seconde_detonationset [0] = '\0';
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Definir temps bombe");
     lcd.setCursor(6,1);
     lcd.print("HH:MM:SS");
     lcd.setCursor(6,3);
     lcd.print("*: MENU");
     while (heure_detonation_init < 2)
     {
       lcd.setCursor(heure_detonation_init + 6, 1);
       lcd.cursor();
       key = keypad.getKey();
       if (key != NO_KEY)
       {
         if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
         {
         lcd.print(key);
         heure_detonationset[heure_detonation_init] = key;
         heure_detonation_init++;
         tone(buzzer, 500, 100);
         }
         if (key == '*'){tone(buzzer, 500, 100);menu();}
       }
     }
     heure_detonation_init = (int) strtol(heure_detonationset, (char **)NULL, 10);
     while (minute_detonation_init < 2)
     {
     lcd.setCursor(minute_detonation_init + 9, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     minute_detonationset[minute_detonation_init] = key;
     minute_detonation_init ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     minute_detonation_init = (int) strtol(minute_detonationset, (char **)NULL, 10);
     while (seconde_detonation_init < 2)
     {
     lcd.setCursor(seconde_detonation_init + 12, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     seconde_detonationset[seconde_detonation_init] = key;
     seconde_detonation_init ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     seconde_detonation_init = (int) strtol(seconde_detonationset, (char **)NULL, 10);
     //récapitulatif temps de detonation
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(2,0);
     lcd.print("Vous avez choisi");
     lcd.setCursor(5,1);
     lcd.print(heure_detonation_init);
     lcd.print(":");
     lcd.print(minute_detonation_init);
     lcd.print(":");
     lcd.print(seconde_detonation_init);
     lcd.setCursor(1,3);
     lcd.print("Touche = continuer");
     keypad.waitForKey(); // attente du l'appui sur une touche pour sortir de la fonction
     tone(buzzer,500,100);
    } // fin void temps_detonation

    void tempsjeu()//définition du temps de jeu de la partie
    {
     heure = 0;
     minute = 0;
     seconde = 0;
     heureset [0] = '\0';
     minuteset [0] = '\0';
     secondeset [0] = '\0';
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Definir temps de jeu");
     lcd.setCursor(6,1);
     lcd.print("HH:MM:SS");
     lcd.setCursor(6,3);
     lcd.print("*: MENU");
     while (heure < 2)
     {
       lcd.setCursor(heure + 6, 1);
       lcd.cursor();
       key = keypad.getKey();
       if (key != NO_KEY)
       {
         if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
         {
         lcd.print(key);
         heureset[heure] = key;
         heure++;
         tone(buzzer, 500, 100);
         }
         if (key == '*'){tone(buzzer, 500, 100);menu();}
       }
     }
     heure = (int) strtol(heureset, (char **)NULL, 10);
     while (minute < 2)
     {
     lcd.setCursor(minute + 9, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     minuteset[minute] = key;
     minute ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     minute = (int) strtol(minuteset, (char **)NULL, 10);
     while (seconde < 2)
     {
     lcd.setCursor(seconde + 12, 1);
     lcd.cursor();
     key = keypad.getKey();
     if (key != NO_KEY)
     {
     if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
     {
     lcd.print(key);
     secondeset[seconde] = key;
     seconde ++;
     tone(buzzer, 500, 100);
     }
     if (key == '*'){tone(buzzer, 500, 100);menu();}
     }
     }
     seconde = (int) strtol(secondeset, (char **)NULL, 10);
     //récapitulatif temps de jeu
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(2,0);
     lcd.print("Vous avez choisi");
     lcd.setCursor(5,1);
     lcd.print(heure);
     lcd.print(":");
     lcd.print(minute);
     lcd.print(":");
     lcd.print(seconde);
     lcd.setCursor(1,3);
     lcd.print("Touche = continuer");
     keypad.waitForKey();
     tone(buzzer,500,100);
    }//fin void temps jeu

    void timer()//compte à rebours
    {
     lcd.setCursor(1,1);
     lcd.print("Temps:");
     if (heure >= 10)
     {
     lcd.setCursor(8,1);
     lcd.print(heure);
     }
     if (heure < 10)
     {
     lcd.setCursor(8,1);
     lcd.print("0");
     lcd.setCursor(9,1);
     lcd.print(heure);
     }
     lcd.print(":");
     if (minute >= 10)
     {
     lcd.setCursor(11,1);
     lcd.print(minute);
     }
     if (minute < 10)
     {
     lcd.setCursor(11,1);
     lcd.print("0");
     lcd.setCursor(12,1);
     lcd.print(minute);
     }
     lcd.print(":");
     if (seconde >= 10)
     {
     lcd.setCursor(14,1);
     lcd.print(seconde);
     }
     if (seconde < 10)
     {
     lcd.setCursor(14,1);
     lcd.print("0");
     lcd.setCursor(15,1);
     lcd.print(seconde);
     }
     if (heure <= 0) //
     {
       if ( minute < 0) //si le timer arrive à 0
       {
       while (1)
       {
       if(jeu == 1){finchrono();}
         if(jeu == 2){boom();}
         if(jeu == 3)
         {
         if (numbombe != 0)
         {
         minute = minute +1;
         timer();
         }
         else
         {
         nobomb();
         }
         }
         if(jeu == 4)
         {
         if (numbombe != 0)
         {
         minute = minute +1;
         timer();
         }
         else
         {
         nobomb();
         }
         }
         }
       }
     }
     if (heure < 0)
       {
         heure = 0;
       }
     if (minute < 0)
       {
         heure --;
         minute = 59;
       }
     if (seconde < 0)
       {
       lcd.clear();
         minute --;
         seconde = 59;
       }
     if (seconde >= 0) // si il reste du temps de jeu
       {
         unsigned long currentMillis = millis();
         if(currentMillis - secMillis >= interval) // 1s écoulée
         {
             secMillis = currentMillis;
             seconde --; // décrémente 1s
         }
         if ( heure > 0 || minute >= 10) // s'il reste au moins 10 minutes de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval * 10){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toute les 30s
         }
         if (heure == 0 && minute < 10 && minute >= 2) // s'il reste plus de 2 minutes de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval * 5){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les 10s
         }
         if (heure == 0 && minute < 2) // s'il reste moins de 2 minutes de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les secondes
         }
         if (heure == 0 && minute == 0 && seconde < 30) // s'il reste moins de 30s de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval/2){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les 1/2s
         }
         if (heure == 0 && minute == 0 && seconde <= 10) // s'il reste moins de 10s de jeu
         {
         unsigned long currentMillis = millis();
         if (currentMillis - secMillis_bip >= interval/4){secMillis_bip = currentMillis;tone(buzzer,500,100);} // bip toutes les 1/4s
         }
       }
    } //fin void timer

    void finchrono() // fin du temps de jeu comquête
    {
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Fin du temps de jeu!");
     if (heure_vert > heure_rouge) // si plus d'heure pour les verts
     {
     lcd.setCursor(1,1);
     lcd.print("Victoire des verts");
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW); // alors victoire des verts
     } // fin if heure vert
     else if (heure_rouge > heure_vert) // si plus d'heure pour les rouges
     {
     lcd.setCursor(0,1);
     lcd.print("Victoire des rouges");
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH); // alors victoire des rouges
     } // fin if heure rouge
     else if (heure_vert == heure_rouge) // si égalité des heures
     {
     if (minute_vert > minute_rouge) // si plus de minute pour les verts
     {
     lcd.setCursor(1,1);
     lcd.print("Victoire des verts");
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW); // alors victoire des verts
     } // fin if minute vert
     else if (minute_rouge > minute_vert) // si plus de minute pour les rouges
     {
     lcd.setCursor(0,1);
     lcd.print("Victoire des rouges");
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH); // alors victoire des rouges
     } // fin if minute rouge
     else if (minute_vert == minute_rouge) // si égalité des minutes
     {
     if (seconde_vert > seconde_rouge) // si plus de seconde pour les verts
     {
     lcd.setCursor(1,1);
     lcd.print("Victoire des verts");
     digitalWrite(ledvert, HIGH);
     digitalWrite(ledrouge, LOW); // alors victoire des verts
     } // fin if seconde vert
     else if (seconde_rouge > seconde_vert) // si plus de seconde pour les rouges
     {
     lcd.setCursor(0,1);
     lcd.print("Victoire des rouges");
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, HIGH); // alors victoire des rouges
     } // fin if seconde rouge
     } // fin if minute
     } // fin if heure
     // affichage du temps de chaque équipe
     lcd.setCursor(0,2);
     lcd.print("Temps vert:");
     if (heure_vert < 10)
     {
     lcd.setCursor(11,2);
     lcd.print("0");
     lcd.print(heure_vert);
     }
     if (heure_vert >= 10)
     {
     lcd.setCursor(11,2);
     lcd.print(heure_vert);
     }
     lcd.print(":");
     if (minute_vert < 10);
     {
     lcd.setCursor(14,2);
     lcd.print("0");
     lcd.print(minute_vert);
     }
     if (minute_vert >= 10)
     {
     lcd.setCursor(14,2);
     lcd.print(minute_vert);
     }
     lcd.print(":");
     if (seconde_vert < 10)
     {
     lcd.setCursor(17,2);
     lcd.print("0");
     lcd.print(seconde_vert);
     }
     if (seconde_vert >= 10)
     {
     lcd.setCursor(17,2);
     lcd.print(seconde_vert);
     }
     lcd.setCursor(0,3);
     lcd.print("Temps rouge:");
     if (heure_rouge < 10)
     {
     lcd.setCursor(12,3);
     lcd.print("0");
     lcd.print(heure_rouge);
     }
     if (heure_rouge >= 10)
     {
     lcd.setCursor(12,3);
     lcd.print(heure_rouge);
     }
     lcd.print(":");
     if (minute_rouge < 10);
     {
     lcd.setCursor(15,3);
     lcd.print("0");
     lcd.print(minute_rouge);
     }
     if (minute_rouge >= 10)
     {
     lcd.setCursor(15,3);
     lcd.print(minute_rouge);
     }
     lcd.print(":");
     if (seconde_rouge < 10)
     {
     lcd.setCursor(18,3);
     lcd.print("0");
     lcd.print(seconde_rouge);
     }
     if (seconde_rouge >= 10)
     {
     lcd.setCursor(18,3);
     lcd.print(seconde_rouge);
     }
     marche_imp();
     keypad.waitForKey();
     tone(buzzer,500,100);
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     rejouer();
    } //fin void finchrono

    void boom() // si la bombe n'est pas désamorcée
    {
     mdperreur = 0;
     boolean suivant = false;
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(2,0);
     lcd.print("BOOOOOOOOOOOOM");
     lcd.setCursor(5,1);
     lcd.print("Victoire");
     lcd.setCursor(7,2);
     lcd.print("des");
     lcd.setCursor(3,3);
     lcd.print("terroristes!");
     do
     {
     for (int i=500;i<1000;i++)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, HIGH);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     for (int i=1000;i>500;i--)
     {
     tone(buzzer,i);
     digitalWrite(ledrouge, LOW);
     delay(1);
     key = keypad.getKey();
     if (key != NO_KEY){suivant = true;}
     }
     }
     while (suivant != true);
     noTone(buzzer);
     digitalWrite(ledrouge, LOW);
     rejouer();
    } //fin void boom

    void nobomb() // si la bombe n'a pas explosée
    {
     lcd.clear();
     digitalWrite(ledvert, LOW);
     digitalWrite(ledrouge, LOW);
     lcd.setCursor(1,0);
     lcd.print("La bombe n'a pas");
     lcd.setCursor(5,1);
     lcd.print("explosee");
     marche_imp();
     keypad.waitForKey();
     tone(buzzer,500,100);
     rejouer();
    } //fin void nobomb

    void rejouer() // question pour rejouer
    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Voulez-vous rejouer?");
     lcd.setCursor(0,2);
     lcd.print("A = OUI");
     lcd.setCursor(13,2);
     lcd.print("D = NON");
     delay(250);
     while(1) //boucle d'attente pour rejouer ou non
     {
     key = keypad.getKey();//lecture de la key appuyée
     if(key == 'A')
     {
     tone(buzzer,500,100);
     if(jeu == 1){conquete();} //
     if(jeu == 2){bombe();} //renvoi au précédent jeu
     if(jeu == 3){sabotage();} //
     if(jeu == 4){search();} //
     }
     if(key == 'D'){tone(buzzer,500,100);menu();} //retour au menu
     }
    } //fin void rejouer

    void startgamecount() // compte a rebours du lancement du jeu
    {
     lcd.clear();
     lcd.setCursor(3,0);
     lcd.print("Pret a jouer ?");
     lcd.setCursor(7,2);
     lcd.print("Appuyer");
     lcd.setCursor(3,3);
     lcd.print("sur une touche");
     keypad.waitForKey(); //si appui sur un bouton le jeu commence
     lcd.clear();
     for(int i = 5; i > 0; i--)
     {
     lcd.setCursor(4,1);
     lcd.print("Debut dans ");
     lcd.print(i);
     tone(buzzer,500,100);
     digitalWrite(ledbleu, HIGH);
     delay(200);
     digitalWrite(ledbleu, LOW);
     delay(800);
     }
     lcd.clear();
    } // fin void startgamecount

    void barre() // affichage de la barre de neutralisation
    {
     lcd.setCursor(0,1);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
     lcd.print((char)255);
    } // fin void barre

    void entrer_code() // choix du code de désamorçage de la bombe
    {
     lcd.clear();
     mdplong = 0;
     lcd.setCursor(4,0);
     lcd.print("Entrer code :");
     lcd.setCursor(3,3);
     lcd.print("* pour effacer");
     while (mdplong < 4)
     {
     lcd.setCursor(mdplong + 8,2);
     lcd.cursor();
     key = keypad.getKey();
     if (key == '*')
     {
     mdplong = 0;
     tone(buzzer,400,100);
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("Entrer code :");
     lcd.setCursor(3,3);
     lcd.print("* pour effacer");
     }
     else if (key != NO_KEY && key != '*')
     {
     lcd.print(key);
     tone(buzzer,500,100);
     password[mdplong] = key;
     mdplong++;
     }
     }
     if (mdplong = 4)
     {
     lcd.noCursor();
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("Code saisi :");
     lcd.setCursor(8,1);
     lcd.print(password[0]);
     lcd.print(password[1]);
     lcd.print(password[2]);
     lcd.print(password[3]);
     lcd.setCursor(2,2);
     lcd.print("Est-ce correct ?");
     lcd.setCursor(0,3);
     lcd.print("A = OUI");
     lcd.setCursor(13,3);
     lcd.print("D = NON");
     while (1)
     {
     key = keypad.getKey();
     if (key == 'A'){tone(buzzer,500,100);lcd.clear();mdplong = 0;break;}
     if (key == 'D'){tone(buzzer,400,100);entrer_code();}
     }
     }
    } // fin void entrer_code

    void check_wire() // vérifie la connection des fils
    {
     lcd.clear();
     lcd.setCursor(4,0);
     lcd.print("Verification");
     lcd.setCursor(2,2);
     lcd.print("des fils en cours");
     int i = 0;
     while (i != 20)
     {
     lcd.setCursor(i,3);
     lcd.print((char)255);
     tone(buzzer,500,100);
     digitalWrite(ledbleu, HIGH);
     delay(50);
     digitalWrite(ledbleu, LOW);
     delay(50);
     i++;
     if (i == 20){lcd.clear();}
     }
     etat_filblanc = digitalRead(filblanc);
     etat_filbleu = digitalRead(filbleu);
     etat_filjaune = digitalRead(filjaune);
     etat_filvert = digitalRead(filvert);
     while (etat_filjaune == HIGH || etat_filbleu == HIGH || etat_filblanc == HIGH || etat_filvert == HIGH) // si au moins un fin est déconnecté
     {
     etat_filblanc = digitalRead(filblanc);
     etat_filbleu = digitalRead(filbleu);
     etat_filjaune = digitalRead(filjaune);
     digitalWrite(ledrouge, HIGH);
     lcd.setCursor(0,1);
     lcd.print("Verifier les fils !!");
     if (etat_filblanc == LOW && etat_filbleu == LOW && etat_filjaune == LOW && etat_filvert == LOW){digitalWrite(ledrouge, LOW); break;}
     } // fin if fil déconnecté
     if (etat_filblanc == LOW && etat_filbleu == LOW && etat_filjaune == LOW && etat_filvert == LOW) // si tous les fils sont connectés
     {
     lcd.clear();
     lcd.setCursor(2,1);
     lcd.print("Fils connectes !");
     digitalWrite(ledvert, HIGH);
     delay(1000);
     digitalWrite(ledvert, LOW);
     } // fin if fils connectés
    } // fin void check_wire

    void randow_wire() // défini au hasard le rôle des fils à couper
    {
     badwire = 0;
     goodwire = 0;
     oupswire = 0;
     nonwire = 0;
     badwire = random(12,16);
     goodwire = random(12,16);
     oupswire = random(12,16);
     nonwire = random(12,16);
     if (badwire == goodwire || badwire == oupswire || badwire == nonwire || goodwire == oupswire || goodwire == nonwire || oupswire == nonwire){randow_wire();}
    } // fin void randow_wire

    void marche_imp()
    {
     //used 500 ms for a quart note
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 349, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 349, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 440, 1000);delay(1000);
     //first bit
     tone(buzzer, 659, 500);delay(500);
     tone(buzzer, 659, 500);delay(500);
     tone(buzzer, 659, 500);delay(500);
     tone(buzzer, 698, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 415, 500);delay(500);
     tone(buzzer, 349, 350);delay(350);
     tone(buzzer, 523, 150);delay(150);
     tone(buzzer, 440, 1000);delay(1000);
     //second bit...
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 440, 350);delay(350);
     tone(buzzer, 440, 150);delay(150);
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 830, 250);delay(250);
     tone(buzzer, 784, 250);delay(250);
     tone(buzzer, 740, 125);delay(125);
     tone(buzzer, 698, 125);delay(125);
     tone(buzzer, 740, 250);delay(250);
     delay(250);
     tone(buzzer, 455, 250);delay(250);
     tone(buzzer, 622, 500);delay(500);
     tone(buzzer, 587, 250);delay(250);
     tone(buzzer, 554, 250);delay(250);
     //start of the interesting bit
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 466, 125);delay(125);
     tone(buzzer, 523, 250);delay(250);
     delay(250);
     tone(buzzer, 349, 125);delay(125);
     tone(buzzer, 415, 500);delay(500);
     tone(buzzer, 349, 375);delay(375);
     tone(buzzer, 440, 125);delay(125);
     tone(buzzer, 523, 500);delay(500);
     tone(buzzer, 440, 375);delay(375);
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 659, 1000);delay(1000);
     //more interesting stuff (this doesn't quite get it right somehow)
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 440, 350);delay(350);
     tone(buzzer, 440, 150);delay(150);
     tone(buzzer, 880, 500);delay(500);
     tone(buzzer, 830, 250);delay(250);
     tone(buzzer, 784, 250);delay(250);
     tone(buzzer, 740, 125);delay(125);
     tone(buzzer, 698, 125);delay(125);
     tone(buzzer, 740, 250);delay(250);
     delay(250);
     tone(buzzer, 455, 250);delay(250);
     tone(buzzer, 622, 500);delay(500);
     tone(buzzer, 587, 250);delay(250);
     tone(buzzer, 554, 250);delay(250);
     //repeat... repeat
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 466, 125);delay(125);
     tone(buzzer, 523, 250);delay(250);
     delay(250);
     tone(buzzer, 349, 250);delay(250);
     tone(buzzer, 415, 500);delay(500);
     tone(buzzer, 349, 375);delay(375);
     tone(buzzer, 523, 125);delay(125);
     tone(buzzer, 440, 500);delay(500);
     tone(buzzer, 349, 375);delay(375);
     tone(buzzer, 261, 125);delay(125);
     tone(buzzer, 440, 1000);delay(1000);
     //and we're done \ó/
    }

    Krispies
    Admin

    Messages : 3783
    Date d'inscription : 16/08/2009
    Age : 49
    Localisation : VERS-Pont du gard

    Re: Boitier avec plusieurs mode de jeu

    Message par Krispies le Mer 5 Oct - 20:53

    C'est bon , j'ai chargé les bonnes bibliothèques et recopier le prog et là ça marche, certainement oublié une partie au moment du copier/coller!!
    Une question à propos des fiches bananes, elle apparaissent pas sur ton schéma, sur le code je suppose que c'est les bornes 12,13,14 et 15?
    Sur ton schéma en 12 et 13 il y a deux fils blanc et bleu reliés à la masse, ça représente les fiches?merci de tes réponses!! Wink

    PS: pourrais-tu me donner un lien pour la bibliothèque de l'écran I2C, celle qui fonctionne et je ne comprends pas trop sur ton schéma le branchement de l'écran, en principe avec le I2C on utilise les deux pins A4 etA5 or là elles sont attribuées au keypad?



    _________________

    http://airsoft-krisp.e-monsite.com/
    http://www.facebook.com/pages/Krispies-Team/470577369635210

    Bidou914
    vis rouillée
    vis rouillée

    Messages : 26
    Date d'inscription : 12/06/2015
    Age : 27
    Localisation : Essonne

    Re: Boitier avec plusieurs mode de jeu

    Message par Bidou914 le Jeu 6 Oct - 22:47

    Alors pour mes fiches banane se sont bien les fils bleu, blanc, vert et jaune relié à la masse (12,13, A0 et A1 donc 14 et 15 effectivement)
    En ce qui concerne le branchement de mon écran  il y a l'alimentation en 5V et la masse et 2 fils SLC et SDA. Sur une arduino nano ces deux pins peuvent être utilisés en A4 et A5 ou directement sur les ports SLC et SDA (lien pour un pinout ce sera peut être plus claire)
    Enfin en ce qui concerne ma bibliothèque pour l'écran en I2C c'est celle trouvé sur le site d'arduino ici normalement

    Krispies
    Admin

    Messages : 3783
    Date d'inscription : 16/08/2009
    Age : 49
    Localisation : VERS-Pont du gard

    Re: Boitier avec plusieurs mode de jeu

    Message par Krispies le Ven 7 Oct - 7:54

    Merci, en fait mon arduino n'est pas un R3 du coup j'ai pas les deux pins SLC et SDA. Je vais passer sur un R3. Wink


    _________________

    http://airsoft-krisp.e-monsite.com/
    http://www.facebook.com/pages/Krispies-Team/470577369635210

    Contenu sponsorisé

    Re: Boitier avec plusieurs mode de jeu

    Message par Contenu sponsorisé Aujourd'hui à 22:15


      La date/heure actuelle est Ven 9 Déc - 22:15