Airsoft Krispies

Bonjour à tous et bienvenue


    Ciblerie électronique multijoueur

    Partagez
    avatar
    Bidou914
    vis rouillée
    vis rouillée

    Messages : 39
    Date d'inscription : 12/06/2015
    Age : 28
    Localisation : Essonne

    Ciblerie électronique multijoueur

    Message par Bidou914 le Lun 27 Juin - 0:10

    Après avoir longuement lu le tuto de Krispies et Naudnaud dans tous les sens (un très grand merci à eux d'ailleurs) je me suis inspiré de leur travail pour vous proposer ici ma version de la ciblerie avec des modes multijoueurs.

    Je ne vous remets de schéma de cablage car dans il est le même que celui du tuto dans les grandes lignes. Donc s'il y a besoin d'aide, lisez bien le code (qui se trouve un peu plus bas) et aller voir leur travail au passage sans quoi ce sujet ne serait pas possible. (ma version est sans fil mais peut également être filaire).

    Dans cette version, je vous propose différents modes :

    - Réaction 1J : jeu à 1J où il faut éteindre le plus vite possible chaque cible qui s'allume (un temps mort aléatoire entre chaque cible).
    - Vitesse 1J : jeu à 1J où il faut éteindre le plus vite possible un nombre de cible défini (pas de temps mort entre chaque cible qui s'enchaîne).
    - Réaction 2J : jeu à 2J où il faut être le premier à toucher la cible de sa couleur pour marquer un point.
    - Réaction 3J : jeu à 3J où il faut être le premier à toucher la cible de sa couleur pour marquer un point (malheureusement non fonctionnel pour le moment...).
    - Réflexe : jeu à 1J où il faut éteindre le plus vite possible les cibles vertes uniquement (sinon -5 mais pour le moment bug sur l'affichage des cibles rouges). Un rebours aléatoire, un affichage aléatoire d'une cible verte ou rouge, +3 pour 1s, +2 pour 2s et +1 pour 3s.
    - Test des cibles : Affichage sur l'écran du numéro de la cible touchée

    Après cette brève présentation, voici quelques aperçus cliquables (désolé de la qualité des photos prisent avec le téléphone surtout les plus sombres pour montrer ce qui est affiché à l'écran) :

    Vue d'ensemble des deux boîtiers (une nouvelle fois un très grand merci à Krispies pour m'avoir fait connaître le water transfer !!! enfin il faut encore que je m'améliore)


    Cible très sommaire (un carré de plexy de 30cm de côté de 5mm d'épaisseur, le piezo scotché, la bande led scotché et deux trous pour passer un fil de fer permettant de l'accrocher aux arbres, grillage...5mm est un minimum celle de 4mm a des impact très marqués et va certainement devoir être changé bientôt)


    Le menu sur deux pages :




    Mode sélectionné :


    Choix du nombre de cible à toucher :


    Confirmation du nombre de cible avant de démarrer :


    En pleine partie :


    Je vous mets ensuite un bref aperçu en vidéo du fonctionnement du boitier maître :


    Et un bref aperçu du mode réaction 2J en forêt, les cibles sont placées à 15-20m :


    Le code du boîtier maître 1ère partie :
    Code:
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <avr/wdt.h>
    #include <EEPROM.h>

    unsigned char received; // reception RF/PC
    unsigned char poubelle; // réception rebond RF/PC
    unsigned char counterseconde = 0; // compteur aléatoire de compte à rebours
    unsigned char score_vert = 0; // compteur score du joueur vert
    unsigned char score_rouge = 0; // compteur score du joueur rouge
    unsigned char score_jaune = 0; // compteur score du joueur jaune
    unsigned char compteur_menu = 1; // compteur du curseur du menu
    unsigned char compteur_page = 1; // compteur des pages du menu
    unsigned char nombre_cible_touche = 0; // variable pour le nombre de cible touchées
    unsigned char nombre_cible_obj = 0; // variable pour le nombre de cible à toucher
    unsigned char nombre_touche_vert = 0;
    unsigned char nombre_touche_rouge = 0;
    unsigned char nombre_touche_jaune = 0;
    unsigned char cible = 0; // variable de la cible à toucher
    int interval = 100; // intervalle 1/10e de sec
    unsigned char tempo = 0; // compteur d'affichage de la cible à tirer
    unsigned char erreurs = 0;
    unsigned char cible_manquees = 0;
    unsigned char couleur = 0;
    unsigned char score = 0;
    unsigned char deftempo = 0;
    unsigned char cible_verte = 0;
    unsigned char cible_rouge = 0;
    unsigned char cible_jaune = 0;

    unsigned long decisec = 0;
    unsigned long seconde = 0;
    unsigned long minute = 0;
    unsigned long currentMillis;
    unsigned long tempsdepart;
    unsigned long tempsfinal;

    long chronoMillis = 0;

    const int buzzer = 2; // buzzer sur pin 2
    const int bp_haut = 3; // bp haut sur pin 3
    const int bp_bas = 4; // bp bas sur pin 4
    const int bp_ok = 5; // bp ok sur pin 5
    const int bp_retour = 6; // bp retour sur pin 6

    boolean etat_cible = 0; // état d'impact sur la cible
    boolean last_etat_cible = 0; // dernier état d'impact sur la cible
    boolean etat_bp_haut; // etat de l'appui de bp haut
    boolean etat_bp_bas; // etat de l'appui de bp bas
    boolean etat_bp_ok; // etat de l'appui de bp ok
    boolean etat_bp_retour; // etat de l'appui de bp retour
    boolean suivant;

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

    void setup()
    {
     Serial.begin(9600);
     pinMode(bp_ok, INPUT); // définition de bp ok comme entrée
     pinMode(bp_bas, INPUT); // définition de bp bas comme entrée
     pinMode(bp_haut, INPUT); // définition de bp haut comme entrée
     pinMode(bp_retour, INPUT); // définition de bp retour comme entrée
     digitalWrite(bp_ok, HIGH); // mise a l'état haut de bp ok
     digitalWrite(bp_bas, HIGH); // mise a l'état haut de bp bas
     digitalWrite(bp_haut, HIGH); // mise a l'état haut de bp haut
     digitalWrite(bp_retour, HIGH); // mise a l'état haut de bp retour
     randomSeed(analogRead(0));
     lcd.init(); // démaragge de l'écran
     lcd.backlight(); // rétroéclairage de l'écran
     lcd.setCursor(0,0);
     lcd.print("LCD OK!");
     delay(1000);
    } // fin void setup

    void loop()
    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Ciblerie electronik!");
     lcd.setCursor(1,1);
     lcd.print("Pour la team 1911");
     lcd.setCursor(5,2);
     lcd.print("Par Pierro");
     lcd.setCursor(1,3);
     lcd.print("Appuyer pour jouer");

     while (1)
     {
     etat_bp_ok = digitalRead(bp_ok);
     etat_bp_bas = digitalRead(bp_bas);
     etat_bp_haut = digitalRead(bp_haut);
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
     } // fin while
    } // fin void loop

    void menu_principal() // menu de choix du jeu
    {
     lcd.clear();
     compteur_menu = 1;
     compteur_page = 1;
     delay(250);
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     etat_bp_bas = digitalRead(bp_bas);
     etat_bp_haut = digitalRead(bp_haut);
     etat_bp_ok = digitalRead(bp_ok);
     if (etat_bp_bas == LOW) // si appui sur bp bas
     {
     compteur_menu++; // on incrémente le compteur menu
     tone(buzzer,500,150);
     if (compteur_menu > 3 ) // si conmpteur menu > 3
     {
     compteur_menu = 1; // alors compteur menu = 1
     compteur_page++; // et on incrémente compteur page
     if (compteur_page > 2){compteur_page = 1;} // si compteur page > 2 alors = 1
     } // fin if compteur menu
     delay(100);
     lcd.clear();
     } // fin if bp bas
     if (etat_bp_haut == LOW) // si appui su bp haut
     {
     compteur_menu--; // on décrémente compteur menu
     tone(buzzer,500,150);
     if (compteur_menu < 1) // si compteur menu < 1
     {
     compteur_menu = 3; // alors compteur menu = 3
     compteur_page--; // et on décrémente compteur page
     if (compteur_page < 1){compteur_page = 2;} // si compteur page < 1 alors = 2
     } // fin if compteur menu
     delay(100);
     lcd.clear();
     } // fin if bp haut
     if (etat_bp_retour == LOW) // si appui sur bp retour
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     loop(); // retour a void loop
     } // fin if bp retour
     if (compteur_page == 1) // si compteur page = 1 alors affichage de la page 1
     {
     lcd.setCursor(0,0);
     lcd.print("Choisir mode de jeu:");
     lcd.setCursor(0,compteur_menu); // affichage du compteur menu
     lcd.print(">");
     lcd.setCursor(1,1);
     lcd.print("Reaction 1J");
     lcd.setCursor(1,2);
     lcd.print("Vitesse 1J");
     lcd.setCursor(1,3);
     lcd.print("Reaction 2J");
     if (etat_bp_ok == LOW && compteur_menu == 1){delay(250);tone(buzzer,500,150);reaction_1j();} // si choix reaction 1J
     if (etat_bp_ok == LOW && compteur_menu == 2){delay(250);tone(buzzer,500,150);vitesse_1j();} // si choix vitesse 1J
     if (etat_bp_ok == LOW && compteur_menu == 3){delay(250);tone(buzzer,500,150);reaction_2j();} // si choiv reaction 2J
     } // fin if page 1
     if (compteur_page == 2) // si compteur page = 2 alos affichage de la page 2
     {
     lcd.setCursor(0,0);
     lcd.print("Choisir mode de jeu:");
     lcd.setCursor(0,compteur_menu); // affichage du compteur menu
     lcd.print(">");
     lcd.setCursor(1,1);
     lcd.print("Reaction 3J");
     lcd.setCursor(1,2);
     lcd.print("Reflexe");
     lcd.setCursor(1,3);
     lcd.print("Test des cibles");
     if (etat_bp_ok == LOW && compteur_menu == 1){delay(250);tone(buzzer,500,150);reaction_3j();} // si choix vitesse 2J
     if (etat_bp_ok == LOW && compteur_menu == 2){delay(250);tone(buzzer,500,150);reflexe();} // si choix reflexe
     if (etat_bp_ok == LOW && compteur_menu == 3){delay(250);tone(buzzer,500,150);test_cible();} // si choix test des cibles
     } // fin if page 2
     } // fin if while
    } // fin void menu principal

    void reaction_1j() // jeu à 1J où il faut éteindre le plus vite possible chaque cible qui s'allume
    {
     lcd.clear();
     counterseconde = 0;
     seconde = 0;
     minute = 0;
     decisec = 0;
     nombre_cible_touche = 0;
     nombre_cible_obj = 0;
     cible = 0;
     lcd.setCursor(2,0);
     lcd.print("Mode reaction 1J");
     while(1)
     {
     etat_bp_ok = digitalRead(bp_ok);
     etat_bp_bas = digitalRead(bp_bas);
     etat_bp_haut = digitalRead(bp_haut);
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
     if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
     }
     nombre_cible();
     Serial.println('S');

     counter:
     lcd.clear();
     if (nombre_cible_touche == nombre_cible_obj){Serial.println('Z');fin_reaction_1j();}
     counterseconde = random(2,6);
     while (1)
     {
     lcd.setCursor(1,0);
     lcd.print("Prochain tir dans ");
     lcd.print(counterseconde);
     delay(1000);
     counterseconde--;
     if (counterseconde > 0){tone(buzzer,300,150);}
     if (counterseconde == 0){lcd.clear();tone(buzzer,900,150);goto randomcible;}
     }

     randomcible:
     cible = random(1,7);
     Serial.println(cible);
     goto jeu;

     jeu:
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible ");
     lcd.print(cible);
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     } // fin if appui sur bp retour
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     } // fin if chrono
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (cible == 1)
     {
     if (received == '1')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto counter;
     } // fin if touche sur cible 1
     last_etat_cible = etat_cible;
     } // fin if touche sur un cible
     } // fin if cible 1
     if (cible == 2)
     {
     if (received == '2')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto counter;
     } // fin if touche sur cible 2
     last_etat_cible = etat_cible;
     } // fin if touche sur un cible
     } // fin if cible 2
     if (cible == 3)
     {
     if (received == '3')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto counter;
     } // fin if touche sur cible 3
     last_etat_cible = etat_cible;
     } // fin if touche sur un cible
     } // fin if cible 3
     if (cible == 4)
     {
     if (received == '4')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto counter;
     } // fin if touche sur cible 4
     last_etat_cible = etat_cible;
     } // fin if touche sur un cible
     } // fin if cible 4
     if (cible == 5)
     {
     if (received == '5')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto counter;
     } // fin if touche sur cible 5
     last_etat_cible = etat_cible;
     } // fin if touche sur un cible
     } // fin if cible 5
     if (cible == 6)
     {
     if (received == '6')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto counter;
     } // fin if touche sur cible 6
     last_etat_cible = etat_cible;
     } // fin if touche sur un cible
     } // fin if cible 6
     } // fin boucle de la cible
     } // fin boucle jeu
    } // fin void reaction 1J

    void vitesse_1j() // jeu à 1J où il faut éteindre le plus vite possible un nombre de cible défini
    {
     lcd.clear();
     nombre_cible_obj = 0;
     nombre_cible_touche = 0;
     decisec = 0;
     seconde = 0;
     minute = 0;
     cible = 0;
     erreurs = 0;
     cible_manquees = 0;
     tempo = 0;
     deftempo = 0;
     lcd.setCursor(2,0);
     lcd.print("Mode vitesse 1J");
     while (1)
     {
     etat_bp_ok = digitalRead(bp_ok);
     etat_bp_bas = digitalRead(bp_bas);
     etat_bp_haut = digitalRead(bp_haut);
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
     if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
     }
     nombre_cible();
     def_temps_tempo();
     startgamecount();
     Serial.println('S');

     reset10:
     if (nombre_cible_touche == nombre_cible_obj)
     {
     Serial.println('Z');
     fin_vitesse_1j();
     } // fin if nombre de cible à toucher atteint
     tempo = 0;
     cible = random(1,7);
     Serial.println(cible);
     if (cible == 1)
     {
     reset1:
     if (Serial.available() > 0){poubelle = Serial.read();}
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible 1");
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     } // fin if appui sur bp retour
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     tempo++;
     if (tempo == deftempo)
     {
     cible_manquees++;
     Serial.println('Y');
     goto reset10;
     }
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     } // fin if chrono
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (received == cible)
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     lcd.setCursor(0,3);
     lcd.print("Cible");
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto reset10;
     } // fin if touche sur cible 1
     last_etat_cible = etat_cible;
     }
     if (received == '2'||'3'||'4'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     seconde = seconde + 5;
     lcd.setCursor(0,3);
     lcd.print("POC! mauvaise cible");
     erreurs++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,300,150);
     delay(250);
     goto reset1;
     } // fin if touche sur 2 3 4 5 ou 6
     last_etat_cible = etat_cible;
     }
     } // fin if touche sur une cible
     } // fin boucle de la cible 1
     } // fin if cible 1
     if (cible == 2)
     {
     reset2:
     if (Serial.available() > 0){poubelle = Serial.read();}
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible 2");
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     }
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     tempo++;
     if (tempo == deftempo)
     {
     cible_manquees++;
     Serial.println('Y');
     goto reset10;
     }
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     }
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (received == '2')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     lcd.setCursor(0,3);
     lcd.print("POC! cible 2");
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto reset10;
     } // fin if touche sur la cible 2
     last_etat_cible = etat_cible;
     }
     if (received == '1'||'3'||'4'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     seconde = seconde + 5;
     lcd.setCursor(0,3);
     lcd.print("POC! mauvaise cible");
     erreurs++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,300,150);
     delay(250);
     goto reset2;
     } // fin if touche sur la cible 1 3 4 5 ou 6
     last_etat_cible = etat_cible;
     }
     } // fin if touche sur une cible
     } // fin boucle de la cible 2
     } // fin if cible 2
     if (cible == 3)
     {
     reset3:
     if (Serial.available() > 0){poubelle = Serial.read();}
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible 3");
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     }
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     tempo++;
     if (tempo == deftempo)
     {
     cible_manquees++;
     Serial.println('Y');
     goto reset10;
     }
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     }
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (received == '3')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     lcd.setCursor(0,3);
     lcd.print("POC! cible 3");
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto reset10;
     } // fin if touche sur la cible 3
     last_etat_cible = etat_cible;
     }
     if (received == '1'||'2'||'4'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     seconde = seconde + 5;
     lcd.setCursor(0,3);
     lcd.print("POC! mauvaise cible");
     erreurs++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,300,150);
     delay(250);
     goto reset3;
     } // fin if touche sur la cible 1 2 4 5 ou 6
     last_etat_cible = etat_cible;
     }
     } // fin if touche sur une cible
     } // fin boucle de la cible 3
     } // fin if cible 3
     if (cible == 4)
     {
     reset4:
     if (Serial.available() > 0){poubelle = Serial.read();}
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible 4");
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     }
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     tempo++;
     if (tempo == deftempo)
     {
     cible_manquees++;
     Serial.println('Y');
     goto reset10;
     }
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     }
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (received == '4')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     lcd.setCursor(0,3);
     lcd.print("POC! cible 4");
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto reset10;
     } // fin if touche sur la cible 4
     last_etat_cible = etat_cible;
     }
     if (received == '1'||'2'||'3'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     seconde = seconde + 5;
     lcd.setCursor(0,3);
     lcd.print("POC! mauvaise cible");
     erreurs++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,300,150);
     delay(250);
     goto reset4;
     } // fin if touche sur la cible 1 2 3 5 ou 6
     last_etat_cible = etat_cible;
     }
     } // fin if touche sur une cible
     } // fin boucle de la cible 4
     } // fin if cible 4
     if (cible == 5)
     {
     reset5:
     if (Serial.available() > 0){poubelle = Serial.read();}
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible 5");
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     }
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     tempo++;
     if (tempo == deftempo)
     {
     cible_manquees++;
     Serial.println('Y');
     goto reset10;
     }
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     }
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (received == '5')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     lcd.setCursor(0,3);
     lcd.print("POC! cible 5");
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto reset10;
     } // fin if touche sur la cible 5
     last_etat_cible = etat_cible;
     }
     if (received == '1'||'2'||'3'||'4'||'6') // si ce n'est pas la cible 1 qui est touchée
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     seconde = seconde + 5;
     lcd.setCursor(0,3);
     lcd.print("POC! mauvaise cible");
     erreurs++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,300,150);
     delay(250);
     goto reset5;
     } // fin if touche sur la cible 1 2 3 4 ou 6
     last_etat_cible = etat_cible;
     }
     } // fin if touche sur une cible
     } // fin boucle de la cible 5
     } // fin if cible 5
     if (cible == 6)
     {
     reset6:
     if (Serial.available() > 0){poubelle = Serial.read();}
     lcd.clear();
     lcd.setCursor(0,2);
     lcd.print("Tirer sur la cible 6");
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     tone(buzzer,500,150);
     Serial.println('Z');
     menu_principal();
     }
     currentMillis = millis();
     if (currentMillis - chronoMillis >= interval)
     {
     chronoMillis = currentMillis;
     decisec++;
     if (decisec > 9)
     {
     decisec = 0;
     seconde++;
     tempo++;
     if (tempo == deftempo)
     {
     cible_manquees++;
     Serial.println('Y');
     goto reset10;
     }
     }
     if (seconde > 59)
     {
     seconde = 0;
     minute++;
     }
     }
     lcd.setCursor(0,0);
     lcd.print("Temps : ");
     if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
     if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
     lcd.print(":");
     if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
     if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
     lcd.print(":");
     lcd.print(decisec);
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (received == '6')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_cible_touche ++;
     lcd.setCursor(0,3);
     lcd.print("POC! cible 6");
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,700,150);
     delay(250);
     goto reset10;
     } // fin if touche sur la cible 6
     last_etat_cible = etat_cible;
     }
     if (received == '1'||'2'||'3'||'4'||'5') // si ce n'est pas la cible 1 qui est touchée
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     seconde = seconde + 5;
     lcd.setCursor(0,3);
     lcd.print("POC! mauvaise cible");
     erreurs++;
     if (Serial.available() > 0){poubelle = Serial.read();}
     tone(buzzer,300,150);
     delay(250);
     goto reset6;
     } // fin if touche sur la cible 1 2 3 4 ou 5
     last_etat_cible = etat_cible;
     }
     } // fin if touche sur une cible
     } // fin boucle de la cible 6
     } // fin if cible 6
    } // fin void vitesse 1J

    void reaction_2j() // jeu à 2J où il faut être le premier à éteindre sa cible pour marquer un point
    {
     lcd.clear();
     score_rouge = 0;
     score_vert = 0;
     cible_verte = 0;
     cible_rouge = 0;
     counterseconde = 0;
     nombre_touche_vert = 0;
     nombre_touche_rouge = 0;
     nombre_cible_obj = 0;
     lcd.setCursor(2,0);
     lcd.print("Mode reaction 2J");
     while (1)
     {
     etat_bp_ok = digitalRead(bp_ok);
     etat_bp_bas = digitalRead(bp_bas);
     etat_bp_haut = digitalRead(bp_haut);
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
     if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
     } // fin boucle d'attente d'appui sur un bouton
     nombre_cible();
     Serial.println('S');
     
     reset10:
     lcd.clear();
     if (nombre_touche_vert == nombre_cible_obj || nombre_touche_rouge == nombre_cible_obj){Serial.println('Z');fin_reaction_2j();}
     cible_verte = random(1,7);
     cible_rouge = random(1,7);
     if (cible_verte == cible_rouge){goto reset10;}
     goto counter;

     counter:
     counterseconde = random(2,6);
     while (1)
     {
     lcd.setCursor(0,0);
     lcd.print("Prochain tir dans ");
     lcd.print(counterseconde);
     lcd.setCursor(0,1);
     lcd.print("Joueur vert = ");
     lcd.print(score_vert);
     lcd.setCursor(0,2);
     lcd.print("Joueur rouge = ");
     lcd.print(score_rouge);
     delay(1000);
     counterseconde--;
     if (counterseconde > 0){tone(buzzer,300,150);}
     if (counterseconde == 0){lcd.clear();tone(buzzer,900,150);goto jeu;}
     }

     jeu:
     if (cible_rouge == 1){Serial.println('a');}
     if (cible_rouge == 2){Serial.println('b');}
     if (cible_rouge == 3){Serial.println('c');}
     if (cible_rouge == 4){Serial.println('d');}
     if (cible_rouge == 5){Serial.println('e');}
     if (cible_rouge == 6){Serial.println('f');}
     lcd.clear();
     lcd.setCursor(6,0);
     lcd.print("TIREZ !!");
     lcd.setCursor(0,1);
     lcd.print("Joueur vert = ");
     lcd.print(score_vert);
     lcd.setCursor(0,2);
     lcd.print("Joueur rouge = ");
     lcd.print(score_rouge);
     Serial.println(cible_verte);
     while (1)
     {
     etat_bp_retour = digitalRead(bp_retour);
     if (etat_bp_retour == LOW)
     {
     delay(250);
     lcd.clear();
     menu_principal();
     }
     if (Serial.available() > 0)
     {
     received = Serial.read();
     if (cible_verte == 1)
     {
     if (received == '1')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_vert++;
     score_vert++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur vert");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible verte 1
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible verte 1
     if (cible_verte == 2)
     {
     if (received == '2')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_vert++;
     score_vert++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur vert");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible verte 2
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible verte 2
     if (cible_verte == 3)
     {
     if (received == '3')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_vert++;
     score_vert++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur vert");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible verte 3
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible verte 3
     if (cible_verte == 4)
     {
     if (received == '4')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_vert++;
     score_vert++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur vert");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible verte 4
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible verte 4
     if (cible_verte == 5)
     {
     if (received == '5')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_vert++;
     score_vert++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur vert");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible verte 5
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible verte 5
     if (cible_verte == 6)
     {
     if (received == '6')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_vert++;
     score_vert++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur vert");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('m');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible verte 6
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible verte 6

     if (cible_rouge == 1)
     {
     if (received == '1')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_rouge++;
     score_rouge++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur rouge");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible rouge 1
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible rouge 1
     if (cible_rouge == 2)
     {
     if (received == '2')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_rouge++;
     score_rouge++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur rouge");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible rouge 2
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible rouge 2
     if (cible_rouge == 3)
     {
     if (received == '3')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_rouge++;
     score_rouge++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur rouge");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible rouge 3
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible rouge 3
     if (cible_rouge == 4)
     {
     if (received == '4')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_rouge++;
     score_rouge++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur rouge");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible rouge 4
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible rouge 4
     if (cible_rouge == 5)
     {
     if (received == '5')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_rouge++;
     score_rouge++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur rouge");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible rouge 5
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible rouge 5
     if (cible_rouge == 6)
     {
     if (received == '6')
     {etat_cible = 1;}else{etat_cible = 0;}
     if (etat_cible != last_etat_cible)
     {
     if (etat_cible == 1)
     {
     nombre_touche_rouge++;
     score_rouge++;
     lcd.setCursor(1,3);
     lcd.print("Touche joueur rouge");
     tone(buzzer,700,150);
     Serial.println('Y');
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     delay(250);
     Serial.println('n');
     delay(250);
     Serial.println('Y');
     if (Serial.available() > 0){poubelle = Serial.read();}
     delay(250);
     goto reset10;
     } // fin if touche sur cible rouge 6
     last_etat_cible = etat_cible;
     } // fin if touche sur une cible
     } // fin if cible rouge 6
     } // fin if touche sur cible*/
     } // fin boucle jeu
    } // fin void reaction 2J


    Dernière édition par Bidou914 le Lun 27 Juin - 0:16, édité 2 fois
    avatar
    Bidou914
    vis rouillée
    vis rouillée

    Messages : 39
    Date d'inscription : 12/06/2015
    Age : 28
    Localisation : Essonne

    Re: Ciblerie électronique multijoueur

    Message par Bidou914 le Lun 27 Juin - 0:12

    Code boitier maître 2ème partie :
    Code:
    void reaction_3j() // jeu à 2J où il faut éteindre le plus vite possible un nombre de cible défini
    {
       lcd.clear();
       score_rouge = 0;
       score_vert = 0;
       cible_verte = 0;
       cible_rouge = 0;
       counterseconde = 0;
       nombre_touche_vert = 0;
       nombre_touche_rouge = 0;
       nombre_cible_obj = 0;
       lcd.setCursor(2,0);
       lcd.print("Mode reaction 3J");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(250);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(250);lcd.clear();tone(buzzer,500,150);break;}
       } // fin boucle d'attente d'appui sur un bouton
       nombre_cible();
       Serial.println('S');
       
       reset10:
       lcd.clear();
       if (nombre_touche_vert == nombre_cible_obj || nombre_touche_rouge == nombre_cible_obj){Serial.println('Z');fin_reaction_2j();}
       cible_verte = random(1,7);
       cible_rouge = random(1,7);
       cible_verte = random(1,7);
       if (cible_verte == cible_rouge || cible_verte == cible_jaune || cible_rouge == cible_jaune){goto reset10;}
       goto counter;

       counter:
       counterseconde = random(2,6);
       while (1)
       {
          lcd.setCursor(0,0);
          lcd.print("Prochain tir dans ");
          lcd.print(counterseconde);
          lcd.setCursor(0,1);
          lcd.print("Joueur vert = ");
          lcd.print(score_vert);
          lcd.setCursor(0,2);
          lcd.print("Joueur rouge = ");
          lcd.print(score_rouge);
          lcd.setCursor(0,3);
          lcd.print("Joueur jaune = ");
          lcd.print(score_jaune);
          delay(1000);
          counterseconde--;
          if (counterseconde > 0){tone(buzzer,300,150);}
          if (counterseconde == 0){lcd.clear();tone(buzzer,900,150);goto jeu;}
       }

       jeu:
       if (cible_rouge == 1){Serial.println('a');}
       if (cible_rouge == 2){Serial.println('b');}
       if (cible_rouge == 3){Serial.println('c');}
       if (cible_rouge == 4){Serial.println('d');}
       if (cible_rouge == 5){Serial.println('e');}
       if (cible_rouge == 6){Serial.println('f');}
       if (cible_jaune == 1){Serial.println('g');}
       if (cible_jaune == 2){Serial.println('h');}
       if (cible_jaune == 3){Serial.println('i');}
       if (cible_jaune == 4){Serial.println('j');}
       if (cible_jaune == 5){Serial.println('k');}
       if (cible_jaune == 6){Serial.println('l');}
       lcd.clear();
       lcd.setCursor(6,0);
       lcd.print("TIREZ !!");
       lcd.setCursor(0,1);
       lcd.print("Joueur vert = ");
       lcd.print(score_vert);
       lcd.setCursor(0,2);
       lcd.print("Joueur rouge = ");
       lcd.print(score_rouge);
       lcd.setCursor(0,3);
       lcd.print("Joueur jaune = ");
       lcd.print(score_jaune);
       Serial.println(cible_verte);
       while (1)
       {
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW)
          {
             delay(250);
             lcd.clear();
             menu_principal();
          }
          if (Serial.available() > 0)
          {
             received = Serial.read();
             if (cible_verte == 1)
             {
                if (received == '1')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_vert++;
                      score_vert++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur vert");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible verte 1
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible verte 1
             if (cible_verte == 2)
             {
                if (received == '2')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_vert++;
                      score_vert++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur vert");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible verte 2
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible verte 2
             if (cible_verte == 3)
             {
                if (received == '3')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_vert++;
                      score_vert++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur vert");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible verte 3
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible verte 3
             if (cible_verte == 4)
             {
                if (received == '4')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_vert++;
                      score_vert++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur vert");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible verte 4
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible verte 4
             if (cible_verte == 5)
             {
                if (received == '5')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_vert++;
                      score_vert++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur vert");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible verte 5
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible verte 5
             if (cible_verte == 6)
             {
                if (received == '6')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_vert++;
                      score_vert++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur vert");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('m');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible verte 6
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible verte 6

             if (cible_rouge == 1)
             {
                if (received == '1')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_rouge++;
                      score_rouge++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur rouge");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible rouge 1
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible rouge 1
             if (cible_rouge == 2)
             {
                if (received == '2')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_rouge++;
                      score_rouge++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur rouge");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible rouge 2
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible rouge 2
             if (cible_rouge == 3)
             {
                if (received == '3')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_rouge++;
                      score_rouge++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur rouge");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible rouge 3
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible rouge 3
             if (cible_rouge == 4)
             {
                if (received == '4')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_rouge++;
                      score_rouge++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur rouge");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible rouge 4
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible rouge 4
             if (cible_rouge == 5)
             {
                if (received == '5')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_rouge++;
                      score_rouge++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur rouge");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible rouge 5
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible rouge 5
             if (cible_rouge == 6)
             {
                if (received == '6')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_rouge++;
                      score_rouge++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur rouge");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('n');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible rouge 6
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible rouge 6

             if (cible_jaune == 1)
             {
                if (received == '1')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_jaune++;
                      score_jaune++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur jaune");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible jaune 1
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible jaune 1
             if (cible_jaune == 2)
             {
                if (received == '2')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_jaune++;
                      score_jaune++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur jaune");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible jaune 2
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible jaune 2
             if (cible_jaune == 3)
             {
                if (received == '3')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_jaune++;
                      score_jaune++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur jaune");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible jaune 3
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible jaune 3
             if (cible_jaune == 4)
             {
                if (received == '4')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_jaune++;
                      score_jaune++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur jaune");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible jaune 4
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible jaune 4
             if (cible_jaune == 5)
             {
                if (received == '5')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_jaune++;
                      score_jaune++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur jaune");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible jaune 5
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible jaune 5
             if (cible_jaune == 6)
             {
                if (received == '6')
                {etat_cible = 1;}else{etat_cible = 0;}
                if (etat_cible != last_etat_cible)
                {
                   if (etat_cible == 1)
                   {
                      nombre_touche_jaune++;
                      score_jaune++;
                      lcd.setCursor(1,3);
                      lcd.print("Touche joueur jaune");
                      tone(buzzer,700,150);
                      Serial.println('Y');
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      delay(250);
                      Serial.println('o');
                      delay(250);
                      Serial.println('Y');
                      if (Serial.available() > 0){poubelle = Serial.read();}
                      delay(250);
                      goto reset10;
                   } // fin if touche sur cible jaune 6
                   last_etat_cible = etat_cible;
                } // fin if touche sur une cible
             } // fin if cible jaune 6
          } // fin if touche sur cible*/
       } // fin boucle jeu   
    } // fin void reaction 2J

    void reflexe() // jeu à 1J où il faut éteindre le plus vite possible les cibles vertes uniquement (sinon -5)
    // un rebours aléatoire, un affichage aléatoire d'une cible verte ou rouge, +3 pour 1s, +2 pour 2s et +1 pour 3s
    {
       lcd.clear();
       couleur = 0;
       score = 0;
       erreurs = 0;
       tempo = 0;
       nombre_cible_touche = 0;
       nombre_cible_obj = 0;
       counterseconde = 0;
       lcd.setCursor(4,0);
       lcd.print("Mode reflexe");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
       }
       nombre_cible();
       Serial.println('S');

       counter:
       lcd.clear();
       if (nombre_cible_touche == nombre_cible_obj){Serial.println('Z');fin_reflexe();}
       tempo = 0;
       counterseconde = random(1,4);
       while (1)
       {
          lcd.setCursor(1,0);
          lcd.print("Prochain tir dans ");
          lcd.print(counterseconde);
          delay(1000);
          counterseconde--;
          if (counterseconde > 0){tone(buzzer,300,150);}
          if (counterseconde == 0){lcd.clear();tone(buzzer,900,150);goto randomcolor;}
       } // fin boucle compte à rebours avant tir

       randomcolor:
       couleur = random(1,3);
       goto randomcible;

       randomcible:
       cible = random(1,7);
       if (couleur == 1) // si la couleur est verte
       {
          if (cible == 1){Serial.println('1');}
          if (cible == 2){Serial.println('2');}
          if (cible == 3){Serial.println('3');}
          if (cible == 4){Serial.println('4');}
          if (cible == 5){Serial.println('5');}
          if (cible == 6){Serial.println('6');}
       }
       if (couleur == 2) // si la couleur est rouge
       {
          if (cible == 1){Serial.println('a');}
          if (cible == 2){Serial.println('b');}
          if (cible == 3){Serial.println('c');}
          if (cible == 4){Serial.println('d');}
          if (cible == 5){Serial.println('e');}
          if (cible == 6){Serial.println('f');}
       }
       goto jeu;

       jeu:
       if (couleur == 1)
       {
          if (cible == 1)
          {
             lcd.clear();
             lcd.setCursor(0,2);
             lcd.print("Tirer sur la cible 1");
             while(1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000){tempo++;}
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '1')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         nombre_cible_touche ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,700,150);
                         if (tempo < 3){score = score + 3;}
                         else if (tempo < 5){score = score + 2;}
                         else if (tempo >= 5){score++;}
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 1
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle cible 1
          } // fin if cible 1
          if (cible == 2)
          {
             lcd.clear();
             lcd.setCursor(0,2);
             lcd.print("Tirer sur la cible 2");
             while(1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000){tempo++;}
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '2')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         nombre_cible_touche ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,700,150);
                         if (tempo < 3){score = score + 3;}
                         else if (tempo < 5){score = score + 2;}
                         else if (tempo >= 5){score++;}
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 2
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle cible 2
          } // fin if cible 2
          if (cible == 3)
          {
             lcd.clear();
             lcd.setCursor(0,2);
             lcd.print("Tirer sur la cible 3");
             while(1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000){tempo++;}
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '3')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         nombre_cible_touche ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,700,150);
                         if (tempo < 3){score = score + 3;}
                         else if (tempo < 5){score = score + 2;}
                         else if (tempo >= 5){score++;}
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 3
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle cible 3
          } // fin if cible 3
          if (cible == 4)
          {
             lcd.clear();
             lcd.setCursor(0,2);
             lcd.print("Tirer sur la cible 4");
             while(1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000){tempo++;}
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '4')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         nombre_cible_touche ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,700,150);
                         if (tempo < 3){score = score + 3;}
                         else if (tempo < 5){score = score + 2;}
                         else if (tempo >= 5){score++;}
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 4
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle cible 4
          } // fin if cible 4
          if (cible == 5)
          {
             lcd.clear();
             lcd.setCursor(0,2);
             lcd.print("Tirer sur la cible 5");
             while(1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000){tempo++;}
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '5')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         nombre_cible_touche ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,700,150);
                         if (tempo < 3){score = score + 3;}
                         else if (tempo < 5){score = score + 2;}
                         else if (tempo >= 5){score++;}
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 5
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle cible 5
          } // fin if cible 5
          if (cible == 6)
          {
             lcd.clear();
             lcd.setCursor(0,2);
             lcd.print("Tirer sur la cible 6");
             while(1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000){tempo++;}
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '6')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         nombre_cible_touche ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,700,150);
                         if (tempo < 3){score = score + 3;}
                         else if (tempo < 5){score = score + 2;}
                         else if (tempo >= 5){score++;}
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 6
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle cible 6
          } // fin if cible 6
       } // fin if couleur 1 verte
       if (couleur == 2)
       {
          if (cible == 1)
          {
             lcd.clear();
             lcd.setCursor(0,7);
             lcd.print("Ne pas tirer !");
             while (1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000)
                {
                   tempo++;
                   if (tempo == 2)
                   {
                      Serial.println("Y");
                      goto counter;
                   } // fin if pas de tir sur cible rouge
                } // fin if 1s de passée
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '1')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         erreurs ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,300,150);
                         score = score -5;
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 1
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle de la cible 1
          } // fin if cible 1
          if (cible == 2)
          {
             lcd.clear();
             lcd.setCursor(0,7);
             lcd.print("Ne pas tirer !");
             while (1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000)
                {
                   tempo++;
                   if (tempo == 2)
                   {
                      Serial.println("Y");
                      goto counter;
                   } // fin if pas de tir sur cible rouge
                } // fin if 1s de passée
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '2')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         erreurs ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,300,150);
                         score = score -5;
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 2
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle de la cible 2
          } // fin if cible 2
          if (cible == 3)
          {
             lcd.clear();
             lcd.setCursor(0,7);
             lcd.print("Ne pas tirer !");
             while (1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000)
                {
                   tempo++;
                   if (tempo == 2)
                   {
                      Serial.println("Y");
                      goto counter;
                   } // fin if pas de tir sur cible rouge
                } // fin if 1s de passée
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '3')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         erreurs ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,300,150);
                         score = score -5;
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 3
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle de la cible 3
          } // fin if cible 3
          if (cible == 4)
          {
             lcd.clear();
             lcd.setCursor(0,7);
             lcd.print("Ne pas tirer !");
             while (1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000)
                {
                   tempo++;
                   if (tempo == 2)
                   {
                      Serial.println("Y");
                      goto counter;
                   } // fin if pas de tir sur cible rouge
                } // fin if 1s de passée
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '4')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         erreurs ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,300,150);
                         score = score -5;
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 4
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle de la cible 4
          } // fin if cible 4
          if (cible == 5)
          {
             lcd.clear();
             lcd.setCursor(0,7);
             lcd.print("Ne pas tirer !");
             while (1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000)
                {
                   tempo++;
                   if (tempo == 2)
                   {
                      Serial.println("Y");
                      goto counter;
                   } // fin if pas de tir sur cible rouge
                } // fin if 1s de passée
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '5')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         erreurs ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,300,150);
                         score = score -5;
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 5
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle de la cible 5
          } // fin if cible 5
          if (cible == 6)
          {
             lcd.clear();
             lcd.setCursor(0,7);
             lcd.print("Ne pas tirer !");
             while (1)
             {
                etat_bp_retour = digitalRead(bp_retour);
                if (etat_bp_retour == LOW)
                {
                   delay(250);
                   lcd.clear();
                   tone(buzzer,500,150);
                   Serial.println('Z');
                   menu_principal();
                } // fin if appui sur bp retour
                currentMillis = millis();
                if (currentMillis - chronoMillis >= 1000)
                {
                   tempo++;
                   if (tempo == 2)
                   {
                      Serial.println("Y");
                      goto counter;
                   } // fin if pas de tir sur cible rouge
                } // fin if 1s de passée
                if (Serial.available() > 0)
                {
                   received = Serial.read();
                   if (received == '6')
                   {etat_cible = 1;} else {etat_cible = 0;}
                   if (etat_cible != last_etat_cible)
                   {
                      if (etat_cible == 1)
                      {
                         erreurs ++;
                         if (Serial.available() > 0){poubelle = Serial.read();}
                         tone(buzzer,300,150);
                         score = score -5;
                         delay(250);
                         goto counter;
                      } // fin if touche sur cible 6
                      last_etat_cible = etat_cible;
                   }
                } // fin if touche sur une cible
             } // fin boucle de la cible 6
          } // fin if cible 6
       } // fin if couleur 2 rouge
    } // fin void reflexe

    void test_cible() // mode de test des cibles
    {
       lcd.clear();
       suivant = false;
       lcd.setCursor(0,0);
       lcd.print("Mode test des cibles");
       Serial.println('S');
       while (1)
       {
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){Serial.println('Z');delay(250);lcd.clear();break;}
          if (Serial.available() > 0)
          {
             received = Serial.read();
             if (received == '1')
             {
                lcd.clear();
                tone(buzzer,500,150);
                lcd.print("POC! cible 1");
                Serial.println('1');
                delay(250);
                Serial.println('Y');
             } // fin if cible 1 touchée
             if (received == '2')
             {
                lcd.clear();
                tone(buzzer,500,150);
                lcd.print("POC! cible 2");
                Serial.println('2');
                delay(250);
                Serial.println('Y');
             } // fin if cible 2 touchée
             if (received == '3')
             {
                lcd.clear();
                tone(buzzer,500,150);
                lcd.print("POC! cible 3");
                Serial.println('3');
                delay(250);
                Serial.println('Y');
             } // fin if cible 3 touchée
             if (received == '4')
             {
                lcd.clear();
                tone(buzzer,500,150);
                lcd.print("POC! cible 4");
                Serial.println('4');
                delay(250);
                Serial.println('Y');
             } // fin if cible 4 touchée
             if (received == '5')
             {
                lcd.clear();
                tone(buzzer,500,150);
                lcd.print("POC! cible 5");
                Serial.println('5');
                delay(250);
                Serial.println('Y');
             } // fin if cible 5 touchée
             if (received == '6')
             {
                lcd.clear();
                tone(buzzer,500,150);
                lcd.print("POC! cible 6");
                Serial.println('6');
                delay(250);
                Serial.println('Y');
             } // fin if cible 6 touchée
          } // fin if serial
       }
       menu_principal();
    } // fin void test des cibles

    void nombre_cible()
    {
       lcd.clear();
       nombre_cible_obj = 0;
       lcd.setCursor(1,0);
       lcd.print("Nombre de cible a");
       lcd.setCursor(5,1);
       lcd.print("toucher :");
       do
       {
          suivant = false;
          lcd.setCursor(9,3);
          lcd.print(nombre_cible_obj);
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_retour = digitalRead(bp_retour);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_bas = digitalRead(bp_bas);
          if (etat_bp_bas == LOW)
          {
             nombre_cible_obj = nombre_cible_obj - 1;
             tone(buzzer,200,150);
             delay(200);
             if (nombre_cible_obj < 0){nombre_cible_obj = 0;}
          }
          if (etat_bp_haut == LOW)
          {
             nombre_cible_obj = nombre_cible_obj + 1;
             tone(buzzer,400,150);
             if (nombre_cible_obj > 99){nombre_cible_obj = 99;}
             delay(200);
          }
          if (etat_bp_retour == LOW){delay(250);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW){delay(250);lcd.clear();tone(buzzer,500,150);suivant = true;}
       }
       while (suivant != true);
       delay(200);
       lcd.setCursor(1,0);
       lcd.print("Vous avez choisi :");
       if (nombre_cible_obj == 1)
       {
          lcd.setCursor(7,2);
          lcd.print(nombre_cible_obj);
          lcd.print(" cible");
       }
       if (nombre_cible_obj > 1 && nombre_cible_obj < 10)
       {
          lcd.setCursor(6,2);
          lcd.print(nombre_cible_obj);
          lcd.print(" cibles");
       }
       if (nombre_cible_obj > 9)
       {
          lcd.setCursor(5,2);
          lcd.print(nombre_cible_obj);
          lcd.print(" cibles");
       }
       lcd.setCursor(1,3);
       lcd.print("Appuyer pour jouer");
       do
       {
          suivant = false;
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_retour = digitalRead(bp_retour);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_bas = digitalRead(bp_bas);
          if (etat_bp_retour == LOW){delay(250);lcd.clear();tone(buzzer,500,150);nombre_cible();}
          if (etat_bp_ok == LOW || etat_bp_haut == LOW || etat_bp_bas == LOW){delay(250);tone(buzzer,500,150);suivant = true;}
       }
       while (suivant != true);
    } // fin void nombre de cible

    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");
       do
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(200);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_haut == LOW || etat_bp_ok == LOW || etat_bp_bas == LOW){tone(buzzer,500,150);suivant = true;}
       }
       while (suivant != true);
       lcd.clear();
       for(int i = 5; i > 0; i--)
       {
          lcd.setCursor(4,1);
          lcd.print("Debut dans ");
          lcd.print(i);
          if (i > 0){tone(buzzer,500,150);}
          if (i == 0){tone(buzzer,900,150);}
          delay(1000);
       }
       lcd.clear();
    } // fin void startgamecount

    void fin_vitesse_1j()
    {
       lcd.clear();
       Serial.println('Y');
       Serial.println('p');
       while (1)
       {
          lcd.setCursor(0,0);
          lcd.print("Temps : ");
          if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
          if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
          lcd.print(":");
          if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
          if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
          lcd.print(":");
          lcd.print(decisec);
          lcd.setCursor(0,2);
          if (erreurs <= 1){lcd.print("Erreur : ");lcd.print(erreurs);}
          if (erreurs > 1){lcd.print("Erreurs : ");lcd.print(erreurs);}
          lcd.setCursor(0,3);
          if (cible_manquees <= 1){lcd.print("Cible manquee : ");lcd.print(cible_manquees);}
          if (cible_manquees > 1){lcd.print("Cible manquee : ");lcd.print(cible_manquees);}
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();break;}
       }
       lcd.setCursor(0,0);
       lcd.print("Voulez vous rejouer?");
       lcd.setCursor(0,3);
       lcd.print("NON");
       lcd.setCursor(17,3);
       lcd.print("OUI");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW)
          {
             delay(100);
             lcd.clear();
             tone(buzzer,500,150);
             nombre_cible_obj = 0;
             nombre_cible_touche = 0;
             decisec = 0;
             seconde = 0;
             minute = 0;
             cible = 0;
             erreurs = 0;
             tempo = 0;
             cible_manquees = 0;
             vitesse_1j();
          }
       }
    } // fin void fin vitesse 1j

    void fin_reaction_1j()
    {
       lcd.clear();
       Serial.println('Y');
       Serial.println('p');
       while (1)
       {
          lcd.setCursor(0,0);
          lcd.print("Temps : ");
          if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
          if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
          lcd.print(":");
          if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
          if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
          lcd.print(":");
          lcd.print(decisec);
          lcd.setCursor(1,3);
          lcd.print("Fin de la partie !");
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
       }
       lcd.setCursor(0,0);
       lcd.print("Voulez vous rejouer?");
       lcd.setCursor(0,3);
       lcd.print("NON");
       lcd.setCursor(17,3);
       lcd.print("OUI");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW)
          {
             delay(100);
             lcd.clear();
             tone(buzzer,500,150);
             nombre_cible_obj = 0;
             nombre_cible_touche = 0;
             decisec = 0;
             seconde = 0;
             minute = 0;
             cible = 0;
             reaction_1j();
          }
       }
    } // fin void fin reaction 1j

    void fin_reflexe()
    {
       lcd.clear();
       Serial.println('Y');
       Serial.println('p');
       while (1)
       {
          lcd.setCursor(2,0);
          lcd.print("Fin de la partie");
          lcd.setCursor(0,2);
          lcd.print("Score : ");
          lcd.print(score);
          lcd.setCursor(0,3);
          if (erreurs <= 1){lcd.print("Erreur : ");lcd.print(erreurs);}
          if (erreurs > 1){lcd.print("Erreurs : ");lcd.print(erreurs);}
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
       }
       lcd.setCursor(0,0);
       lcd.print("Voulez vous rejouer?");
       lcd.setCursor(0,3);
       lcd.print("NON");
       lcd.setCursor(17,3);
       lcd.print("OUI");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW)
          {
             delay(100);
             lcd.clear();
             tone(buzzer,500,150);
             reflexe();
          }
       }
    } // fin void fin reflexe

    void def_temps_tempo()
    {
       lcd.clear();
       deftempo = 0;
       lcd.setCursor(0,0);
       lcd.print("Temps d'affichage de");
       lcd.setCursor(6,1);
       lcd.print("la cible");
       do
       {
          suivant = false;
          lcd.setCursor(9,3);
          lcd.print(deftempo);
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_retour = digitalRead(bp_retour);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_bas = digitalRead(bp_bas);
          if (etat_bp_bas == LOW)
          {
             deftempo = deftempo - 1;
             tone(buzzer,200,150);
             delay(200);
             if (deftempo < 0){deftempo = 0;}
          }
          if (etat_bp_haut == LOW)
          {
             deftempo = deftempo + 1;
             tone(buzzer,400,150);
             if (deftempo > 5){deftempo = 5;}
             delay(200);
          }
          if (etat_bp_retour == LOW){delay(250);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW){delay(250);lcd.clear();tone(buzzer,500,150);suivant = true;}
       }
       while (suivant != true);
       delay(200);
       lcd.clear();
       lcd.setCursor(1,0);
       lcd.print("Vous avez choisi :");
       lcd.setCursor(9,1);
       lcd.print(deftempo);
       lcd.print("s");
       lcd.setCursor(1,3);
       lcd.print("Appuyer pour jouer");
       do
       {
          suivant = false;
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_retour = digitalRead(bp_retour);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_bas = digitalRead(bp_bas);
          if (etat_bp_retour == LOW){delay(250);lcd.clear();tone(buzzer,500,150);def_temps_tempo();}
          if (etat_bp_ok == LOW || etat_bp_haut == LOW || etat_bp_bas == LOW){delay(250);tone(buzzer,500,150);suivant = true;}
       }
       while (suivant != true);
    } // fin void def temps tempo

    void fin_reaction_2j()
    {
       lcd.clear();
       while (1)
       {
          lcd.setCursor(2,0);
          lcd.print("Fin de la partie");
          lcd.setCursor(0,1);
          lcd.print("Score vert = ");
          lcd.print(score_vert);
          lcd.setCursor(0,2);
          lcd.print("Score rouge = ");
          lcd.print(score_rouge);
          lcd.setCursor(0,3);
          if (score_vert > score_rouge){lcd.print("Victoire du vert !");Serial.println('m');}
          else{lcd.print("Victoire du rouge !");Serial.println('n');}
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);Serial.println('Y');lcd.clear();tone(buzzer,500,150);break;}
       }
       lcd.setCursor(0,0);
       lcd.print("Voulez vous rejouer?");
       lcd.setCursor(0,3);
       lcd.print("NON");
       lcd.setCursor(17,3);
       lcd.print("OUI");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW)
          {
             delay(100);
             lcd.clear();
             tone(buzzer,500,150);
             reaction_2j();
          }
       }
    } // fin void fin reaction 2j

    void fin_reaction_3j()
    {
       lcd.clear();
       while (1)
       {
          lcd.setCursor(0,0);
          if (score_vert > score_rouge && score_vert > score_jaune){lcd.print("Victoire du vert !");Serial.println('m');}
          if (score_rouge > score_vert && score_rouge > score_jaune){lcd.print("Victoire du rouge !");Serial.println('n');}
          if (score_jaune > score_rouge && score_jaune > score_vert){lcd.print("Victoire du jaune !");Serial.println('o');}
          lcd.setCursor(0,1);
          lcd.print("Score vert = ");
          lcd.print(score_vert);
          lcd.setCursor(0,2);
          lcd.print("Score rouge = ");
          lcd.print(score_rouge);
          lcd.setCursor(0,3);
          lcd.print("Score jaune = ");
          lcd.print(score_jaune);
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);Serial.println('Y');lcd.clear();tone(buzzer,500,150);break;}
       }
       lcd.setCursor(0,0);
       lcd.print("Voulez vous rejouer?");
       lcd.setCursor(0,3);
       lcd.print("NON");
       lcd.setCursor(17,3);
       lcd.print("OUI");
       while (1)
       {
          etat_bp_ok = digitalRead(bp_ok);
          etat_bp_bas = digitalRead(bp_bas);
          etat_bp_haut = digitalRead(bp_haut);
          etat_bp_retour = digitalRead(bp_retour);
          if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
          if (etat_bp_ok == LOW)
          {
             delay(100);
             lcd.clear();
             tone(buzzer,500,150);
             reaction_3j();
          }
       }
    } // fin void fin reaction 3j
    avatar
    Bidou914
    vis rouillée
    vis rouillée

    Messages : 39
    Date d'inscription : 12/06/2015
    Age : 28
    Localisation : Essonne

    Re: Ciblerie électronique multijoueur

    Message par Bidou914 le Lun 27 Juin - 0:19

    Code du boitier esclave :
    Code:

    #include <avr/wdt.h>

    int received; // reception RF/PC
    int sensibilitepiezzo = 100; // valeur de la sensibilité du piezzo à 100
    int valpoc1 = 0; // valeur de l'impact sur la cible 1
    int valpoc2 = 0; // valeur de l'impact sur la cible 2
    int valpoc3 = 0; // valeur de l'impact sur la cible 3
    int valpoc4 = 0; // valeur de l'impact sur la cible 4
    int valpoc5 = 0; // valeur de l'impact sur la cible 5
    int valpoc6 = 0; // valeur de l'impact sur la cible 6


    int etat_piezzo1 = 0;
    int last_etat_piezzo1 = 0;
    int etat_piezzo2 = 0;
    int last_etat_piezzo2 = 0;
    int etat_piezzo3 = 0;
    int last_etat_piezzo3 = 0;
    int etat_piezzo4 = 0;
    int last_etat_piezzo4 = 0;
    int etat_piezzo5 = 0;
    int last_etat_piezzo5 = 0;
    int etat_piezzo6 = 0;
    int last_etat_piezzo6 = 0;

    const int led_vert1 = 2;
    const int led_rouge1 = 3;
    const int led_vert2 = 4;
    const int led_rouge2 = 5;
    const int led_vert3 = 6;
    const int led_rouge3 = 7;
    const int led_vert4 = 8;
    const int led_rouge4 = 9;
    const int led_vert5 = 10;
    const int led_rouge5 = 11;
    const int led_vert6 = 12;
    const int led_rouge6 = 13;
    const int piezzo1 = A0;
    const int piezzo2 = A1;
    const int piezzo3 = A2;
    const int piezzo4 = A3;
    const int piezzo5 = A4;
    const int piezzo6 = A5;

    boolean etat_led_vert1;
    boolean etat_led_rouge1;
    boolean etat_led_vert2;
    boolean etat_led_rouge2;
    boolean etat_led_vert3;
    boolean etat_led_rouge3;
    boolean etat_led_vert4;
    boolean etat_led_rouge4;
    boolean etat_led_vert5;
    boolean etat_led_rouge5;
    boolean etat_led_vert6;
    boolean etat_led_rouge6;

    void setup()
    {
       Serial.begin(9600);
       pinMode(led_vert1, OUTPUT);
       pinMode(led_rouge1, OUTPUT);
       pinMode(led_vert2, OUTPUT);
       pinMode(led_rouge2, OUTPUT);
       pinMode(led_vert3, OUTPUT);
       pinMode(led_rouge3, OUTPUT);
       pinMode(led_vert4, OUTPUT);
       pinMode(led_rouge4, OUTPUT);
       pinMode(led_vert5, OUTPUT);
       pinMode(led_rouge5, OUTPUT);
       pinMode(led_vert6, OUTPUT);
       pinMode(led_rouge6, OUTPUT);
       digitalWrite(led_vert1, LOW);
       digitalWrite(led_rouge1, LOW);
       digitalWrite(led_vert2, LOW);
       digitalWrite(led_rouge2, LOW);
       digitalWrite(led_vert3, LOW);
       digitalWrite(led_rouge3, LOW);
       digitalWrite(led_vert4, LOW);
       digitalWrite(led_rouge4, LOW);
       digitalWrite(led_vert5, LOW);
       digitalWrite(led_rouge5, LOW);
       digitalWrite(led_vert6, LOW);
       digitalWrite(led_rouge6, LOW);
    } // fin void setup

    void loop()
    {
       if (Serial.available() > 0)
       {
          received = Serial.read();
          if (received == 'S'){jeux();}
       } // fin if lecture du serial
    } // fin void loop

    void jeux()
    {
       while (1)
       {
          if (Serial.available() > 0)
          {
             received = Serial.read();
             if (received == 'Z')
             {
                digitalWrite(led_vert1, LOW);
                digitalWrite(led_rouge1, LOW);
                digitalWrite(led_vert2, LOW);
                digitalWrite(led_rouge2, LOW);
                digitalWrite(led_vert3, LOW);
                digitalWrite(led_rouge3, LOW);
                digitalWrite(led_vert4, LOW);
                digitalWrite(led_rouge4, LOW);
                digitalWrite(led_vert5, LOW);
                digitalWrite(led_rouge5, LOW);
                digitalWrite(led_vert6, LOW);
                digitalWrite(led_rouge6, LOW);
                loop();
             }
             if (received == 'Y')
             {
                digitalWrite(led_vert1, LOW);
                digitalWrite(led_rouge1, LOW);
                digitalWrite(led_vert2, LOW);
                digitalWrite(led_rouge2, LOW);
                digitalWrite(led_vert3, LOW);
                digitalWrite(led_rouge3, LOW);
                digitalWrite(led_vert4, LOW);
                digitalWrite(led_rouge4, LOW);
                digitalWrite(led_vert5, LOW);
                digitalWrite(led_rouge5, LOW);
                digitalWrite(led_vert6, LOW);
                digitalWrite(led_rouge6, LOW);
             }
             if (received == '1')
             {
                digitalWrite(led_vert1, HIGH);
                digitalWrite(led_rouge1, LOW);
             } // fin if cible 1 vert
             if (received == '2')
             {
                digitalWrite(led_vert2, HIGH);
                digitalWrite(led_rouge2, LOW);
             } // fin if cible 2 vert
             if (received == '3')
             {
                digitalWrite(led_vert3, HIGH);
                digitalWrite(led_rouge3, LOW);
             } // fin if cible 3 vert
             if (received == '4')
             {
                digitalWrite(led_vert4, HIGH);
                digitalWrite(led_rouge4, LOW);
             } // fin if cible 4 vert
             if (received == '5')
             {
                digitalWrite(led_vert5, HIGH);
                digitalWrite(led_rouge5, LOW);
             } // fin if cible 5 vert
             if (received == '6')
             {
                digitalWrite(led_vert6, HIGH);
                digitalWrite(led_rouge6, LOW);
             } // fin if cible 6 vert
             if (received == 'a')
             {
                digitalWrite(led_vert1, LOW);
                digitalWrite(led_rouge1, HIGH);
             } // fin if cible 1 rouge
             if (received == 'b')
             {
                digitalWrite(led_vert2, LOW);
                digitalWrite(led_rouge2, HIGH);
             } // fin if cible 2 rouge
             if (received == 'c')
             {
                digitalWrite(led_vert3, LOW);
                digitalWrite(led_rouge3, HIGH);
             } // fin if cible 3 rouge
             if (received == 'd')
             {
                digitalWrite(led_vert4, LOW);
                digitalWrite(led_rouge4, HIGH);
             } // fin if cible 4 rouge
             if (received == 'e')
             {
                digitalWrite(led_vert5, LOW);
                digitalWrite(led_rouge5, HIGH);
             } // fin if cible 5 rouge
             if (received == 'f')
             {
                digitalWrite(led_vert6, LOW);
                digitalWrite(led_rouge6, HIGH);
             } // fin if cible 6 rouge
             if (received == 'g')
             {
                digitalWrite(led_vert1, HIGH);
                digitalWrite(led_rouge1, HIGH);
             } // fin if cible 1 jaune
             if (received == 'h')
             {
                digitalWrite(led_vert2, HIGH);
                digitalWrite(led_rouge2, HIGH);
             } // fin if cible 2 jaune
             if (received == 'i')
             {
                digitalWrite(led_vert3, HIGH);
                digitalWrite(led_rouge3, HIGH);
             } // fin if cible 3 jaune
             if (received == 'j')
             {
                digitalWrite(led_vert4, HIGH);
                digitalWrite(led_rouge4, HIGH);
             } // fin if cible 4 jaune
             if (received == 'k')
             {
                digitalWrite(led_vert5, HIGH);
                digitalWrite(led_rouge5, HIGH);
             } // fin if cible 5 jaune
             if (received == 'l')
             {
                digitalWrite(led_vert6, HIGH);
                digitalWrite(led_rouge6, HIGH);
             } // fin if cible 6 jaune
             if (received == 'm')
             {
                digitalWrite(led_rouge1, LOW);
                digitalWrite(led_vert1, HIGH);
                digitalWrite(led_rouge2, LOW);
                digitalWrite(led_vert2, HIGH);
                digitalWrite(led_rouge3, LOW);
                digitalWrite(led_vert3, HIGH);
                digitalWrite(led_rouge4, LOW);
                digitalWrite(led_vert4, HIGH);
                digitalWrite(led_rouge5, LOW);
                digitalWrite(led_vert5, HIGH);
                digitalWrite(led_rouge6, LOW);
                digitalWrite(led_vert6, HIGH);
             } // fin if touche sur cible verte
             if (received == 'n')
             {
                digitalWrite(led_rouge1, HIGH);
                digitalWrite(led_vert1, LOW);
                digitalWrite(led_rouge2, HIGH);
                digitalWrite(led_vert2, LOW);
                digitalWrite(led_rouge3, HIGH);
                digitalWrite(led_vert3, LOW);
                digitalWrite(led_rouge4, HIGH);
                digitalWrite(led_vert4, LOW);
                digitalWrite(led_rouge5, HIGH);
                digitalWrite(led_vert5, LOW);
                digitalWrite(led_rouge6, HIGH);
                digitalWrite(led_vert6, LOW);
             } // fin if touche sur cible rouge
             if (received == 'o')
             {
                digitalWrite(led_rouge1, HIGH);
                digitalWrite(led_vert1, HIGH);
                digitalWrite(led_rouge2, HIGH);
                digitalWrite(led_vert2, HIGH);
                digitalWrite(led_rouge3, HIGH);
                digitalWrite(led_vert3, HIGH);
                digitalWrite(led_rouge4, HIGH);
                digitalWrite(led_vert4, HIGH);
                digitalWrite(led_rouge5, HIGH);
                digitalWrite(led_vert5, HIGH);
                digitalWrite(led_rouge6, HIGH);
                digitalWrite(led_vert6, HIGH);
             } // fin if touche sur cible jaune
             if (received == 'p')
             {
                digitalWrite(led_rouge1, HIGH);
                delay(100);
                digitalWrite(led_rouge2, HIGH);
                delay(100);
                digitalWrite(led_rouge3, HIGH);
                delay(100);
                digitalWrite(led_rouge4, HIGH);
                delay(100);
                digitalWrite(led_rouge5, HIGH);
                delay(100);
                digitalWrite(led_rouge6, HIGH);
             }
          } // fin if lecture du serial

          // touche sur la cible 1
          valpoc1 = analogRead(piezzo1);
          if (valpoc1 >= sensibilitepiezzo) // si impact sur la cible 1 est supérieur au seuil défini
          {etat_piezzo1 = 1;}
          else{etat_piezzo1 = 0;}
          if (etat_piezzo1 != last_etat_piezzo1)
          {
             if (etat_piezzo1 == 1)
             {
                Serial.println('1');
                digitalWrite(led_vert1, LOW);
                digitalWrite(led_rouge1, LOW);
                delay(500);
             }
             last_etat_piezzo1 = etat_piezzo1;
          } // fin if cible 1 touchée

          // touche sur la cible 2
          valpoc2 = analogRead(piezzo2);
          if (valpoc2 >= sensibilitepiezzo) // si impact sur la cible 2 est supérieur au seuil défini
          {etat_piezzo2 = 1;}
          else{etat_piezzo2 = 0;}
          if (etat_piezzo2 != last_etat_piezzo2)
          {
             if (etat_piezzo2 == 1)
             {
                Serial.println('2');
                digitalWrite(led_vert2, LOW);
                digitalWrite(led_rouge2, LOW);
                delay(500);
             }
             last_etat_piezzo2 = etat_piezzo2;
          } // fin if cible 2 touchée

          // touche sur la cible 3
          valpoc3 = analogRead(piezzo3);
          if (valpoc3 >= sensibilitepiezzo) // si impact sur la cible 3 est supérieur au seuil défini
          {etat_piezzo3 = 1;}
          else{etat_piezzo3 = 0;}
          if (etat_piezzo3 != last_etat_piezzo3)
          {
             if (etat_piezzo3 == 1)
             {
                Serial.println('3');
                digitalWrite(led_vert3, LOW);
                digitalWrite(led_rouge3, LOW);
                delay(500);
             }
             last_etat_piezzo3 = etat_piezzo3;
          } // fin if cible 3 touchée

          // touche sur la cible 4
          valpoc4 = analogRead(piezzo4);
          if (valpoc4 >= sensibilitepiezzo) // si impact sur la cible 4 est supérieur au seuil défini
          {etat_piezzo4 = 1;}
          else{etat_piezzo4 = 0;}
          if (etat_piezzo4 != last_etat_piezzo4)
          {
             if (etat_piezzo4 == 1)
             {
                Serial.println('4');
                digitalWrite(led_vert4, LOW);
                digitalWrite(led_rouge4, LOW);
                delay(500);
             }
             last_etat_piezzo4 = etat_piezzo4;
          } // fin if cible 4 touchée

          // touche sur la cible 5
          valpoc5 = analogRead(piezzo5);
          if (valpoc5 >= sensibilitepiezzo) // si impact sur la cible 5 est supérieur au seuil défini
          {etat_piezzo5 = 1;}
          else{etat_piezzo5 = 0;}
          if (etat_piezzo5 != last_etat_piezzo5)
          {
             if (etat_piezzo5 == 1)
             {
                Serial.println('5');
                digitalWrite(led_vert5, LOW);
                digitalWrite(led_rouge5, LOW);
                delay(500);
             }
             last_etat_piezzo5 = etat_piezzo5;
          } // fin if cible 5 touchée

          // touche sur la cible 6
          valpoc6 = analogRead(piezzo6);
          if (valpoc6 >= sensibilitepiezzo) // si impact sur la cible 6 est supérieur au seuil défini
          {etat_piezzo6 = 1;}
          else{etat_piezzo6 = 0;}
          if (etat_piezzo6 != last_etat_piezzo6)
          {
             if (etat_piezzo6 == 1)
             {
                Serial.println('6');
                digitalWrite(led_vert6, LOW);
                digitalWrite(led_rouge6, LOW);
                delay(500);
             }
             last_etat_piezzo6 = etat_piezzo6;
          } // fin if cible 6 touchée
       } // fin while
    } // fin void jeux

    Je m'excuse pour la longueur des codes qui peuvent très certainement être amélioré.

    En espérant que cette variante vous plaira
    avatar
    freeman83
    boulon d'argent
    boulon d'argent

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

    Re: Ciblerie électronique multijoueur

    Message par freeman83 le Lun 27 Juin - 18:43

    bravo beau travail approuved

    Contenu sponsorisé

    Re: Ciblerie électronique multijoueur

    Message par Contenu sponsorisé


      La date/heure actuelle est Ven 18 Aoû - 20:22