Airsoft Krispies

Bonjour à tous et bienvenue


    Grenade flash a led

    Partagez
    avatar
    Ghost70
    vis inox
    vis inox

    Messages : 157
    Date d'inscription : 16/06/2012
    Age : 24
    Localisation : Haute Saône

    Grenade flash a led

    Message par Ghost70 le Lun 13 Juin - 11:27

    Bonjour a tous j'aurais besoin de votre aide =D

    voila je viens de créer une bout de programme pour faire une grenade flash a LED mais Je n'arrive pas a temporisé le temps de déclenchement ainsi que la durée du flash
    je souhaiterai mettre un déclenchement de 3 secondes et la durée du flash de 10 seconde , savez vous comment je peut réaliser ceci ?

    Voici l'image du "prototype" :



    Merci d'avance pour votre aide

    Voici mon programme a l'heure actuel :

    // Réalisation d'une flashbang à LED
    // Déclaration des variables

    const int led_1=10; //Variable pour le pin qui commande les 2 ranger de led
    const int led_2=11; // Variable pour le pin qui commande la 3eme ranger de led
    const int inter=3; // Variable pour le pin qui commande le buzzer
    int etatBouton;
    const int tps_attente=40; // Temps d'attente de 20ms


    // Initialisation

    void setup ()
     {
       pinMode (led_1,OUTPUT); // Les 2 ranger de led sont en sortie
       pinMode (led_2,OUTPUT); // La 3eme ranger de led est en sortie
       pinMode (inter,INPUT); // L'inter est en sortie
       etatBouton=HIGH;

      }
     
    //Boucle

    void loop ()

         
          {
            etatBouton = digitalRead (inter); //Lecture de l'entrée de l'inter et stockage du résultat dans test
           
             if(etatBouton==LOW) //Si etaBbouton est à l'état bas
             
             
             
            {
             
              digitalWrite (led_1,HIGH); // Allumer les leds
              delay (tps_attente); // Attendre 40ms
              digitalWrite (led_1,LOW); // Eteindre les led
              delay (tps_attente); // Attendre 40ms
              delay(20);
              digitalWrite (led_2,HIGH); //Allumer la led
              delay (tps_attente); //Attendre 40ms
              digitalWrite (led_2,LOW); // Eteindre les led
              delay (tps_attente); // Attendre 40ms
           }
           
           else // Sinon
           {
             digitalWrite (led_1,LOW);
             digitalWrite (led_2,LOW);
           }
           }
    avatar
    Naudnaud
    ecrou argent
    ecrou argent

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

    Re: Grenade flash a led

    Message par Naudnaud le Lun 13 Juin - 16:45

    Tu peut utiliser des while(1) pour bloquer le programme dedans.
    Sa permet de gérer les étapes une par une.
    avatar
    Ghost70
    vis inox
    vis inox

    Messages : 157
    Date d'inscription : 16/06/2012
    Age : 24
    Localisation : Haute Saône

    Re: Grenade flash a led

    Message par Ghost70 le Mar 14 Juin - 8:52

    Comme ceci ? :

    void loop()
    if(etatBouton==LOW) //Si etaBbouton est à l'état bas
    while (digitalRead(inter)==1)


    {

    digitalWrite (led_1,HIGH); // Allumer les leds
    delay (tps_attente); // Attendre 40ms
    digitalWrite (led_1,LOW); // Eteindre les led
    delay (tps_attente); // Attendre 40ms
    delay(20);
    digitalWrite (led_2,HIGH); //Allumer la led
    delay (tps_attente); //Attendre 40ms
    digitalWrite (led_2,LOW); // Eteindre les led
    delay (tps_attente); // Attendre 40ms
    }
    avatar
    droopaille
    boulon platine
    boulon platine

    Messages : 2510
    Date d'inscription : 03/04/2011
    Age : 42
    Localisation : Vitré (35)

    Re: Grenade flash a led

    Message par droopaille le Mar 14 Juin - 19:07

    J'ai pas lu en détail mais je pense que naud veut plutot dire

    while(1){
    ...étapes...;
    if (conditon, break);
    }

    tu boucles en permanence et lorsqu'une condition choisie est remplie, le break te permet de sortir de la boucle et de passer à la suite.


    _________________
    Toutes mes créations
    avatar
    Ghost70
    vis inox
    vis inox

    Messages : 157
    Date d'inscription : 16/06/2012
    Age : 24
    Localisation : Haute Saône

    Re: Grenade flash a led

    Message par Ghost70 le Mer 15 Juin - 8:54

    ah d'accord ! =D
    mais lorsque que je met un delay de 3s dans mon setup les led clignote mais a intervalle de 3s pas aprés 3s la aussi je doit enlever le delay et mettre un while(1) ?

    dans le " if( condition, break); je peut mettre ceci ceci pour la tempo des 10 secondes ? :

    "if (delay=10000,break);
    avatar
    Naudnaud
    ecrou argent
    ecrou argent

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

    Re: Grenade flash a led

    Message par Naudnaud le Mer 15 Juin - 9:14

    Coucou

    Guette avec cette librairies, elle devrait résoudre tes soucis :p

    http://forum.arduino.cc/index.php?topic=375533.0
    avatar
    droopaille
    boulon platine
    boulon platine

    Messages : 2510
    Date d'inscription : 03/04/2011
    Age : 42
    Localisation : Vitré (35)

    Re: Grenade flash a led

    Message par droopaille le Mer 15 Juin - 13:37

    j'ai pas regardé le minuteur de nonon mais la fonction delay stoppe le programme tant qu'elle n'est pas finie.
    Si tu mets delay 10000 (soit 10sec) il ne se passe rien d'autre tant qu'il a pas fini de compter.

    en gros tu fais un truc comme ça :

    si condition (bouton activé par exemple) alors
    while(1)
    led allumée
    delay 40
    led éteinte
    delay 40
    if (condition de sortie, break)
    end while

    il va rester dans la boucle while tant que la condition de sortie n'est pas valide. Si tu veux faire un un nbre de fois le cycle, tu passes par une boucle for.
    Ta tempo peux être définie dans le setup, tu peux aussi mettre des temps différent entre allumé et éteint pour un effet flash.
    Attention toutefois si tu actives ta condition trop peu de temps il est possible qu'il ne la voit pas car il sera occupé à compter (plus les clignotements sont lents et plus ce risque est grand).








    PS : tu as fait une erreur entre delay 40 et commentaire 20ms



    _________________
    Toutes mes créations
    avatar
    Ghost70
    vis inox
    vis inox

    Messages : 157
    Date d'inscription : 16/06/2012
    Age : 24
    Localisation : Haute Saône

    Re: Grenade flash a led

    Message par Ghost70 le Jeu 16 Juin - 0:20

    Merci pour votre aide =) !!
    En effet droopaille au début j'avait mis 20ms mais sa n'allait pas j'ai oublier de l'enlever =)

    Mon programme je pourai le televerser sur un ATtiny85 sans probléme il n'y aura pas de souci de non compatibilité avec le code arduino ?
    avatar
    Lea'gle

    Messages : 13
    Date d'inscription : 17/04/2016
    Age : 20
    Localisation : Valais, Suisse

    Re: Grenade flash a led

    Message par Lea'gle le Dim 7 Aoû - 13:48

    Salut, des avancées avec ta petite bête ?

    Je ne travaille malheureusement pas avec les Arduinos, donc je ne peux répondre à ta dernière question.
    Pour le code, c'est pareil au niveau oú je ne suis pas sûr de la manière de coder pour cette plateforme, et donc ne pourrait aider plus que tant (pour optimiser la chose avec des timers, mettre le uC en "veille" pour ne pas trop consommer tant que la grenade n'est pas activée ...).

    Mais voici un code qui pourrait répondre à ta demande première, à voir s'il faudrait juste encore "l'adapter Arduino" (j'ai essayé de reprendre ton code pour fabriquer le mien de la même manière, à voir s'il se compile ou non) :
    Code:

    // Réalisation d'une flashbang à LEDs

    // Déclaration des variables
    const int led_1=10; // Variable pour la pin qui commande les 2 rangées de LEDs
    const int led_2=11; // Variable pour la pin qui commande la 3ème rangée de LEDs
    const int inter=3; // Variable pour la pin qui commande l'interrupteur

    // Modifier ces 3 variables selon la programmation voulue de la grenade
    const int Temps_Entre_Flashs=40; // Temps d'attente entre les flash, en [ms]
    const int Delay_Decl=3000; // Temps avant activation des flash lors du lancement, en [ms]
    const int Temps_Flash=10000; // Temps total des flashs en [ms]

    // Initialisation
    void setup()
     {
       // Rangées de LEDs en sortie
       pinMode(led_1,OUTPUT);
       pinMode(led_2,OUTPUT);
       // Interrupteur en entrée
       pinMode(inter,INPUT);
       // S'assure que les LEDs soient éteintes à l'initialisation
       digitalWrite(led_1,LOW);
       digitalWrite(led_2,LOW);
      }
      
    // Programme principal
    void loop()    
    {
    /*
       Je ne connais pas l'arduino, ne faut-il pas appeler setup() au début du programme pour initialiser la platine ?
       Appeler loop() plutôt main() ? (le programme pourrait ne pas se lancer, comme main() est normalement ce sur quoi se base la compilation pour "trouver le début du programme")
       Voire intégrer des bibliothèques annexes ?
    */

       // Boucle à l'infini dans le programme
       while(1)
       {
          // Détecte l'état du bouton (= LOW quand grenade lancée)
          // Agit si état = LOW
          if(digitalRead(inter)==LOW)
          {
             // Attend avant le début des flashs
             delay(Delay_Decl);
             
             // Réalise autant de flashs que nécessaire pour durer le temps définit en début de programme
                            // C'est un genre d'"astuce" car je ne sais pas comment déclarer les timers avec les Arduinos.
                            //           L'idée est de se dire que l'arduino allume et éteint les LEDs très vite, donc on ne les prend pas en compte.
                            //           Par contre, on sait qu'il y'a des temps entre les flashs, donc on les additionne pour savoir quand on arrive à env. 10[s].)
             for(int i=0;i<Temps_Flash;i+=2*Temps_Entre_Flashs)
             {
                // Check si la grenade n'aurait pas été réarmée avant la fin des flashs
                // Dans tel cas, on arrêterait les flashs
                if(digitalRead(inter)=HIGH)break;
                
                // Allume les LEDs
                digitalWrite(led_1,HIGH);  
                digitalWrite(led_2,HIGH);      
                // Attend le temps définit entre les flashs
                delay(Temps_Entre_Flashs);
                // Eteint les LEDs
                digitalWrite (led_1,LOW);
                digitalWrite (led_2,LOW);      
                // Attend le temps définit entre les flashs
                delay(Temps_Entre_Flashs);
             }

             // Les flashs sont terminés
             // Attend que la grenade soit réarmée
             while(digitalRead(inter)!=HIGH){} // Ne fait rien
          }
          // Si grenade pas "lancée", s'assure que les LEDs soient éteintes
          else
          {
             // Eteint les LEDs
             digitalWrite (led_1,LOW);
             digitalWrite (led_2,LOW);         
          }
       }
    }

    Si il y'a besoin d'explications, d'éventuels comportement bizarres ... fais-le moi savoir, j'essaierai d'y jeter un oeil Wink

    PS : je fais actuellement mon service militaire, donc ce ne sera certainement que le WE pour des réponses de ma part !
    avatar
    Ghost70
    vis inox
    vis inox

    Messages : 157
    Date d'inscription : 16/06/2012
    Age : 24
    Localisation : Haute Saône

    Re: Grenade flash a led

    Message par Ghost70 le Sam 27 Aoû - 9:53

    Bonjour merci de ton aide Lea'gle ça m'a beaucoup eclairer =)

    Pour le projet j'avai reussi a mettre le LED avec l'inter et le buzzer a coter sa rendait super bien .


    Contenu sponsorisé

    Re: Grenade flash a led

    Message par Contenu sponsorisé


      La date/heure actuelle est Ven 20 Oct - 3:22