Airsoft Krispies

Bonjour à tous et bienvenue


    Tuto ciblerie électronique

    Partagez
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Mer 13 Sep - 19:52

    je réfléchis à cette idée ...

    Arduino 1 = A
    Arduino 2 = B

    A envoie un bip de requete
    B reçoit ce bip
    B envoie un signal "prêt" vers A
    A reçoit cette confirmation et envoie un "TOP" avec un "tampon-time" en rapport avec son horloge
    B reçoit ce TOP et calcule le temps de transmission par rapport à son horloge.
    B envoie le résultat du calcul en seconde et/ou millisecondes...
    A affiche ce résultat sur son lcd ...

    euuuh oui ... il faut déjà commencer par synchroniser les deux Arduino à la milliseconde prés ... pas évident ... Neutral

    si quelqu'un a une idée moins tordue ... Rolling Eyes
    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 Mer 13 Sep - 19:56

    C'est presque la même idée que j'avais, mais je veux éviter les 2 aller et retour
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Mer 13 Sep - 20:12

    je viens de relire une partie du sujet ... je n'ai pas vu le programme de ton chrono rapide ...
    tu pourrais me le repasser ... siouplait ... Embarassed

    bounce bounce bounce
    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 Mer 13 Sep - 21:39

    Certainement.
    Encore merci Naudnaud et Krispies.

    Voici le programme pour le Menu qui permet de choisir la durée (10sec, 20sec, 30sec).

    Code:


    void MenuChrono() {
      intervalTemps = 0; // initialisation de intervalTemps

    while(1) {

    if(digitalRead(ButtonHaut) == HIGH && digitalRead(ButtonBas) == HIGH) //Appui sur boutons Haut et Bas pour forcer l'arret
         {tone(12, 800, 50);
          Menu();}  // Retour au Menu Principal

    if(digitalRead(ButtonHaut) == HIGH)
       {tone(12, 800, 50);
        ValMenuChrono++;}
    if(digitalRead(ButtonBas) == HIGH)
       {tone(12, 800, 50);
        ValMenuChrono--;}
    if(ValMenuChrono >=4)
       {ValMenuChrono = 1;}
    if(ValMenuChrono <=0)
       {ValMenuChrono = 3;}

    switch (ValMenuChrono) {
        case 1: // cas 1
           lcd.clear();
           lcd.setCursor(0,0);
           lcd.print("-CHRONO  RAPIDE-");
           lcd.setCursor(0,1);
           lcd.print(" A: 10 secondes ");
           if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                delay(50);
                intervalTemps = interval1; // interval1 = 10sec
                TopDepart();
              }
           delay(DelayBP2);
           break;

        case 2: // cas 2
           lcd.clear();
           lcd.setCursor(0,0);
           lcd.print("-CHRONO  RAPIDE-");
           lcd.setCursor(0,1);
           lcd.print(" B: 20 secondes ");
           if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                intervalTemps = interval2; // interval2 = 20sec
                TopDepart();
              }
           delay(DelayBP);
           break;
          
        case 3: // cas 3
           lcd.clear();
           lcd.setCursor(0,0);
           lcd.print("-CHRONO  RAPIDE-");
           lcd.setCursor(0,1);
           lcd.print(" C: 30 secondes ");
           if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                intervalTemps = interval3; // interval2 = 30sec
                TopDepart();
              }
           delay(DelayBP);
           break;
      } // fin Switch
     } // fin while
    } // fin MenuChrono

    Et voici le programme en tant que tel
    Code:

    void ChronoRapide () {
       time_since_last_reset = millis();
      while((millis()- time_since_last_reset) < intervalTemps){ // tant que la duree du jeu est inferieure a la duree choisie
        ChronoRapideGame();
      }
          Menu(); // Retour au Menu
    }
    //-----------------------------------------------------
    void ChronoRapideGame() {
      
    // Affichage sur LCD  
       lcd.clear();
       tone(12, 1000, 500);  
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Points:");
       lcd.setCursor(9,0);
       lcd.print(Point);
       lcd.setCursor(0,1);
       lcd.print("OK pour  Arreter");
      
       TempsInit = (millis());  // initialisation compteur temps

      while(1) {    
        hitfactor = 0;
     if (digitalRead(ButtonSelect) == HIGH)  // Appui sur bouton Haut pour forcer l'arret de la partie en cours
        {(millis()- time_since_last_reset) >= intervalTemps; // si la duree du jeu atteint la duree choisie
        Serial.println('F'); // on envoie le signal 'F' au boitier principal
        finChronoRapideGame(); }
        
     if (Serial.available()>0) {
        received = Serial.read();

    // Enregistrement des points selon la cible touchee
     //Cibles 1
             if(received == 'A')
               {Point = (Point + Cibles1);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone1++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
     //Cible 2        
             if(received == 'B')
               {Point = (Point + Cibles2);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone2++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 3          
             if(received == 'C')
               {Point = (Point + Cibles3);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone3++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 4
             if(received == 'D')
               {Point = (Point + Cibles4);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone4++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 5          
             if(received == 'E')
               {Point = (Point + Cibles5);
               tone(12, 1000, 500);
                NbtiresReel++;
                Zone5++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }          
    //Cible  6        
             if(received == 'F')
               {Point = (Point + Cibles6);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone6++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }          
        }
          if ((millis()- time_since_last_reset) >= intervalTemps)
         { Serial.println('F');
           finChronoRapideGame(); }  
      }
    }
    //--------------------------------------------------------------------
    void finChronoRapideGame() {
      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)/intervalTemps;
      
      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();  // 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);
       AffichageZones (); // affichage des differentes cibles touchees

      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========================================================
            // Remise a zero
              
               NbtiresReel = 0;
               intervalTemps = 0;
               time_since_last_reset = 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();  // Retour au Menu Principal
      }
    }
      

    Pour le programme d'affichage des zones touchees
    Code:

    void AffichageZones (){

      lcd.clear();
      
      lcd.setCursor(1,0);
      lcd.print("C1:");
      lcd.setCursor(4,0);
      lcd.print(Zone1);
      
      lcd.setCursor(1,1);
      lcd.print("C2:");
      lcd.setCursor(4,1);
      lcd.print(Zone2);
      
      lcd.setCursor(9,0);
      lcd.print("C3:");
      lcd.setCursor(12,0);
      lcd.print(Zone3);
      
      lcd.setCursor(9,1);
      lcd.print("C4:");
      lcd.setCursor(12,1);
      lcd.print(Zone4);

    //------------- ATTENTE APPUI BOUTON ---------------
      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(5,0);
      lcd.print("C5:");
      lcd.setCursor(8,0);
      lcd.print(Zone5);
     
      lcd.setCursor(5,1);
      lcd.print("C6:");
      lcd.setCursor(8,1);
      lcd.print(Zone6);
    }


    Voici l'ordinogramme

    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Jeu 14 Sep - 8:27

    euuuh ... tout d'abord mercccccciiiiii ...

    mais ... j'ai une erreur à la compil :

    while (suivant != true);

    avec le retour du compilateur :

    exit status 1
    'suivant' was not declared in this scope


    je suis un peu novice en codage, j'apprends tout seul dans mon coin comme la plupart de nous et c'est assez récent ...
    donc si j'ai bien compris :
    il faut faire trois fichiers ? ... ( oui / non ? )

    AffichageZones
    ChronoRapide
    MenuChrono

    et c'est dans le fichier ChronoRapide que ça coince ... Neutral

    je ne suis pas le Steve Jobs de l'Arduino ... snnnniifff ... No
    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 Jeu 14 Sep - 13:05

    Il faut déclarer la variable "suivant" au début du programme comme suit:
    boolean suivant=false;

    Recompile ensuite dis-moi.
    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 Jeu 14 Sep - 13:07

    Dans mes fichiers il n'y a pas les variables parce qu'elles sont dans un autre fichier du programme principal
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Jeu 14 Sep - 13:14

    au début du fichier :

    void ChronoRapide () {
    time_since_last_reset = millis();
    while((millis()- time_since_last_reset) < intervalTemps){ // tant que la duree du jeu est inferieure a la duree choisie
    ChronoRapideGame();
    }
    Menu(); // Retour au Menu
    }
    //-----------------------------------------------------
    void ChronoRapideGame() {

    // Affichage sur LCD
    lcd.clear();
    tone(12, 1000, 500);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Points:");
    lcd.setCursor(9,0);
    lcd.print(Point);
    lcd.setCursor(0,1);
    lcd.print("OK pour Arreter");


    scratch ... je le colle où le : boolean suivant=false;

    je sais ! ... j'suis nul ... snniiifff mais j'l'assume ... et quand je ne sais pas, je demande ... lol!
    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 Jeu 14 Sep - 13:18

    Tu peux aussi déclarer la variable en locale juste après "hitfactor=..."
    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 Jeu 14 Sep - 13:22

    Met le par exemple juste après TempsInit = (millis()); // initialisation compteur temps
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Jeu 14 Sep - 13:26

    bon ... je l'ai collé en début de fichier, juste avant void sur le fichier AffichageZones aussi et ça passe à la compil mais ... nouveau en compilant
    sur le fichier ChronoRapide :

    exit status 1
    'EtatButtonSelect' was not declared in this scope


    'EtatButtonSelect' was not declared on this scope ... en alerte ...


    while (suivant != true);
      AffichageZones (); // affichage des differentes cibles touchees

     do {
     suivant = false;
     EtatButtonSelect = digitalRead(ButtonSelect);
     EtatButtonHaut = digitalRead(ButtonHaut);
     EtatButtonBas = digitalRead(ButtonBas);
     if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas ==


    'je suis vraiment naze ... ou quoi ?... monkey Evil or Very Mad
    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 Jeu 14 Sep - 13:33

    Tu utilise les procédures dans un autre programme ou bien juste les 3 fichiers à part? Comme j'ai ces 3 fichiers font partie d'un ensemble d'autres fichiers dont un programme principal qui contient toutes mes variables
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Jeu 14 Sep - 13:53

    3 fichiers séparés ... d'ou le souci effectivement..
    y aurait il moyen de zipper tous ton programme et de le mettre en téléchargement ?



    bon là je file ... le boulot me cherche partout ... lol!
    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 Jeu 14 Sep - 14:35

    Voila, j'ai tout mis dans un seul fichier nomme "mon_jeu_en_un"qui doit être dans un dossier du même nom.

    Voici le programme complet dans lequel j'ai ajouté la partie principale avec toutes les variables:

    Code:

    #include <SoftwareSerial.h>
    #include <Wire.h>
    #include <LCD.h>
    #include <LiquidCrystal_I2C.h>  // librairie pour écran 4fils
    LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
    #include <avr/wdt.h>
    #include <EEPROM.h>
    int ButtonHaut=3;
    int ButtonBas=4;
    int ButtonSelect=2;
    int Klaxon = 12; 
    int DelayBP = 150; //delais anti rebons boutons
    int DelayBP2 = 200; //delais anti rebons boutons
    int ValMenu = 1;
    int received; //reception RF/PC
    int Poubelle;
    int Nbtires = 0;
    int NbtiresReel = 0;
    unsigned long Point = 0;
    int Cibles1 = 10;
    int Cibles2 = 20;
    int Cibles3 = 30;
    int Cibles4 = 40;
    int Cibles5 = 50;
    int Cibles6 = 60;
    int Zone1 = 0;
    int Zone2 = 0;
    int Zone3 = 0;
    int Zone4 = 0;
    int Zone5 = 0;
    int Zone6 = 0;
    int CibleRandom = 0;
    int Counterseconde = 00;
    int PreCounterseconde = 0;
    unsigned long TempsInit = 0;
    unsigned long TempsReel = 0;
    unsigned long TempsPenal = 0;
    unsigned long TempsSec = 0;
    unsigned long TempsMil = 0;
    unsigned long TempsMin = 0;
    int RegCible = 0;
    void PreSpeed();
    void TopDepart();
    unsigned long hitfactor = 0;
    boolean EtatButtonHaut;
    boolean EtatButtonBas;
    boolean EtatButtonSelect;
    boolean suivant;
    unsigned long time_since_last_reset = 0;
    int interval1 = 10000;
    int interval2 = 20000;
    int interval3 = 30000;
    int intervalTemps = 0;
    int ValMenuChrono = 1;
    unsigned long Score = 0;

    void setup() {

    Cibles1 = EEPROM.read(1);
    Cibles2 = EEPROM.read(2);
    Cibles3 = EEPROM.read(3);
    Cibles4 = EEPROM.read(4);
    Cibles5 = EEPROM.read(5);
    Cibles6 = EEPROM.read(6);

      pinMode(ButtonSelect, INPUT_PULLUP);

      Serial.begin(9600);
      Serial.println('F');
      lcd.begin(16, 2);
      lcd.setCursor(0, 0);
      lcd.print("    CIBLES    ");
      delay(1000);
      lcd.setCursor(0, 1);
      lcd.print("  INTERACTIVES  ");
      delay(2000);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(" Merci Naudnaud ");
      delay(1000);
      lcd.setCursor(0, 1);
      lcd.print(" Merci Krispies");
      delay(2000);
      tone(12, 500, 100);
      delay(100);
      tone(12, 550, 100);
      delay(100);
      tone(12, 600, 100);
      delay(100);
      tone(12, 650, 100);
      delay(100);
      tone(12, 700, 100);
      delay(100);
      tone(12, 750, 100);
      delay(100);
      lcd.clear();
    }
    void loop() {
      MenuChrono();
    }

    //***************************************************************************

     void TopDepart() {
      lcd.clear();
      lcd.setCursor(2,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');
        ChronoRapide (); }
      }
     }
     
    //***************************************************************************

    void MenuChrono() {
      intervalTemps = 0; // initialisation de intervalTemps

    while(1) {

    if(digitalRead(ButtonHaut) == HIGH)
      {tone(12, 800, 50);
        ValMenuChrono++;}
    if(digitalRead(ButtonBas) == HIGH)
      {tone(12, 800, 50);
        ValMenuChrono--;}
    if(ValMenuChrono >=4)
      {ValMenuChrono = 1;}
    if(ValMenuChrono <=0)
      {ValMenuChrono = 3;}

    switch (ValMenuChrono) {
        case 1: // cas 1
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("-CHRONO  RAPIDE-");
          lcd.setCursor(0,1);
          lcd.print(" A: 10 secondes ");
          if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                delay(50);
                intervalTemps = interval1; // interval1 = 10sec
                TopDepart();
              }
          delay(DelayBP2);
          break;

        case 2: // cas 2
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("-CHRONO  RAPIDE-");
          lcd.setCursor(0,1);
          lcd.print(" B: 20 secondes ");
          if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                intervalTemps = interval2; // interval2 = 20sec
                TopDepart();
              }
          delay(DelayBP);
          break;
         
        case 3: // cas 3
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("-CHRONO  RAPIDE-");
          lcd.setCursor(0,1);
          lcd.print(" C: 30 secondes ");
          if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                intervalTemps = interval3; // interval2 = 30sec
                TopDepart();
              }
          delay(DelayBP);
          break;
      } // fin Switch
     } // fin while
    } // fin MenuChrono

    //***************************************************************************

    void AffichageZones (){

      lcd.clear();
     
      lcd.setCursor(1,0);
      lcd.print("C1:");
      lcd.setCursor(4,0);
      lcd.print(Zone1);
     
      lcd.setCursor(1,1);
      lcd.print("C2:");
      lcd.setCursor(4,1);
      lcd.print(Zone2);
     
      lcd.setCursor(9,0);
      lcd.print("C3:");
      lcd.setCursor(12,0);
      lcd.print(Zone3);
     
      lcd.setCursor(9,1);
      lcd.print("C4:");
      lcd.setCursor(12,1);
      lcd.print(Zone4);

    //------------- ATTENTE APPUI BOUTON ---------------
      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(5,0);
      lcd.print("C5:");
      lcd.setCursor(8,0);
      lcd.print(Zone5);
     
      lcd.setCursor(5,1);
      lcd.print("C6:");
      lcd.setCursor(8,1);
      lcd.print(Zone6);
    }

    //***************************************************************************

    void ChronoRapide () {
      time_since_last_reset = millis();
      while((millis()- time_since_last_reset) < intervalTemps){ // tant que la duree du jeu est inferieure a la duree choisie
        ChronoRapideGame();
      }
          MenuChrono(); // Retour au Menu
    }

    //****************************************************

    void ChronoRapideGame() {
     
    // Affichage sur LCD 
      lcd.clear();
      tone(12, 1000, 500); 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Points:");
      lcd.setCursor(9,0);
      lcd.print(Point);
      lcd.setCursor(0,1);
      lcd.print("OK pour  Arreter");
     
      TempsInit = (millis());  // initialisation compteur temps

      while(1) {   
        hitfactor = 0;
     if (digitalRead(ButtonSelect) == HIGH)  // Appui sur bouton Haut pour forcer l'arret de la partie en cours
        {(millis()- time_since_last_reset) >= intervalTemps; // si la duree du jeu atteint la duree choisie
        Serial.println('Z'); // on envoie le signal 'F' au boitier principal
        finChronoRapideGame(); }
       
     if (Serial.available()>0) {
        received = Serial.read();

    // Enregistrement des points selon la cible touchee
     //Cibles 1
            if(received == 'A')
              {Point = (Point + Cibles1);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone1++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
     //Cible 2       
            if(received == 'B')
              {Point = (Point + Cibles2);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone2++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 3         
            if(received == 'C')
              {Point = (Point + Cibles3);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone3++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 4
            if(received == 'D')
              {Point = (Point + Cibles4);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone4++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 5         
            if(received == 'E')
              {Point = (Point + Cibles5);
              tone(12, 1000, 500);
                NbtiresReel++;
                Zone5++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }         
    //Cible  6       
            if(received == 'F')
              {Point = (Point + Cibles6);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone6++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }         
        }
          if ((millis()- time_since_last_reset) >= intervalTemps)
        { Serial.println('Z');
          finChronoRapideGame(); } 
      }
    }

    //****************************************************************

    void finChronoRapideGame() {
      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)/intervalTemps;
     
      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();  // 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);
      AffichageZones (); // affichage des differentes cibles touchees

      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========================================================
            // Remise a zero
             
              NbtiresReel = 0;
              intervalTemps = 0;
              time_since_last_reset = 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;
              MenuChrono();  // Retour au Menu Principal
      }
    }
     


    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 Jeu 14 Sep - 14:45

    Toutefois, il est plus pratique d'avoir les différentes procédures dans des fichiers différents au cas où on voudrait corriger l'une des procédures séparément.
    Ici j'ai mis ca dans 4 fichiers:

    mon_jeu (c'est le programme principal)
    AffichageZones
    ChronoRapide
    MenuChrono


    Le fichier nommé "mon_jeu" est le programme principal, donc tous les 4 fichiers doivent être dans un même dossier nommé "mon_jeu" (NB: Le dossier porte toujours le nom du programme principal).

    Voici les programmes:

    pour mon_jeu (programme principal)

    Code:

    #include <SoftwareSerial.h>
    #include <Wire.h>
    #include <LCD.h>
    #include <LiquidCrystal_I2C.h>  // librairie pour écran 4fils
    LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
    #include <avr/wdt.h>
    #include <EEPROM.h>
    int ButtonHaut=3;
    int ButtonBas=4;
    int ButtonSelect=2;
    int Klaxon = 12; 
    int DelayBP = 150; //delais anti rebons boutons
    int DelayBP2 = 200; //delais anti rebons boutons
    int ValMenu = 1;
    int received; //reception RF/PC
    int Poubelle;
    int Nbtires = 0;
    int NbtiresReel = 0;
    unsigned long Point = 0;
    int Cibles1 = 10;
    int Cibles2 = 20;
    int Cibles3 = 30;
    int Cibles4 = 40;
    int Cibles5 = 50;
    int Cibles6 = 60;
    int Zone1 = 0;
    int Zone2 = 0;
    int Zone3 = 0;
    int Zone4 = 0;
    int Zone5 = 0;
    int Zone6 = 0;
    int CibleRandom = 0;
    int Counterseconde = 00;
    int PreCounterseconde = 0;
    unsigned long TempsInit = 0;
    unsigned long TempsReel = 0;
    unsigned long TempsPenal = 0;
    unsigned long TempsSec = 0;
    unsigned long TempsMil = 0;
    unsigned long TempsMin = 0;
    int RegCible = 0;
    //void admin();
    //void TestCible();
    //void PreIPSC();
    //void RegPoint();
    //void PreRandom();
    //void Menu();
    //void finCibleChoix();
    //void ScrollingArrows ();
    void PreSpeed();
    void TopDepart();
    unsigned long hitfactor = 0;
    boolean EtatButtonHaut;
    boolean EtatButtonBas;
    boolean EtatButtonSelect;
    boolean suivant;
    unsigned long time_since_last_reset = 0;
    int interval1 = 10000;
    int interval2 = 20000;
    int interval3 = 30000;
    int intervalTemps = 0;
    int ValMenuChrono = 1;
    //int ValMenuCibleChoix = 1;
    //int PenaliteCibleChoix;
    //unsigned long PointPenaliteCibleChoix = 0;
    unsigned long Score = 0;
    //int CibleChoix;

    void setup() {

    Cibles1 = EEPROM.read(1);
    Cibles2 = EEPROM.read(2);
    Cibles3 = EEPROM.read(3);
    Cibles4 = EEPROM.read(4);
    Cibles5 = EEPROM.read(5);
    Cibles6 = EEPROM.read(6);
    //PenaliteCibleChoix = EEPROM.read(7);


      pinMode(ButtonSelect, INPUT_PULLUP);

      Serial.begin(9600);
      Serial.println('F');
      lcd.begin(16, 2);
      lcd.setCursor(0, 0);
      lcd.print("    CIBLES    ");
      delay(1000);
      lcd.setCursor(0, 1);
      lcd.print("  INTERACTIVES  ");
      delay(2000);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(" Merci Naudnaud ");
      delay(1000);
      lcd.setCursor(0, 1);
      lcd.print(" Merci Krispies");
      delay(2000);
      tone(12, 500, 100);
      delay(100);
      tone(12, 550, 100);
      delay(100);
      tone(12, 600, 100);
      delay(100);
      tone(12, 650, 100);
      delay(100);
      tone(12, 700, 100);
      delay(100);
      tone(12, 750, 100);
      delay(100);
      lcd.clear();
    } // fin setup
    //*********************************************
    void loop() {
      MenuChrono();
    } // fon loop

    //*********************************************
     void TopDepart() {
      lcd.clear();
      lcd.setCursor(2,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');
        ChronoRapide (); }
      }
     }


    ********************************************************************
    pour AffichageZones

    Code:

    void AffichageZones (){

      lcd.clear();
     
      lcd.setCursor(1,0);
      lcd.print("C1:");
      lcd.setCursor(4,0);
      lcd.print(Zone1);
     
      lcd.setCursor(1,1);
      lcd.print("C2:");
      lcd.setCursor(4,1);
      lcd.print(Zone2);
     
      lcd.setCursor(9,0);
      lcd.print("C3:");
      lcd.setCursor(12,0);
      lcd.print(Zone3);
     
      lcd.setCursor(9,1);
      lcd.print("C4:");
      lcd.setCursor(12,1);
      lcd.print(Zone4);

    //------------- ATTENTE APPUI BOUTON ---------------
      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(5,0);
      lcd.print("C5:");
      lcd.setCursor(8,0);
      lcd.print(Zone5);
     
      lcd.setCursor(5,1);
      lcd.print("C6:");
      lcd.setCursor(8,1);
      lcd.print(Zone6);
    }


    ********************************************************************
    pour ChronoRapide

    Code:

    void ChronoRapide () {
      time_since_last_reset = millis();
      while((millis()- time_since_last_reset) < intervalTemps){ // tant que la duree du jeu est inferieure a la duree choisie
        ChronoRapideGame();
      }
          MenuChrono(); // Retour au Menu
    }
    //-----------------------------------------------------
    void ChronoRapideGame() {
     
    // Affichage sur LCD 
      lcd.clear();
      tone(12, 1000, 500); 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Points:");
      lcd.setCursor(9,0);
      lcd.print(Point);
      lcd.setCursor(0,1);
      lcd.print("OK pour  Arreter");
     
      TempsInit = (millis());  // initialisation compteur temps

      while(1) {   
        hitfactor = 0;
     if (digitalRead(ButtonSelect) == HIGH)  // Appui sur bouton Haut pour forcer l'arret de la partie en cours
        {(millis()- time_since_last_reset) >= intervalTemps; // si la duree du jeu atteint la duree choisie
        Serial.println('Z'); // on envoie le signal 'F' au boitier principal
        finChronoRapideGame(); }
       
     if (Serial.available()>0) {
        received = Serial.read();

    // Enregistrement des points selon la cible touchee
     //Cibles 1
            if(received == 'A')
              {Point = (Point + Cibles1);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone1++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
     //Cible 2       
            if(received == 'B')
              {Point = (Point + Cibles2);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone2++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 3         
            if(received == 'C')
              {Point = (Point + Cibles3);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone3++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 4
            if(received == 'D')
              {Point = (Point + Cibles4);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone4++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }
    //Cible 5         
            if(received == 'E')
              {Point = (Point + Cibles5);
              tone(12, 1000, 500);
                NbtiresReel++;
                Zone5++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }         
    //Cible  6       
            if(received == 'F')
              {Point = (Point + Cibles6);
                tone(12, 1000, 500);
                NbtiresReel++;
                Zone6++;
                lcd.setCursor(9,0);
                lcd.print(Point);            }         
        }
          if ((millis()- time_since_last_reset) >= intervalTemps)
        { Serial.println('Z');
          finChronoRapideGame(); } 
      }
    }
    //--------------------------------------------------------------------
    void finChronoRapideGame() {
      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)/intervalTemps;
     
      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();  // 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);
      AffichageZones (); // affichage des differentes cibles touchees

      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========================================================
            // Remise a zero
             
              NbtiresReel = 0;
              intervalTemps = 0;
              time_since_last_reset = 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;
              MenuChrono();  // Retour au Menu Principal
      }
    }
     

    ********************************************************************
    pour MenuChrono

    Code:


    void MenuChrono() {
      intervalTemps = 0; // initialisation de intervalTemps

    while(1) {

    //if(digitalRead(ButtonHaut) == HIGH && digitalRead(ButtonBas) == HIGH) //Appui sur boutons Haut et Bas pour forcer l'arret
    //    {tone(12, 800, 50);
    //      MenuChrono();}  // Retour au Menu Principal

    if(digitalRead(ButtonHaut) == HIGH)
      {tone(12, 800, 50);
        ValMenuChrono++;}
    if(digitalRead(ButtonBas) == HIGH)
      {tone(12, 800, 50);
        ValMenuChrono--;}
    if(ValMenuChrono >=4)
      {ValMenuChrono = 1;}
    if(ValMenuChrono <=0)
      {ValMenuChrono = 3;}

    switch (ValMenuChrono) {
        case 1: // cas 1
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("-CHRONO  RAPIDE-");
          lcd.setCursor(0,1);
          lcd.print(" A: 10 secondes ");
          if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                delay(50);
                intervalTemps = interval1; // interval1 = 10sec
                TopDepart();
              }
          delay(DelayBP2);
          break;

        case 2: // cas 2
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("-CHRONO  RAPIDE-");
          lcd.setCursor(0,1);
          lcd.print(" B: 20 secondes ");
          if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                intervalTemps = interval2; // interval2 = 20sec
                TopDepart();
              }
          delay(DelayBP);
          break;
         
        case 3: // cas 3
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("-CHRONO  RAPIDE-");
          lcd.setCursor(0,1);
          lcd.print(" C: 30 secondes ");
          if(digitalRead(ButtonSelect) == HIGH)
              {tone(12, 800, 50);
                intervalTemps = interval3; // interval2 = 30sec
                TopDepart();
              }
          delay(DelayBP);
          break;
      } // fin Switch
     } // fin while
    } // fin MenuChrono

    ********************************************************************

    Amuse-toi bien ! lol! lol!
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Ven 15 Sep - 8:11

    ... je me suis "amusé" hier soir pendant quelques instants ... Basketball

    pas mal du tout ton bidule...
    mais juste un petit truc ( mouais bon... j'vais finir par passer pour un gros nazebroc Embarassed  )

    la seconde ligne, qui affiche les tempos... clignote, enfin "vibre" ... pas trouvé pourquoi mais je vais y regarder un peu mieux dès que j'ai cinq minutes ...

    et je vais finir mes boitiers ce week end pour les faire tout-beaux...

    sacré montage et programmes les gars ... merci à tous ceux qui ont mis leur grain de sel dans l'histoire ... Top ! ...
    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 Sam 16 Sep - 16:08

    Regarde si tu as bien réglé le contraste de ton LCD ou si une erreur ne s'est pas glissée. Ça marche à merveille pour moi.
    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 17 Sep - 22:05

    Bonjour a tous,

    Je vous fais ici une petite présentation vidéo de la ciblerie interactive de Naudnaud et Krispies avec quelques petites modifications. Je mettrai après une deuxieme vidéo pour la démonstration.

    Enjoy !!!



    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 17 Sep - 23:27

    Bonjour à tous,
    Comme promis, voici la vidéo de la démonstration pour la ciblerie interactive.



    Amusez-vous bien !!!
    avatar
    Naudnaud
    ecrou argent
    ecrou argent

    Messages : 404
    Date d'inscription : 30/08/2011
    Age : 27
    Localisation : Metabief

    Re: Tuto ciblerie électronique

    Message par Naudnaud le Lun 18 Sep - 8:41

    Bonne vidéo !!!

    Et ravis que le système de plaise !! ça fait plaisir de voir des retour sur le boulot fait pour le tuto !!

    A quand une troisième vidéo en fonctionnement ? (avec des réplique :p)
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Lun 18 Sep - 9:59

    Superbe video ! ... merci de nous faire baver ... enfin ME faire baver ...

    tu as pas mal "adapté" avec plein de "petits" trucs en plus ... Sympatoche tout ça ...

    pour mon souci de "clignotement' ou "vibration" du lcd dans le menu -CHRONO RAPIDE-, A: 10 SECONDES, en modifiant la valeur de DelayBP2, la "fréquence" change...
    alors que tous les autres menus sont stables et lcd ok ...
    Bizarre ...

    beau boulot et montage ... Cool
    avatar
    Krispies
    Admin

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

    Re: Tuto ciblerie électronique

    Message par Krispies le Lun 18 Sep - 11:07

    J'ai qu'une chose à dire bravo et merci pour le partage!! Wink

    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 Mar 19 Sep - 19:03

    Bonjour à tous,

    J’étais en train d’étudier la possibilité d’utiliser un seul bouton pour remplacer les boutons Haut et Bas pour le réglage des points de cibles et le nombre de tirs. Donc j’ai créé une petite fonction « EtatIncrementation » qui me permet de vérifier l’état de l’incrémentation (incrémentation ou décrémentation ?).
    Voici le code :

    Code:

    void EtatIncrementation() {

      EtatButtonHaut = digitalRead(ButtonHaut);           
       
      if (EtatButtonHaut == HIGH && dernier_EtatButtonHaut == LOW){     
      debut_appui = millis();  // declenchement du compteur temps quand on appuit sur le bouton Haut                                 
                                           
      }
      if (EtatButtonHaut == HIGH &&  dernier_EtatButtonHaut == HIGH) // etat bouton
      {   
        if ((millis() - debut_appui) >= temps_defini) // si appui long >=2 secondes
        {                                           
            incrementation = false;                                                         
       
            if(EtatButtonHaut == HIGH && incrementation == false && dernier_EtatButtonHaut == HIGH)
            {
              incrementation = true;
            }
          } // fin si appui long >=2 secondes

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

        if ((millis() - debut_appui) >= temps_defini2) // si appui long >=3 secondes
        {                                           
            incrementation = true;                                                         
       
            if(EtatButtonHaut == HIGH && incrementation == true && dernier_EtatButtonHaut == HIGH)
            {
              incrementation = false;
            }
          } // fin si appui long >=3 secondes
         
        } // fin etat bouton
       
      dernier_EtatButtonHaut = EtatButtonHaut; // Mise a jour de dernier_EtatButtonHaut
     
    } // fin void EtatIncrementation


    Pour le fonctionnement, quand je fais un appui long sur le Bouton Haut pendant au moins 2 secondes (variable temps_defini1) ou au moins 3 secondes (variable temps_defini2), on est en mode incrémentions ou décrémentation selon le dernier état de « EtatIncrementation ». Je cherche un moyen de rende ce code beaucoup plus simple.

    Voici un exemple pour le réglage du nombre de tirs du SpeedGame :

    Code:

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

      while(1)  {

    // Voici l'ancien code
    //        if(digitalRead(ButtonHaut) == HIGH)
    //          {tone(12, 800, 50);
    //            Nbtires++;
    //            delay(DelayBP);}
    //      if(digitalRead(ButtonBas) == HIGH)
    //          {tone(12, 800, 50);
    //            Nbtires --;
    //            delay(DelayBP);}
    // fin ancien code

    //+++++++++++ Debut modifications ++++++++++++++++++++++++++++++++++++++++++++

          EtatIncrementation(); // verification de l'etat de l'incrementation
         
          if(EtatButtonHaut == HIGH && incrementation == true)
              {tone(12, 800, 50);
                Nbtires++;
                delay(DelayBP);} // on incremente de +1
         
          if(EtatButtonHaut == HIGH && incrementation == false)
                {tone(12, 800, 50);
                Nbtires--;
                delay(DelayBP);}  // on decremente de -1

    //+++++++++++ fin modifications ++++++++++++++++++++++++++++++++++++++++++++++

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

      if (Nbtires  < 1 ) {Nbtires  = 1;}

      if (Nbtires  >= 100 ) {
      lcd.setCursor(5,1);
      lcd.print(Nbtires , DEC); }
     
      if (Nbtires  >= 10 && Nbtires  <= 99 ) {
      lcd.setCursor(5,1);
      lcd.print("0");
      lcd.setCursor(6,1);
      lcd.print(Nbtires , DEC); }

      if (Nbtires  < 10 ) {
      lcd.setCursor(5,1);
      lcd.print("00");
      lcd.setCursor(7,1);
      lcd.print(Nbtires , DEC); }
      } // fin while
     } // fin PreSpeed


    Et voici un exemple pour le réglage des points des cibles :

    Code:


    void ReglagePoint() {
     
     Reset:

     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Reglages  Points");
     delay(1000);

    //Reglage Cible 1
        if (RegCible == 0 ) {   
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print(" Points Cible 1 ");
                lcd.setCursor(7,1);
                lcd.print(Cibles1);
      while(1)  {     
    //+++++++++++ Debut modifications ++++++++++++++++++++++++++++++++++++++++++++

          EtatIncrementation(); // verification de l'etat de l'incrementation
         
          if(EtatButtonHaut == HIGH && incrementation == true)
          {Cibles1 = (Cibles1 + 5);} // on incremente de +5
         
          if(EtatButtonHaut == HIGH && incrementation == false)
          {Cibles1 = (Cibles1 - 5);} // on decremente de -5

          lcd.setCursor(7,1);
          lcd.print(Cibles1);
          delay(DelayBP);

    //+++++++++++ fin modifications ++++++++++++++++++++++++++++++++++++++++++++++
             
        if (Cibles1 < 00) {Cibles1 = 00;
              lcd.setCursor(7,1);
              lcd.print(Cibles1); } 
          if (Cibles1 > 200) {Cibles1 = 200;
              lcd.setCursor(7,1);
              lcd.print(Cibles1); } 

     if (Cibles1  <= 0 ) {
      lcd.setCursor(7,1);
      lcd.print(Cibles1 , DEC);
      lcd.setCursor(8,1);
      lcd.print("  ");
      lcd.setCursor(6,1);
      lcd.print(" ");  }   

     if (Cibles1  >= 100 ) {
      lcd.setCursor(7,1);
      lcd.print(Cibles1 , DEC);
      lcd.setCursor(10,1);
      lcd.print(" ");
      lcd.setCursor(6,1);
      lcd.print(" ");  }

     if (Cibles1 > 1 && Cibles1 < 100 ) {
      lcd.setCursor(7,1);
      lcd.print(Cibles1 , DEC);
      lcd.setCursor(9,1);
      lcd.print(" ");
      lcd.setCursor(6,1);
      lcd.print(" "); }
             
      if(digitalRead(ButtonSelect) == HIGH)
      {tone(12, 800, 50);
        EEPROM.write(1, Cibles1); // memorisation de la valeur de cibles1
        RegCible++;
        goto Reset;}
       
      } // fin while(1)   
    } // fin if(RegCible == 0)


    C'est peut être plus pratique d'avoir un bouton Haut et un bouton Bas, mais ça peut toujours rendre service.

    Merci d'avance !
    avatar
    naedioba
    vis rouillée
    vis rouillée

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

    ciblerie avec carte ou badge RFID

    Message par naedioba le Dim 15 Oct - 17:23

    Bonjour a tous,
    Je partage ma toute dernière vidéo ici:
    avatar
    neteraser
    vis rouillée
    vis rouillée

    Messages : 22
    Date d'inscription : 27/08/2017
    Age : 61
    Localisation : Aix en provence

    Re: Tuto ciblerie électronique

    Message par neteraser le Jeu 26 Oct - 13:48

    lol ! ...

    on ne l'arrete plus ... Laughing Laughing Laughing

    mais c'est bounce  ton truc ...

    Contenu sponsorisé

    Re: Tuto ciblerie électronique

    Message par Contenu sponsorisé


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