Airsoft Krispies

Bonjour à tous et bienvenue


    Tuto ciblerie électronique

    Partagez
    avatar
    burnout'
    vis rouillée
    vis rouillée

    Messages : 25
    Date d'inscription : 06/04/2015
    Age : 24
    Localisation : Le Mans

    Re: Tuto ciblerie électronique

    Message par burnout' le Lun 13 Nov - 23:09

    Bonjour à tous,

    ça y est ! J'ai enfin pris le temps de tester vraiment les cibles électroniques Smile

    Voici une petite vidéo de test :



    Après avoir joué pendant plus de 2 heures, quelques points d'amélioration apparaissent :

    • Les capteurs piezo sont beaucoup trop sensibles ! Si ma bille touche le grillage très proche de la cible, la touche est détectée ...
      Pour ce point là, je pense augmenter le seuil de sensibilité des capteurs piezo.
    • Le temps d'allumage entre 2 cibles est un peu long. Lorsque le joueur est vraiment très rapide la lenteur se fait légèrement ressentir.
    • En mode parcours, à cause de la lenteur d'allumage entre 2 cibles ont obtient des situations étranges...
      Par exemple, je touche la cible 1, comme je sais que la suivante est la cible 2 je tire dessus. Mais la led n'a pas eu le temps de s'allumer entre mes 2 tirs.. Donc la touche est bien comptée, mais du coup la Led reste allumée..
      Pour résoudre ça, je vais essayer de baisser ma temporisation entre deux allumages


    J'ai eu des idées d'options à ajouter en mode Parcours :

    • Ajouter la possibilité de "boucler". Car 6 cibles c'est pas beaucoup pour faire un parcours. J'aimerais ajouter la possibilité de le faire plusieurs fois de suite. C'est à dire par exemple faire un parcours qui revient à la première cible et permet de faire un 2ème tour.
    • Ajouter un mode Aller/retour. Le joueur ferait le parcours aller/retour. Arrivé à la cible N°6, il repart en arrière et touche les cibles 5,4,3,2,1.


    Cela permettrait de faire des challenges un peu plus long, pour faire durer le plaisir quoi ... Smile

    A bientôt,
    Burnout'.


    Dernière édition par burnout' le Mer 15 Nov - 14:45, édité 1 fois
    avatar
    naedioba
    vis rouillée
    vis rouillée

    Messages : 58
    Date d'inscription : 07/05/2017
    Age : 48
    Localisation : Saint-Louis, Sénégal

    Merci

    Message par naedioba le Mar 14 Nov - 4:35

    Bonjour burnout'

    Merci pour cette video. c'est toujours bien de voir les projet en reel.
    J'ai bien aimee ton idee de "boucler" pour le mode Parcours. DOnc je n'ai pas pu m'empecher d'essayer.

    Resultats:

    j'ai ajoutee 2 variables:

    Code:


    int Tour = 0;
    int NombreTours = 0;


    Avant de démarrer le compte a rebours du jeu, je choisis d'abord le nombre de tours a effectuer (99 tours maximum):
    Code:

    void PreIPSC() {
     
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Nombre de tours");
      delay(300);

      while(1)  {

        if(digitalRead(ButtonHaut) == HIGH)
            {tone(12, 800, 50);
              NombreTours++;
              delay(DelayBP);}
             
        if(digitalRead(ButtonBas) == HIGH)
            {tone(12, 800, 50);
              NombreTours--;
              delay(DelayBP);}

        if(digitalRead(ButtonSelect) == HIGH)
          {tone(12, 800, 50);
          PreIPSC2();}

     if (NombreTours  < 1 ) {NombreTours  = 1;}
     if (NombreTours  > 99 ) {NombreTours  = 99;}
     
     if (NombreTours  >= 10 ) {
      lcd.setCursor(6,1);
      lcd.print(NombreTours , DEC); }

      if (NombreTours  < 10 ) {
      lcd.setCursor(6,1);
      lcd.print("0");
      lcd.setCursor(7,1);
      lcd.print(NombreTours , DEC); }
      }
    }


    Pendant le jeu, a chaque fois que je touche la cible 1, j’incrémente la variable Tour d'un point, ensuite je vérifie si Tour est égal au nombre de tours:
    Code:

                Tour++;    // variable pour comptabiliser le nombre de tour a chaque qu'on touche la cible 1
                  if(Tour == NombreTours) { 


    Si Tour == NombreTours, alors c'est la fin du jeu; sinon le jeu continue.
    Voici une partie du programme:
    Code:

    void PreIPSC() {
     
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Nombre de tours");
      delay(300);

      while(1)  {

        if(digitalRead(ButtonHaut) == HIGH)
            {tone(12, 800, 50);
              NombreTours++;
              delay(DelayBP);}
             
        if(digitalRead(ButtonBas) == HIGH)
            {tone(12, 800, 50);
              NombreTours--;
              delay(DelayBP);}

        if(digitalRead(ButtonSelect) == HIGH)
          {tone(12, 800, 50);
          PreIPSC2();}

     if (NombreTours  < 1 ) {NombreTours  = 1;}
     if (NombreTours  > 99 ) {NombreTours  = 99;}
     
     if (NombreTours  >= 10 ) {
      lcd.setCursor(6,1);
      lcd.print(NombreTours , DEC); }

      if (NombreTours  < 10 ) {
      lcd.setCursor(6,1);
      lcd.print("0");
      lcd.setCursor(7,1);
      lcd.print(NombreTours , DEC); }
      }
    }

    //-----------------------------------------------------------

    void PreIPSC2() {

      lcd.clear();
      lcd.setCursor(3,0);
      lcd.print("Quand pret");
      lcd.setCursor(3,1);
      lcd.print("Pressez OK");
      delay(1000);
     
     while(1)  { 
      if(digitalRead(ButtonSelect) == HIGH)
      {tone(12, 800, 50);
        StartIPSC();}
     }
    }

    //-----------------------------------------------------------
     void StartIPSC() {
      lcd.clear();
      lcd.setCursor(2,0);
      lcd.print("Depart dans:");
      lcd.setCursor(9,1);
      lcd.print("sec");
      randomSeed( millis() );
      PreCounterseconde = random(5, 10); // chiffre aleatoire entre 5 et 10 secondes
     
     while(1) {
      if (PreCounterseconde >= 10 ) {
          lcd.setCursor(6,1);
          lcd.print(PreCounterseconde, DEC); }
      if (PreCounterseconde < 10 ) {
          lcd.setCursor(6,1);
          lcd.print("0");
          lcd.setCursor(7,1);
          lcd.print(PreCounterseconde, DEC); }
          delay(1000);
          PreCounterseconde--; 
     
      if (PreCounterseconde == 0)
        { Serial.println('S');
        IPSCGame(); }
      }
     }
    //----------------------------------------------------
    void IPSCGame() {

      tone(12, 1000, 800);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Parcours  Rapide");
      TempsInit = (millis());

      while(1) {
        if (Serial.available()>0) {
        received = Serial.read();
       
    //Cible 1

            if(received == 'A') {
                tone(12, 1000, 300);
                Point = (Point + Cibles1);
                Zone1++;
                Tour++;    // variable pour comptabiliser le nombre de tour a chaque qu'on touche la cible 1
                  if(Tour == NombreTours) { 
                    TempsReel = (millis() - TempsInit );
                    hitfactor = (Point*1000)/TempsReel;
                    Serial.println('Z');
                    finIPSC(); 
                  }
                } 
            else {
            welcome==================================================
    // Enregistrement des points selon la cible touchee
    //Cible 2       
            if(received == 'B')
              {Point = (Point + Cibles2);
                tone(12, 700, 300);
                Zone2++;
              }
    //Cible 3         
            if(received == 'C')
              {Point = (Point + Cibles3);
                tone(12, 700, 300);
                Zone3++;
              }
    //Cible 4
            if(received == 'D')
              {Point = (Point + Cibles4);
                tone(12, 700, 300);
                Zone4++;
              }
    //Cible 5         
            if(received == 'E')
              {Point = (Point + Cibles5);
              tone(12, 700, 300);
                Zone5++;
              }     
    //Cible  6       
            if(received == 'F')
              {Point = (Point + Cibles6);
                tone(12, 700, 300);
                Zone6++;
              }
            } // fin else
        } // fin if (Serial.available()>0)...
          TempsReel = (millis() - TempsInit );
          CalculeMinSecMilli ();
          PonctuationChrono ();
         
      } // fin while(1)...
    }
    //---------------------------------------------------------
    void finIPSC() {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Fin de la partie");
      tone(12, 100, 100);
      delay(100);
      tone(12, 1000, 100);
      delay(100);
      tone(12, 5000, 100);
      CalculeMinSecMilli ();

      while (1) {
       
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Fin de la partie");
      PonctuationChrono ();
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
     
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Points: ");
      lcd.setCursor(8,0);
      lcd.print(Point);
      lcd.setCursor(0, 1);
      lcd.print("Nb tours: " ); 
      lcd.setCursor(12, 1);
      lcd.print(NombreTours);
     
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
      AffichageZones ();
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
    welcome======================================================== 
      lcd.clear();  // Naedioba: affichage facteur de tir
      lcd.setCursor(0,0);
      lcd.print("Facteur de tir");
      lcd.setCursor(0, 1);
      lcd.print(hitfactor);
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
    welcome========================================================
              NbtiresReel = 0;
              TempsInit = 0;
              TempsPenal = 0;
              TempsReel = 0;
              TempsMin = 0;
              TempsSec = 0;
              TempsMil = 0;
              hitfactor = 0;
              Point = 0;
              Zone1 = 0;
              Zone2 = 0;
              Zone3 = 0;
              Zone4 = 0;
              Zone5 = 0;
              Zone6 = 0;     
              Menu();
      }
    }

    Je sais que ce n'est pas trop professionnel, mais ça marche.
    Amuse-toi bien.

    Naedioba
    avatar
    burnout'
    vis rouillée
    vis rouillée

    Messages : 25
    Date d'inscription : 06/04/2015
    Age : 24
    Localisation : Le Mans

    Re: Tuto ciblerie électronique

    Message par burnout' le Mer 15 Nov - 22:38

    Bonsoir à tous,

    Aujourd'hui j'ai fait quelques modifications sur les cibles électroniques. Voici la liste des améliorations de la version Burnout-1.3 :

    • La comptabilisation des pénalités ne fonctionnait pas dans la V1. (Base maître)
      -> Modification de la pénalité de 5s à 2s (5s trop handicapant sur le temps final)
      -> Ajout de la comptabilisation des pénalités

    • Augmentation du seuil de détection piezo. (Base esclave)
      -> treshold=550
      -> seuil idéal pour la détection > 300 fps en 0.20g

    • Réduction de la tempo après détection piezo (400 ms -> 100 ms). (Base esclave)
      -> Tempo à 50ms trop court, deux détections à chaque tir..
      -> Tempo à 100ms idéal, au GBB pas de double détection. A TESTER A l'AEG et BOLT !

    • Réduction de la tempo après détection de touche. (Base maître)
      -> Suppression du délai : Plein d'érreurs, ne détecte plus les cibles
      -> Délai à 100ms : OK, il faut laisser le temps à la base esclave de se remettre en écoute avant de renvoyer des infos.

    • Modification de la fonction "NombreDeTirs" en nombre "NombreDe":
      -> NombreDe(0); Pour la fonction nombre de tirs (aléatoire et 2 joueurs)
      -> NombreDe(1); Pour la fonction nombre de tours (Parcours)

    • Amélioration du mode parcours :
      -> Choix du nombre de boucle
      -> Possibilité de faire des boucles en aller/retour
      -> Suppresion du système de "liste" des cibles, pour détecter les pénalités


    J'ai donc ajouté les options de bouclage et d'aller/retour sur le mode parcours. Pour expliquer les options j'ai fait un petit schéma :



    Dites-moi si vous voulez plus d'explications.

    Et pour ceux qui veulent, voici le programme téléchargeable en version 1.3 : ici.

    A bientôt,
    Burnout'.
    avatar
    xseven
    vis rouillée
    vis rouillée

    Messages : 21
    Date d'inscription : 02/11/2016
    Age : 42
    Localisation : Limoges

    Re: Tuto ciblerie électronique

    Message par xseven le Jeu 16 Nov - 8:14

    Sympas ce parcourt ! A testé

    lintelo123

    Messages : 5
    Date d'inscription : 16/11/2017

    Re: Tuto ciblerie électronique

    Message par lintelo123 le Jeu 16 Nov - 19:50

    Bonjour je suis nouveau sur le forum, es ce possible de mettre plusieurs arduino esclave pour aller jusqu’à 24 cibles ? 4 arduino pour 6 cibles chacune
    j'ai aucune connaisance en programmation
    merci
    avatar
    burnout'
    vis rouillée
    vis rouillée

    Messages : 25
    Date d'inscription : 06/04/2015
    Age : 24
    Localisation : Le Mans

    Re: Tuto ciblerie électronique

    Message par burnout' le Ven 17 Nov - 9:04

    Bonjour lintelo123,

    Tout dépendras du mode d'interconnexion de tes bases esclaves à la base maître.

    En filaire:

    • I2C : Permet au maître d'envoyer des informations aux esclaves, et permet de leur demander des informations.
      En revanche les esclaves ne peuvent pas envoyer directement au maître, sans qu'il leur ai demandé... Cela demande donc de revoir la conception du code.

    • SPI : Permet de communiquer avec plusieurs esclaves, mais c'est le maître qui choisis avec quel esclave il dialogue (1 seul à la fois).


    En sans fils :

    • NRF24L01+ : Je sais qu'avec ces modules, il est possible de créer un réseau d'arduino, qui peuvent dialoguer entre eux. Ces fonctionnalités font appels à d'autres bibliothèque et il faudra donc là aussi adapter le code.

    • APC220 : Il me semble qu'il est possible de dialoguer avec plusieurs Arduino. Il y à un maître et plusieurs esclaves, les esclaves ne peuvent discuter qu'avec le maître. Et pas entre eux.
      Si ceux qui en ont peuvent faire un test ? ^^

    • Wifi : Avec un shield Wifi et la bibliothèque qui va bien. Cela doit être possible. A confirmer.


    Pour ma part je pense que le NRF24L01+ reste une bonne solution. Les modules sont très peu cher, fonctionnent très bien et on trouve de la documentation sur la mise en réseau de plusieurs Arduino.

    Si quelqu'un peux compléter/affirmer/corriger ce que j'ai dit, il n'y à pas de soucis.

    A bientôt,
    Burnout'.

    lintelo123

    Messages : 5
    Date d'inscription : 16/11/2017

    Re: Tuto ciblerie électronique

    Message par lintelo123 le Ven 17 Nov - 9:40

    Je préfère filaire
    En théorie j aimerai bien un boîtier maître qui dit a chaque esclave de levée tel ou tel cibles
    avatar
    burnout'
    vis rouillée
    vis rouillée

    Messages : 25
    Date d'inscription : 06/04/2015
    Age : 24
    Localisation : Le Mans

    Re: Tuto ciblerie électronique

    Message par burnout' le Ven 17 Nov - 10:39

    A voir peut être du côté des softwareSerial ? Ou peut être un Arduino Mega qui à deux ports série ?

    Mais dans les deux cas, tes deux bases esclaves ne pourront pas envoyer en même temps des données au maître. C'est chacune leur tour.

    Après pour que le maître envoie des données aux esclave ça il n'y a pas de soucis. C'est toujours le sens Esclave vers Maître qui est plus complexe. Donc ça dépend de tes besoins, est-ce que seul le maître dit aux esclave quelles cibles allumer. Ou est-ce que tu veux aussi que les esclaves répondent au maître ? Par exemple quand la cible à été touchée ?


    regus06
    vis rouillée
    vis rouillée

    Messages : 31
    Date d'inscription : 24/09/2015
    Age : 51
    Localisation : NICE

    Re: Tuto ciblerie électronique

    Message par regus06 le Ven 17 Nov - 10:53

    Bonjour,

    Pour baisser le nombre d'arduinos, tu as les nanos où tu peux aller jusqu'à 8 cibles par boîtier, voir le tuto de Krispies.

    lintelo123

    Messages : 5
    Date d'inscription : 16/11/2017

    Re: Tuto ciblerie électronique

    Message par lintelo123 le Ven 17 Nov - 11:12

    J ai déjà les Arduino.
    Quand une cibles est touché j aimerai que le boîtier dise la suivante ? Sachant que j ai des contacteur au lieu de piezo (pose pas soucis. A priori)
    avatar
    burnout'
    vis rouillée
    vis rouillée

    Messages : 25
    Date d'inscription : 06/04/2015
    Age : 24
    Localisation : Le Mans

    Re: Tuto ciblerie électronique

    Message par burnout' le Ven 17 Nov - 14:30

    Les contacts sec ne posent aucuns soucis, c'est même beaucoup plus simple qu'avec des Piezzo Wink

    Après que ton maître dise aux esclaves la prochaine cible ce n'est pas un problème. C'est plutôt quand l'esclave devra envoyer un message au maître que c'est compliqué.

    J'essaie de voir ce qui est possible de mon côté.

    A bientôt

    lintelo123

    Messages : 5
    Date d'inscription : 16/11/2017

    Re: Tuto ciblerie électronique

    Message par lintelo123 le Ven 17 Nov - 15:10

    D'accord, c est compliqué pour que l esclave dise tel cible est touché ?
    avatar
    naedioba
    vis rouillée
    vis rouillée

    Messages : 58
    Date d'inscription : 07/05/2017
    Age : 48
    Localisation : Saint-Louis, Sénégal

    Re: Tuto ciblerie électronique

    Message par naedioba le Dim 19 Nov - 19:51

    burnout' a écrit:Bonjour lintelo123,

    Tout dépendras du mode d'interconnexion de tes bases esclaves à la base maître.

    En filaire:

    • I2C : Permet au maître d'envoyer des informations aux esclaves, et permet de leur demander des informations.
      En revanche les esclaves ne peuvent pas envoyer directement au maître, sans qu'il leur ai demandé... Cela demande donc de revoir la conception du code.

    • SPI : Permet de communiquer avec plusieurs esclaves, mais c'est le maître qui choisis avec quel esclave il dialogue (1 seul à la fois).


    En sans fils :

    • NRF24L01+ : Je sais qu'avec ces modules, il est possible de créer un réseau d'arduino, qui peuvent dialoguer entre eux. Ces fonctionnalités font appels à d'autres bibliothèque et il faudra donc là aussi adapter le code.

    • APC220 : Il me semble qu'il est possible de dialoguer avec plusieurs Arduino. Il y à un maître et plusieurs esclaves, les esclaves ne peuvent discuter qu'avec le maître. Et pas entre eux.
      Si ceux qui en ont peuvent faire un test ? ^^

    • Wifi : Avec un shield Wifi et la bibliothèque qui va bien. Cela doit être possible. A confirmer.


    Pour ma part je pense que le NRF24L01+ reste une bonne solution. Les modules sont très peu cher, fonctionnent très bien et on trouve de la documentation sur la mise en réseau de plusieurs Arduino.

    Si quelqu'un peux compléter/affirmer/corriger ce que j'ai dit, il n'y à pas de soucis.

    A bientôt,
    Burnout'.

    Bonjour,
    Effectivement burnout' tu as raison a propos des modules APC220. J'ai personnellement essaye avec un boitier primaire et 2 boitiers secondaires, et ca marche parfaitement bien sans perturbation ni retard dans la communication. Voici en guise d’exemples quelques codes:

    Boitier primaire (pas  trop de changement):
    Code:

    void PreSpeed() {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Nombre  de  tirs");
      delay(300);

      while(1)   {

            if(digitalRead(ButtonHaut) == HIGH)
               {tone(12, 800, 50);
                Nbtires++;
                delay(DelayBP);}
           if(digitalRead(ButtonBas) == HIGH)
               {tone(12, 800, 50);
                Nbtires --;
                delay(DelayBP);}

     if(digitalRead(ButtonSelect) == HIGH)
       {tone(12, 800, 50);
       TimerSpeed();}

     if (Nbtires  < 1 ) {Nbtires  = 1;}
     if (Nbtires  >= 10 ) {
      lcd.setCursor(6,1);
      lcd.print(Nbtires , DEC); }

       if (Nbtires  < 10 ) {
       lcd.setCursor(6,1);
       lcd.print("0");
       lcd.setCursor(7,1);
       lcd.print(Nbtires , DEC); }
      }
     }
    //-------------------------------  
    void TimerSpeed() {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("  Depart  dans  ");
      lcd.setCursor(9,1);
      lcd.print("sec");

      randomSeed( millis() );
      PreCounterseconde = random(2, 8);
      
     while(1) {

       if (PreCounterseconde >= 10 ) {
          lcd.setCursor(6,1);
          lcd.print(PreCounterseconde, DEC); }
       if (PreCounterseconde < 10 ) {
          lcd.setCursor(6,1);
          lcd.print("0");
          lcd.setCursor(7,1);
          lcd.print(PreCounterseconde, DEC); }

      delay(1000);
      PreCounterseconde--;  

       if (PreCounterseconde == 0)
         { Serial.println('S');
         SpeedGame(); }
      }
     }
    //----------------------------------
    void SpeedGame() {
      lcd.clear();
      lcd.setCursor(4,0);
      lcd.print("GO");
      tone(12, 1000, 500);  

       lcd.clear();
       lcd.setCursor(2,0);
       lcd.print("Points:");
       lcd.setCursor(9,0);
       lcd.print(Point);
       lcd.setCursor(0,1);
       lcd.print("Tir n");
       lcd.setCursor(5,1);
       lcd.print((char)223);
       lcd.setCursor(9,1);
       lcd.print(NbtiresReel);
       lcd.setCursor(11,1);
       lcd.print("/");  
       lcd.setCursor(12,1);
       lcd.print(Nbtires);
       TempsInit = (millis());

      while(1) {    
        hitfactor = 0;
     if (digitalRead(ButtonSelect) == HIGH)
        {TempsReel = (millis() - TempsInit ); Serial.println('F'); finSpeedGame(); }

     if (Serial.available()>0) {
        received = Serial.read();

    //Cibles 1
             if(received == 'A')
               {Point = (Point + Cibles1);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone1++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cible 2        
             if(received == 'B')
               {Point = (Point + Cibles2);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone2++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cible 3          
             if(received == 'C')
               {Point = (Point + Cibles3);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone3++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cible 4
             if(received == 'D')
               {Point = (Point + Cibles4);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone4++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);   }
    //Cible 5          
             if(received == 'E')
               {Point = (Point + Cibles5);
               tone(12, 1000, 500);
                NbtiresReel++;
                Zone5++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);   }          
    //Cible  6        
             if(received == 'F')
               {Point = (Point + Cibles6);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone6++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);    }
    //Cibles 7
             if(received == 'G')
               {Point = (Point + Cibles7);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone7++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cibles 8
             if(received == 'H')
               {Point = (Point + Cibles8);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone8++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cibles 9
             if(received == 'I')
               {Point = (Point + Cibles9);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone9++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cibles 10
             if(received == 'J')
               {Point = (Point + Cibles10);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone10++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cibles 11
             if(received == 'K')
               {Point = (Point + Cibles11);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone11++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
    //Cibles 12
             if(received == 'L')
               {Point = (Point + Cibles12);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone12++;
                lcd.setCursor(9,0);
                lcd.print(Point);
                lcd.setCursor(9,1);
                lcd.print(NbtiresReel);  }
                                                          

      if (NbtiresReel == Nbtires)
         {TempsReel = (millis() - TempsInit );
           Serial.println('F');
           finSpeedGame(); }  
         }
      }
    }

    void finSpeedGame() {
      
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Fin de la partie");
      tone(12, 100, 1000);
      delay(1000);
      tone(12, 1000, 1000);
      delay(1000);
      tone(12, 5000, 1000);
      
      hitfactor = (Point*1000)/TempsReel;
      CalculeMinSecMilli ();
      
      while (1) {
      
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Fin de la partie");
      lcd.setCursor(8,1);
      lcd.print("points");
      lcd.setCursor(2, 1);
      lcd.print(Point);
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
    welcome========================================================
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Fin de la partie");
      PonctuationChrono ();
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
    welcome========================================================  
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Facteur de tir");
      lcd.setCursor(0, 1);
      lcd.print(hitfactor);
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);

      AffichageZones ();
    welcome========================================================
      do {
      suivant = false;
      EtatButtonSelect = digitalRead(ButtonSelect);
      EtatButtonHaut = digitalRead(ButtonHaut);
      EtatButtonBas = digitalRead(ButtonBas);
      if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
      {delay(250);tone(12,500,150);suivant = true;}
      }
     while (suivant != true);
    welcome========================================================
           if (NbtiresReel == Nbtires){
               Serial.println('F');
               NbtiresReel = 0;
               Point = 0;
               Zone1 = 0;
               Zone2 = 0;
               Zone3 = 0;
               Zone4 = 0;
               Zone5 = 0;
               Zone6 = 0;
               Zone7 = 0;
               Zone8 = 0;
               Zone9 = 0;
               Zone10 = 0;
               Zone11 = 0;
               Zone12 = 0;
               Menu();  }
      }
    }

    Voici pour le boitier secondaire numéro 1 (cibles 1 à 6):
    Code:

    /*
    ______________________________________
    |                                     |
    |           Stand de tirs             |
    |        Cible interractive           |
    |                                     |
    |     By Naudnaud and Krispies        |
    |    http://tinyurl.com/NaudKrisp01   |
    |                                     |
    |_____________________________________|

    --------------------------------------------
    Module APC220

       Series Rate = 9600 [baud]
       Series Parity = 0
       RF Frequency = 434 [Hz]
       RF RX/TX Rate = 9600 [baud]
       RF Power = 9 [Level]
       NET ID = 12345
       NODE ID = 20015998341255
    --------------------------------------------*/
    */




    // include the library code:
    #include <avr/wdt.h>




    //Variable
    int LEDRouge = 13;
    int LEDVert = 12;
    int LEDJaune = 11;
    int received; //reception RF/PC
    void Jeux();
    const int threshold= 400;
    const int sensorPin0= 0;
    const int sensorPin1= 1;
    const int sensorPin2= 2;
    const int sensorPin3= 3;
    const int sensorPin4= 4;
    const int sensorPin5= 5;
    const int sensorPin6= 6;
    const int sensorPin7= 7;


    //Variable pour l'état actuel du bouton poussoir
    int buttonStateC1 = 0;        
    int lastButtonStateC1 = 0;    
    int buttonStateC2 = 0;        
    int lastButtonStateC2 = 0;    
    int buttonStateC3 = 0;        
    int lastButtonStateC3 = 0;
    int buttonStateC4 = 0;        
    int lastButtonStateC4 = 0;
    int buttonStateC5 = 0;        
    int lastButtonStateC5 = 0;
    int buttonStateC6 = 0;        
    int lastButtonStateC6 = 0;
    int buttonStateC7 = 0;        
    int lastButtonStateC7 = 0;
    int buttonStateC8 = 0;        
    int lastButtonStateC8 = 0;


    void setup() {
      
      pinMode(LEDRouge, OUTPUT);
      pinMode(LEDVert, OUTPUT);
      pinMode(LEDJaune, OUTPUT);
     
      Serial.begin(9600);
    } // fin setup
      


    void loop() {
          
         digitalWrite(LEDRouge, HIGH);
         digitalWrite(LEDVert, LOW);
         digitalWrite(LEDJaune, LOW);
      
      while(1) {
         if (Serial.available()>0) {          // Si des données sont disponibles
        received = Serial.read();          // On les récupère
        if(received == 'S') {Jeux();}
        
         }
         } // fin while    
    }  //fin loop

    //----------------------------------------------------------------------------------------------------------------

    void Jeux() {
      
         digitalWrite(LEDRouge, LOW);
         digitalWrite(LEDVert, HIGH);
         digitalWrite(LEDJaune, LOW);
        
     while(1) {    
      
      if (Serial.available()>0) {          // Si des données sont disponibles
        received = Serial.read();          // On les récupère
        if(received == 'F') {loop(); }
      }
      
      
      // Lecture boutons

             int val0= analogRead(sensorPin0);
    //Cibles 0
             if(val0 >= threshold) // Cible pin 0
               {buttonStateC1=1;}
               else { buttonStateC1=0;}
            if (buttonStateC1 != lastButtonStateC1)
              {
           if ( buttonStateC1 == 1)
              {Serial.println('A');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC1 = buttonStateC1;
              }
      
             int val1= analogRead(sensorPin1);
     //Cible 1        
             if(val1 >= threshold) // Cible pin 1
               {buttonStateC2=1;}
               else { buttonStateC2=0;}
            if (buttonStateC2 != lastButtonStateC2)
              {
           if ( buttonStateC2 == 1)
              {Serial.println('B');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC2 = buttonStateC2;
              }
              
            int val2= analogRead(sensorPin2);  
    //Cible 2          
             if(val2 >= threshold) // Cibles pin 2
               {buttonStateC3=1;}
               else { buttonStateC3=0;}
            if (buttonStateC3 != lastButtonStateC3)
              {
           if ( buttonStateC3 == 1)
              {Serial.println('C');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC3 = buttonStateC3;
              }
              
            int val3= analogRead(sensorPin3);
    //Cible 3
                       if(val3 >= threshold) // Cible pin 3
               {buttonStateC4=1;}
               else { buttonStateC4=0;}
            if (buttonStateC4 != lastButtonStateC4)
              {
           if ( buttonStateC4 == 1)
              {Serial.println('D');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC4 = buttonStateC4;
              }
            
            int val4= analogRead(sensorPin4);
    //Cible 4          
                       if(val4 >= threshold) // Cible pin 4
               {buttonStateC5=1;}
               else { buttonStateC5=0;}
            if (buttonStateC5 != lastButtonStateC5)
              {
           if ( buttonStateC5 == 1)
              {Serial.println('E');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC5 = buttonStateC5;
              }
              
              
             int val5= analogRead(sensorPin5);
     //Cible 5          
                       if(val5 >= threshold) // Cible pin 5
               {buttonStateC6=1;}
               else { buttonStateC6=0;}
            if (buttonStateC6 != lastButtonStateC6)
              {
           if ( buttonStateC6 == 1)
              {Serial.println('F');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC6 = buttonStateC6;
              }
              }          
     }
    } // fin jeux




    Voici pour le boitier secondaire numéro 2 (cibles 7 à 12):
    Code:

    /*
    ______________________________________
    |                                     |
    |           Stand de tirs             |
    |        Cible interractive           |
    |                                     |
    |     By Naudnaud and Krispies        |
    |    http://tinyurl.com/NaudKrisp01   |
    |                                     |
    |_____________________________________|

    Boitier esclave 2

    --------------------------------------------
    Module APC220

       Series Rate = 9600 [baud]
       Series Parity = 0
       RF Frequency = 434 [Hz]
       RF RX/TX Rate = 9600 [baud]
       RF Power = 9 [Level]
       NET ID = 12345
       NODE ID = 20015998341255
    --------------------------------------------*/


    // include the library code:
    #include <avr/wdt.h>

    //Variable
    int LEDRouge = 13;
    int LEDVert = 12;
    int LEDJaune = 11;
    int received; //reception RF/PC
    void Jeux();
    const int threshold= 400;
    const int sensorPin0= 0;
    const int sensorPin1= 1;
    const int sensorPin2= 2;
    const int sensorPin3= 3;
    const int sensorPin4= 4;
    const int sensorPin5= 5;
    const int sensorPin6= 6;
    const int sensorPin7= 7;

    //Variable pour l'état actuel du bouton poussoir
    int buttonStateC7 = 0;        
    int lastButtonStateC7 = 0;    
    int buttonStateC8 = 0;        
    int lastButtonStateC8 = 0;    
    int buttonStateC9 = 0;        
    int lastButtonStateC9 = 0;
    int buttonStateC10 = 0;        
    int lastButtonStateC10 = 0;
    int buttonStateC11 = 0;        
    int lastButtonStateC11 = 0;
    int buttonStateC12 = 0;        
    int lastButtonStateC12 = 0;

    void setup() {
     
      pinMode(LEDRouge, OUTPUT);
      pinMode(LEDVert, OUTPUT);
      pinMode(LEDJaune, OUTPUT);
     
      Serial.begin(9600);
    } // fin setup

    void loop() {
          
         digitalWrite(LEDRouge, HIGH);
         digitalWrite(LEDVert, LOW);
         digitalWrite(LEDJaune, LOW);
      
      while(1) {
         if (Serial.available()>0) {          // Si des données sont disponibles
        received = Serial.read();          // On les récupère
        if(received == 'S') {Jeux();}
        
         }
       } // fin while    
    }  //fin loop
    //----------------------------------------------------------------------------------------------------------------
    void Jeux() {
      
         digitalWrite(LEDRouge, LOW);
         digitalWrite(LEDVert, HIGH);
         digitalWrite(LEDJaune, LOW);
        
     while(1) {    
      
      if (Serial.available()>0) {          // Si des données sont disponibles
        received = Serial.read();          // On les récupère
        if(received == 'F') {loop(); }
      }
            int val0= analogRead(sensorPin0); // Lecture boutons

    //Cibles 7
             if(val0 >= threshold) // Cible pin 0
               {buttonStateC7=1;}
               else { buttonStateC7=0;}
            if (buttonStateC7 != lastButtonStateC7)
              {
           if ( buttonStateC7 == 1)
              {Serial.println('G');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC7 = buttonStateC7;
              }
      
             int val1= analogRead(sensorPin1);
     
    //Cible 8        
             if(val1 >= threshold) // Cible pin 1
               {buttonStateC8=1;}
               else { buttonStateC8=0;}
            if (buttonStateC8 != lastButtonStateC8)
              {
           if ( buttonStateC8 == 1)
              {Serial.println('H');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC8 = buttonStateC8;
              }
              
            int val2= analogRead(sensorPin2);  

    //Cible 9          
             if(val2 >= threshold) // Cibles pin 2
               {buttonStateC9=1;}
               else { buttonStateC9=0;}
            if (buttonStateC9 != lastButtonStateC9)
              {
           if ( buttonStateC9 == 1)
              {Serial.println('I');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC9 = buttonStateC9;
              }
              
            int val3= analogRead(sensorPin3);

    //Cible 10
                       if(val3 >= threshold) // Cible pin 3
               {buttonStateC10=1;}
               else { buttonStateC10=0;}
            if (buttonStateC10 != lastButtonStateC10)
              {
           if ( buttonStateC10 == 1)
              {Serial.println('J');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC10 = buttonStateC10;
              }
            
            int val4= analogRead(sensorPin4);

    //Cible 11          
                       if(val4 >= threshold) // Cible pin 4
               {buttonStateC11=1;}
               else { buttonStateC11=0;}
            if (buttonStateC11 != lastButtonStateC11)
              {
           if ( buttonStateC11 == 1)
              {Serial.println('K');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC11 = buttonStateC11;
              }
              
              
             int val5= analogRead(sensorPin5);
     
    //Cible 12          
                       if(val5 >= threshold) // Cible pin 5
               {buttonStateC12=1;}
               else { buttonStateC12=0;}
            if (buttonStateC12 != lastButtonStateC12)
              {
           if ( buttonStateC12 == 1)
              {Serial.println('L');
                digitalWrite(LEDJaune, HIGH);
                delay(500);
                digitalWrite(LEDJaune, LOW); }
              lastButtonStateC12 = buttonStateC12;
              }
     }
    } // fin jeux


    avatar
    naedioba
    vis rouillée
    vis rouillée

    Messages : 58
    Date d'inscription : 07/05/2017
    Age : 48
    Localisation : Saint-Louis, Sénégal

    Re: Tuto ciblerie électronique

    Message par naedioba le Dim 19 Nov - 20:04

    Apparemment, burnout' tu es comme moi. Quand on commence, on ne s'arrête plus.
    Je viens d'ajouter un petit bout de code qui permet d'afficher au début du jeu si le boitier principal est bien connecté au boitier secondaire ou non.
    Pour cela, au démarrage, le boitier secondaire envoie "Y" au boitier primaire (le choix de "Y" est arbitraire).
    Code:

      Serial.println('Y');


    Si le boitier primaire reçoit le "Y" du boitier secondaire, il affiche sur le LCD que la connexion est OK, ensuite on attend l'appui sur un bouton pour passer au Menu du jeu. S'il ne reçoit pas de "Y" du boitier secondaire, il affiche que la connexion a échoué jusqu'à ce que la connexion soit établie.

    Voici le code que je place dans le loop():
    Code:

    void loop() {

    while(1) {//1
        if (Serial.available()>0) {        // Si des données sont disponibles
        received = Serial.read();          // On les récupère
          if(received == 'Y') {            // si "Y" est recu du boitier cibles
     
            // affichage sur l'ecran LCD
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("  Connexion OK  ");
            lcd.setCursor(0, 1);
            lcd.print(" boitier cibles ");
            delay(3000);
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("  Appuyez  sur  ");
            lcd.setCursor(0, 1);
            lcd.print("  un  bouton  ");
     
            //------------- ATTENTE APPUI BOUTON ---------------
            do {
            suivant = false;
            EtatButtonSelect = digitalRead(ButtonSelect);
            EtatButtonHaut = digitalRead(ButtonHaut);
            EtatButtonBas = digitalRead(ButtonBas);
                // si appui sur n'importe quel bouton: Haut ou Bas ou Select...
            if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
            {delay(250);tone(12,500,150);suivant = true;}
            }
            while (suivant != true);
            //-------------------------------------------------
           
            Menu(); // demarre le Menu
           
          }// fin if(received == 'Y')...
      }// fin if (Serial.available()>0)...
          else {
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("Echec  connexion");
          lcd.setCursor(0, 1);
          lcd.print(" boitier cibles ");
          delay(1000);
        } // fin else...
      } // fin while(1)...
    } // fin loop

    J’espère que ça pourra aider.
    All the best !

    naedioba

    lintelo123

    Messages : 5
    Date d'inscription : 16/11/2017

    Re: Tuto ciblerie électronique

    Message par lintelo123 le Dim 19 Nov - 20:20

    Je vous tient au courant de l avancement des cibles ! Merci

    Contenu sponsorisé

    Re: Tuto ciblerie électronique

    Message par Contenu sponsorisé


      La date/heure actuelle est Mar 21 Nov - 5:08