[Programmation] Programmer une boucle sur Arduino...
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 36

Programmer une boucle sur Arduino...



  1. #1
    invite37ebf268

    Programmer une boucle sur Arduino...


    ------

    Bonjour, je suis nouveau sur l'Arduino mais avec quelques bases. J'aimerai faire clignoter une led, piloté par une télécommande, qui est déjà dans la boucle de la télécommande. Mon message n'est peut être pas clair, mais voici le code que j'ai pour l'instant et qui ne permet que d'allumer les leds fixe correctement (montage de feux SNCF):
    Code:
    #include <IRremote.h>
    
    const char DIN_RECEPTEUR_INFRAROUGE = 2;
    
    IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);
    
    decode_results messageRecu;
    
    int rouge_1 = 3;
    int vert = 4;
    int rouge_2 = 5;
    int jaune_1 = 6;
    int blanc = 7;
    int jaune_2_et_3 = 8;
    int jaune_4 = 9;
    int jaune_5 = 10;
    int clignotement = 0;
    
    void setup()
    {
     Serial.begin(9600);
     monRecepteurInfraRouge.enableIRIn();
     monRecepteurInfraRouge.blink13(true);
     pinMode(rouge_1, OUTPUT);
     pinMode(rouge_2, OUTPUT);
     pinMode(jaune_1, OUTPUT);
     pinMode(vert, OUTPUT);
     pinMode(blanc, OUTPUT);
     pinMode(jaune_2_et_3, OUTPUT);
     pinMode(jaune_4, OUTPUT);
     pinMode(jaune_5, OUTPUT);
     digitalWrite(rouge_1, HIGH);
     digitalWrite(rouge_2, HIGH);
    }
    
    void loop()
    {
      if (monRecepteurInfraRouge.decode(&messageRecu))
      {
        if (messageRecu.value == 0xFFA25D)
        {
        Serial.println("Carré mis en place");
        digitalWrite(rouge_1, HIGH);
        digitalWrite(rouge_2, HIGH);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF629D)
        {
        Serial.println("Sémaphore mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, HIGH);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFFE21D)
        {
        Serial.println("Rouge clignotant mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        digitalWrite(rouge_2, HIGH);
        delay(500);
        digitalWrite(rouge_2, LOW);
        delay(500);
        }
        if (messageRecu.value == 0xFF22DD)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFF02FD)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFFC23D)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFFE01F)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFFA857)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFF906F)
        Serial.println("Non trouvé)");
        if (messageRecu.value == 0xFF6897)
        {
        Serial.println("Voie libre mise en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, HIGH);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF9867)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFFB04F)
        Serial.println("Non trouvé");
        if (messageRecu.value == 0xFF30CF)
        {
        Serial.println("Fin de préanonce mis en place, retour à 160 km/h");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, HIGH);
        delay(500);
        digitalWrite(vert, LOW);
        delay(500);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF18E7)
        {
        Serial.println("Avertissement mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, HIGH);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF7A85)
        {
        Serial.println("Avertissement clignotant mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, HIGH);
        delay(500);
        digitalWrite(jaune_1, LOW);
        delay(500);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF10EF)
        {
        Serial.println("Blanc de manoeuvre mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, HIGH);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF38C7)
        {
        Serial.println("Blanc de manoeuvre clignotant mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, HIGH);
        delay(500);
        digitalWrite(blanc, LOW);
        delay(500);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF5AA5)
        {
        Serial.println("Ralentissement à 30 km/h mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, HIGH);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        }
        if (messageRecu.value == 0xFF42BD)
        {
        Serial.println("Rappel de ralentissement à 30 km/h mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        }
        if (messageRecu.value == 0xFF4AB5)
        {
        Serial.println("Ralentissement à 60 km/h mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
        digitalWrite(jaune_2_et_3, LOW);
        delay(500);
        
        }
        if (messageRecu.value == 0xFF52AD)
        {
        Serial.println("Rappel de ralentissement à 60 km/h mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(rouge_2, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        delay(500);
        }
        delay(500);
        monRecepteurInfraRouge.resume();
      }
      delay(1000);
    
    }
    Si vous pouvez me trouver une solution, je vous en remercierait beaucoup

    -----
    Dernière modification par Antoane ; 14/04/2016 à 23h22. Motif: Remplacement des balises [quote] par [code]

  2. #2
    invite1d577638

    Re : Programmer une boucle sur Arduino...

    Salut et bienvenue,

    Schéma de ton câblage stp ?

    Quelle partie du programme correspond à un allumage ? Ceci ?

    Code:
     if (messageRecu.value == 0xFFE21D)
        {
        Serial.println("Rouge clignotant mis en place");
        digitalWrite(rouge_1, LOW);
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        digitalWrite(rouge_2, HIGH);
        delay(500);
        digitalWrite(rouge_2, LOW);
        delay(500);
        }
    L'idée c'est d'effectivement faire une boucle (sur un nombre de clignotements ou une tempo) et de faire en sorte qu'à chaque "tour" ta sortie prenne la valeur complémentaire de son état actuel.

  3. #3
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Bonjour et bienvenu,
    Déjà afin de rendre plus claire la lecture de ton code je te conseil d'extraire l’exécution de ta signalisation exemple
    void signalisation (int R1, int R2,int V, int J1 .....int Tempo1, .....)
    {
    La reprise de ton code de chaque if
    }
    Puis dans tes boucles d'y faire appel avec les valeur adéquat.

    Ensuite, si j'ai bien compris le principe il te suffis d'ajouter une boucle "for" du nombre de clignotement à endroit que tu désire

  4. #4
    Seb.26

    Re : Programmer une boucle sur Arduino...

    quelle horreur ...

    -> tu fais un automate d'état et tu utilises la valeur de millis() pour les tempo (transitions) ... autant ne pas prendre de mauvaises habitudes ...

    https://www.arduino.cc/en/Reference/Millis
    https://fr.wikipedia.org/wiki/Automate_fini

    en pseudo code et au pif, ça donne :
    Code:
    setup()
    {
      horloge_debut = millis();
      etat_actuel = 0;
    }
    
    loop()
    {
      switch(etat_actuel)
        case 0:
          LED_R = 1
          LED_V = 0
          si( (millis()-horloge_debut) >= 2000 )
          {
            etat_actuel++;
            horloge_debut = millis();
          }
          break;
    
        case 1:
          LED_R = 0
          LED_V = 1
          si( (millis()-horloge_debut) >= 2000 )
          {
            etat_actuel = 0;
            horloge_debut = millis();
          }
          break;
      }
    }
    à toi d'adapter ensuite ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  5. A voir en vidéo sur Futura
  6. #5
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Seb26, à qui parle tu et de quoi ?
    L'utilisation du switch soit c'est plus jolie .
    L'utilisation d'une boucle à la place d'une pause, je ne voie pas la différence.
    Pour ce qui est de ma proposition, elle évite l'écriture de code inutile et répétitif, et permet lors de la lecture d'avoir une vue d’ensemble du fonctionnement sans avoir 10klignes à lire.

  7. #6
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    Bonjour à tous et merci de vos réponses. Je vais de ce pas les inclures pour voir si ils peuvent m'aider. L'image du câblage n'est pas représentatif de la mise en place réel. On ne voit pas les résistances de protection, mais elles sont bien là.
    Nom : Image cablage forum.png
Affichages : 276
Taille : 195,3 Ko

  8. #7
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    En fait, il faudrait faire clignoter cette led à l’infini, mais qu'on puisse changer d’état quand même. Dès qu'on arrive au delay(500), repartir sur le clignotement de la led. Peut importe si le serial.printl recommence son message
    Code:
    if (messageRecu.value == 0xFFE21D)                       
        {
        Serial.println("Rouge clignotant mis en place");        
        digitalWrite(rouge_1, LOW);                             
        digitalWrite(vert, LOW);
        digitalWrite(jaune_1, LOW);
        digitalWrite(blanc, LOW);
        digitalWrite(jaune_2_et_3, LOW);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        digitalWrite(rouge_2, HIGH);
        delay(500);
        digitalWrite(rouge_2, LOW);
        delay(500);
    Réponse à Yoruk : L'allumage correspond bien au code que tu as extrait. En fait, il faut plutot que la boucle soit infini, pas avec une tempo ou un delai qui s'arrête a la fin. Par contre, si on veut changer d'état, cela doit etre possible

    Réponse à HAYAC : Je ne comprend pas ce que tu veut faire. Si j'essaie de comprendre, le void signalisation reviendrai au meme que le loop, mais en plus clair. Qu'entend-tu par valeur adéquate, le changement d'état de la reception des codes infrarouges?

    Réponse à Seb.26 : Euh je suis beaucoup trop novice pour comprendre le principe de ton code, mais a mon avis, il ne convient pas pour mon application, mais je te remercie de ton aide.

  9. #8
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Connais-tu le principe de programmation par routine ?
    Dans ta boucle Loop tu à énormément de répétition de code, ce code tu le passe en routine (l'exemple fourni) ce qui te permet de faire un simple appel dans le loop.
    Pour ce qui est de ton état permanent de clignotement, dans quelle condition démarre t'il et que doit le faire sortir de cette état ?

  10. #9
    invite1d577638

    Re : Programmer une boucle sur Arduino...

    Ceci n'est pas un schéma, mais une jolie image de synthèse.

    Les deux états que tu veux c'est donc clignotant / coupé ?

    Pour simplifier et rendre ton code plus lisible, il faut effectivement passer par une sub à part comme conseillé par Hayac. Tu crées une fonction générique gérant l'allumage ou non, et ensuite tu l'appelles après ton IF.

    La sub à part (faite à l'arrache) :

    Code:
    void signalisation (bool R1, bool R2,bool V, bool J1 .....int Tempo1, .....)
    {
    
    digitalWrite(rouge_1, R1);                             
        digitalWrite(vert, R2);
        digitalWrite(jaune_1,R3);
        digitalWrite(blanc, ...);
        digitalWrite(jaune_2_et_3, ...);
        digitalWrite(jaune_4, ...);
        digitalWrite(jaune_5, ...);
        digitalWrite(rouge_2, ...);
        delay(Tempo1);
        digitalWrite(rouge_2, ...);
        delay(500);
    
    }
    Et dans ton code tu l'appelles :

    Code:
    if (messageRecu.value == 0xFFE21D)                       
        {
    Call signalisation(true ,false.........)
    }

  11. #10
    HAYAC

    Re : Programmer une boucle sur Arduino...

    void signalisation (int R1, int R2,int V, int J1 .....int Tempo1, .....)
    {

    digitalWrite(rouge_1, R1);
    digitalWrite(vert, R2);
    digitalWrite(jaune_1, J1);
    ......
    delay(Tempo1);
    ......
    }
    Et sont appel dans la boucle LOOP par signalisation (0, 0,1, 0 .....500, .....)

  12. #11
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    Merci Yoruk et HAYAC, je crois avoir compris le système. Je vais modifier mon code avec vos conseils, et voir si tout fonctionne

  13. #12
    HAYAC

    Re : Programmer une boucle sur Arduino...

    trop lent .
    Reste à connaitre les conditions d'entrées en clignotement et de sortie ?!
    D'autre par, préfére effectivement le switch au if (vielle habitude du basic)
    Dernière modification par HAYAC ; 15/04/2016 à 11h22.

  14. #13
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    Le clignotement doit commencer des la réception et le franchissement du if. Si on appuie sur un autre bouton, il enclenchera alors un autre fonctionnement, fixe ou clignotant en fonction du bouton appuyé

  15. #14
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Afin de résoudre ce problème, il y à une méthode imparable, la réalisation d'un grafcet fonctionnel de ton système.
    Comme le précise Seb l'analyse du fonctionnement par cette démarche te permet d'en découler ton code.
    Dans la compréhension que j'ai de ton besoin, il te suffirait de déplacer ce clignotement avant ta procédure de contrôle switch ou if.

  16. #15
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    En fait, les leds qui clignotent auront toutes la même tempo, disons un delay(250). Les fixes elles fonctionnent pour l'instant très bien dans le programme. Par contre, j'ai commencé les modifications et je vois que les leds qui devraient clignoter sont fixes

  17. #16
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Une programmation de ce type c'est bête, ça passe de ligne en ligne donc un clignotement c'est :
    1° passage à un état
    2° passage à l'état inverse
    Si dans ton code il n'y à pas une répétition de cet ordre il n'y aura pas de clignotement.

  18. #17
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    Malgré vos conseils, je n'ai pas réussi à coder le clignotement des leds que je voulais. Même mit dans un autre void, il ne s'effectuait jamais en boucle. Merci de m'avoir aidé quand même mais je vais voir si je peut pas me débrouiller autrement

  19. #18
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Bonjour,
    Re poste ton nouveau code afin de le vérifier, le corriger et t'expliquer ou ce trouve ton erreur,
    De la sorte nous pourrons terminer ce post et ne pas le laisser sans solution (Utile à ceux qui orrons la même problématique par la suite).
    Cordialement,

  20. #19
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    Bonjour HAYAC, merci de ton aide. Voici le code, qui est certainement bourré de fautes...
    Code:
    #include <IRremote.h>  // Dlécaration de l'utilisation de la télécommande infrarouge
    
    const char DIN_RECEPTEUR_INFRAROUGE = 2;  
    
    IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);  
    
    decode_results messageRecu;  
    
    int rouge_1 = 3;         
    int vert = 4;            
    int rouge_2 = 5;         
    int jaune_1 = 6;        
    int blanc = 7;           
    int jaune_2_et_3 = 8;    
    int jaune_4 = 9;         
    int jaune_5 = 10;        
    
    
    void setup()             
    {
     Serial.begin(9600);                       
     monRecepteurInfraRouge.enableIRIn();       
     monRecepteurInfraRouge.blink13(true);
     pinMode(rouge_1, OUTPUT);                  
     pinMode(rouge_2, OUTPUT);               
     pinMode(jaune_1, OUTPUT);                
     pinMode(vert, OUTPUT);                    
     pinMode(blanc, OUTPUT);                   
     pinMode(jaune_2_et_3, OUTPUT);
     pinMode(jaune_4, OUTPUT);             
     pinMode(jaune_5, OUTPUT);                 
    }
    
    void loop()                                                  // Boucle qui reçoit les informations de la télécommande, et qui en fonction du code reçu, donne tel ou tel fonctionnement aux leds
    {
      if (monRecepteurInfraRouge.decode(&messageRecu))           // Si mon récépteur infrarouge reçoit une information qu'il a décodé...
      {
        if (messageRecu.value == 0xFFA25D)                      
        {   
        Serial.println("Carre mis en place");  
        }
        if (messageRecu.value == 0xFF629D)                      
        { 
        Serial.println("Semaphore mis en place");               
        }
        if (messageRecu.value == 0xFFE21D)                       
        {
        Serial.println("Rouge clignotant mis en place");         
        }
        if (messageRecu.value == 0xFF6897)
        {
        Serial.println("Voie libre mise en place");
        }
        if (messageRecu.value == 0xFF30CF)
        {
        Serial.println("Fin de préanonce mis en place, retour à 160 km/h");
        }
        if (messageRecu.value == 0xFF18E7)
        {
        Serial.println("Avertissement mis en place");
        }
        if (messageRecu.value == 0xFF7A85)
        {
        Serial.println("Avertissement clignotant mis en place");
        }
        if (messageRecu.value == 0xFF10EF)
        {
        Serial.println("Blanc de manoeuvre mis en place");
        }
        if (messageRecu.value == 0xFF38C7)
        {
        Serial.println("Blanc de manoeuvre clignotant mis en place");
        }
        if (messageRecu.value == 0xFF5AA5)
        {
        Serial.println("Ralentissement à 30 km/h mis en place");
        }
        if (messageRecu.value == 0xFF42BD)
        {
        Serial.println("Rappel de ralentissement à 30 km/h mis en place");
        }
        if (messageRecu.value == 0xFF4AB5)
        {
        Serial.println("Ralentissement à 60 km/h mis en place");
        }
        if (messageRecu.value == 0xFF52AD)
        {
        Serial.println("Rappel de ralentissement à 60 km/h mis en place");
        }
        delay(500);
        monRecepteurInfraRouge.resume();
      }
        delay(1000);
    }
    
    
    void signalisation()
    {
      
      if (messageRecu.value == 0xFFA25D)
      {
        digitalWrite(rouge_1, HIGH);
        digitalWrite(rouge_2, HIGH);
      }
    
      if (messageRecu.value == 0xFF629D)
      {
      digitalWrite(rouge_2, HIGH);
      }
    
      if (messageRecu.value == 0xFF6897)
      {
        digitalWrite(vert, HIGH);
      }
    
      if (messageRecu.value == 0xFF30CF)
      {
        digitalWrite(vert, HIGH);
        delay(500);
        digitalWrite(vert, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF18E7)
      {
        digitalWrite(jaune_1, HIGH);
      }
    
      if (messageRecu.value == 0xFF7A85)
      {
       digitalWrite(jaune_1, HIGH);
       delay(500);
       digitalWrite(jaune_1, LOW);
       delay(500);
      }
    
      if (messageRecu.value == 0xFF10EF)
      {
        digitalWrite(blanc, HIGH);
      }
    
      if (messageRecu.value == 0xFF38C7)
      {
        digitalWrite(blanc, HIGH);
        delay(500);
        digitalWrite(blanc, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF5AA5)
      {
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF42BD)
      {
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF4AB5)
      {
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
        digitalWrite(jaune_2_et_3, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF52AD)
      {
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        delay(500);
      }
    
    }
    En espérant que tu puisses trouver les erreurs, je te remercie par avance de ton aide

  21. #20
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Ce n'est effectivement pas ça du tout que je t'ai demandé de faire, mais bon
    Je te donnerais l'info + tard,
    je manque de temps, je dois partir,

  22. #21
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Bonjour,
    Voici ce que je te proposais :
    Code:
    // Dlécaration de la bibliotéque de la télécommande infrarouge
    #include <IRremote.h>  
    
    const char DIN_RECEPTEUR_INFRAROUGE = 2;  
    
    // Dlécaration de la télécommande infrarouge
    IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);  
    
    decode_results messageRecu;  
    
    int rouge_1 = 3;         
    int vert = 4;            
    int rouge_2 = 5;         
    int jaune_1 = 6;        
    int blanc = 7;           
    int jaune_2_et_3 = 8;    
    int jaune_4 = 9;         
    int jaune_5 = 10;        
    
    // fonction est utilisée pour initialiser les variables, le sens des broches, 
    // les librairies utilisées. La fonction setup n'est exécutée qu'une seule fois, 
    // après chaque mise sous tension ou reset (réinitialisation)
    void setup()             
    {
     Serial.begin(9600);                       
     monRecepteurInfraRouge.enableIRIn();       
     monRecepteurInfraRouge.blink13(true);
     pinMode(rouge_1, OUTPUT);                  
     pinMode(rouge_2, OUTPUT);               
     pinMode(jaune_1, OUTPUT);                
     pinMode(vert, OUTPUT);                    
     pinMode(blanc, OUTPUT);                   
     pinMode(jaune_2_et_3, OUTPUT);
     pinMode(jaune_4, OUTPUT);             
     pinMode(jaune_5, OUTPUT);                 
    }
    
    void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)
    {
      digitalWrite(rouge_1, R1);
      digitalWrite(rouge_2, R2);
      digitalWrite(vert, V);
      digitalWrite(jaune_1, J1);
      digitalWrite(blanc, B);
      digitalWrite(jaune_2_et_3, J23);
      digitalWrite(jaune_4, J4);
      digitalWrite(jaune_5, J5);
      delay(temps);
    }
    /* suppression des répetitions et simplification du code pour la lecture
      if (messageRecu.value == 0xFFA25D)
      {
        digitalWrite(rouge_1, HIGH);
        digitalWrite(rouge_2, HIGH);
      }
    
      if (messageRecu.value == 0xFF629D)
      {
      digitalWrite(rouge_2, HIGH);
      }
    
      if (messageRecu.value == 0xFF6897)
      {
        digitalWrite(vert, HIGH);
      }
    
      if (messageRecu.value == 0xFF30CF)
      {
        digitalWrite(vert, HIGH);
        delay(500);
        digitalWrite(vert, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF18E7)
      {
        digitalWrite(jaune_1, HIGH);
      }
    
      if (messageRecu.value == 0xFF7A85)
      {
       digitalWrite(jaune_1, HIGH);
       delay(500);
       digitalWrite(jaune_1, LOW);
       delay(500);
      }
    
      if (messageRecu.value == 0xFF10EF)
      {
        digitalWrite(blanc, HIGH);
      }
    
      if (messageRecu.value == 0xFF38C7)
      {
        digitalWrite(blanc, HIGH);
        delay(500);
        digitalWrite(blanc, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF5AA5)
      {
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF42BD)
      {
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF4AB5)
      {
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
        digitalWrite(jaune_2_et_3, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF52AD)
      {
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        delay(500);
      }
    }*/
    
    // fonction qui est exécutée en boucle une fois que la fonction setup() a été exécutée une fois
    void loop()
    {
      if (monRecepteurInfraRouge.decode(&messageRecu))           // Si mon récépteur infrarouge reçoit une information qu'il a décodé...
      {
        if (messageRecu.value == 0xFFA25D)                      
        {   
        Serial.println("Carre mis en place");
        // appel de la fonction de signalisation avec passage d'état des feux et le delais de pause si besoin
        // à repeter 2* s'il y à clignotement ......
        // void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)
        void signalisation(1, 1, 0, 0, 0, 0, 0, 0, 0);  
        }
        if (messageRecu.value == 0xFF629D)                      
        { 
        Serial.println("Semaphore mis en place");
        ...              
        }
        if (messageRecu.value == 0xFFE21D)                       
        {
        Serial.println("Rouge clignotant mis en place");         
        ...
        }
        if (messageRecu.value == 0xFF6897)
        {
        Serial.println("Voie libre mise en place");
        ...
        }
        if (messageRecu.value == 0xFF30CF)
        {
        Serial.println("Fin de préanonce mis en place, retour à 160 km/h");
        }
        if (messageRecu.value == 0xFF18E7)
        {
        Serial.println("Avertissement mis en place");
        }
        if (messageRecu.value == 0xFF7A85)
        {
        Serial.println("Avertissement clignotant mis en place");
        }
        if (messageRecu.value == 0xFF10EF)
        {
        Serial.println("Blanc de manoeuvre mis en place");
        }
        if (messageRecu.value == 0xFF38C7)
        {
        Serial.println("Blanc de manoeuvre clignotant mis en place");
        }
        if (messageRecu.value == 0xFF5AA5)
        {
        Serial.println("Ralentissement à 30 km/h mis en place");
        }
        if (messageRecu.value == 0xFF42BD)
        {
        Serial.println("Rappel de ralentissement à 30 km/h mis en place");
        }
        if (messageRecu.value == 0xFF4AB5)
        {
        Serial.println("Ralentissement à 60 km/h mis en place");
        }
        if (messageRecu.value == 0xFF52AD)
        {
        Serial.println("Rappel de ralentissement à 60 km/h mis en place");
        }
        delay(500);
        monRecepteurInfraRouge.resume();
      }
        delay(1000);
    }
    A adapter ensuite à ton besoin

  23. #22
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Le clignotement doit commencer des la réception et le franchissement du if. Si on appuie sur un autre bouton, il enclenchera alors un autre fonctionnement, fixe ou clignotant en fonction du bouton appuyé
    Pour cela, je pense qu'il faudrait utiliser une interruption (Voir le code de la bibliothèque IRremote) pour modifier une variable d'état du type "ReceptionEnCour" et dans le code "LOOP" activer ce clignotement suivant l'état actif ou non de cette variable.
    Et en cas de franchisement d'un if désactiver cette état
    à tester ...
    Dernière modification par HAYAC ; 17/04/2016 à 06h34.

  24. #23
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    Merci HAYAC d'avoir pris le temps de modifier mon code. Cependant, la boucle n'est toujours pas présente pour faire clignoter les leds. Pour ton deuxième post, je ne pourrais pas modifier le code, puisque je ne sais pas comment le modifier mais je ne pense pas qu'il soit à l'origine du non-clignotement

  25. #24
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Tu ne te foulle pas des masse tout de meme.
    Code:
    void loop() {   if (monRecepteurInfraRouge.decode(&messageRecu))           // Si mon récépteur infrarouge reçoit une information qu'il a décodé...   {     if (messageRecu.value == 0xFFA25D)                           {        Serial.println("Carre mis en place");     // appel de la fonction de signalisation avec passage d'état des feux et le delais de pause si besoin     // à repeter 2* s'il y à clignotement ......     // void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)     void signalisation(1, 0, 0, 0, 0, 0, 0, 0, 500);       void signalisation(0, 1, 0, 0, 0, 0, 0, 0, 500);       void signalisation(1, 0, 0, 0, 0, 0, 0, 0, 500);       void signalisation(0, 1, 0, 0, 0, 0, 0, 0, 500);       void signalisation(1, 0, 0, 0, 0, 0, 0, 0, 500);       void signalisation(0, 1, 0, 0, 0, 0, 0, 0, 500);       }
        .......................................     delay(500);     monRecepteurInfraRouge.resume();   }     delay(1000); }
    pour ce qui est de ton code je ne vais pas te l'écrire à ta place tout de meme.

  26. #25
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    J'ai déjà repris le code que tu viens de faire, mais ça ne clignote quand même pas. Je ne sais pas où peut être l'origine de l'erreur. Sinon je vais simplifier mon code en le faisant clignoter un certain nombre de fois puis plus à d'infini, ça sera bien plus simple. Je te remercie toutefois de ton aide

  27. #26
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Avec la méthode que je viens de te passer si ça ne clignote pas, en l’occurrence dans l'exemple ça allume alternativement la première et deuxième diode, c'est que tu ne recopie pas le code.....

  28. #27
    invite37ebf268

    Re : Programmer une boucle sur Arduino...

    J'ai un probleme avec ton code, il m'affiche ça (error: variable or field 'signalisation' declared void). Il fonctionne quand je l'enlève mais pas de boucle
    Code:
    // Dlécaration de la bibliotéque de la télécommande infrarouge
    #include <IRremote.h>  
    
    const char DIN_RECEPTEUR_INFRAROUGE = 2;  
    
    // Dlécaration de la télécommande infrarouge
    IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);  
    
    decode_results messageRecu;  
    
    int rouge_1 = 3;         
    int vert = 4;            
    int rouge_2 = 5;         
    int jaune_1 = 6;        
    int blanc = 7;           
    int jaune_2_et_3 = 8;    
    int jaune_4 = 9;         
    int jaune_5 = 10;        
    
    // fonction est utilisée pour initialiser les variables, le sens des broches, 
    // les librairies utilisées. La fonction setup n'est exécutée qu'une seule fois, 
    // après chaque mise sous tension ou reset (réinitialisation)
    void setup()             
    {
     Serial.begin(9600);                       
     monRecepteurInfraRouge.enableIRIn();       
     monRecepteurInfraRouge.blink13(true);
     pinMode(rouge_1, OUTPUT);                  
     pinMode(rouge_2, OUTPUT);               
     pinMode(jaune_1, OUTPUT);                
     pinMode(vert, OUTPUT);                    
     pinMode(blanc, OUTPUT);                   
     pinMode(jaune_2_et_3, OUTPUT);
     pinMode(jaune_4, OUTPUT);             
     pinMode(jaune_5, OUTPUT);                 
    }
    
    void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)
    {
      digitalWrite(rouge_1, R1);
      digitalWrite(rouge_2, R2);
      digitalWrite(vert, V);
      digitalWrite(jaune_1, J1);
      digitalWrite(blanc, B);
      digitalWrite(jaune_2_et_3, J23);
      digitalWrite(jaune_4, J4);
      digitalWrite(jaune_5, J5);
      delay(Temps);
    }
    /* suppression des répetitions et simplification du code pour la lecture
      if (messageRecu.value == 0xFFA25D)
      {
        digitalWrite(rouge_1, HIGH);
        digitalWrite(rouge_2, HIGH);
      }
    
      if (messageRecu.value == 0xFF629D)
      {
      digitalWrite(rouge_2, HIGH);
      }
    
      if (messageRecu.value == 0xFF6897)
      {
        digitalWrite(vert, HIGH);
      }
    
      if (messageRecu.value == 0xFF30CF)
      {
        digitalWrite(vert, HIGH);
        delay(500);
        digitalWrite(vert, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF18E7)
      {
        digitalWrite(jaune_1, HIGH);
      }
    
      if (messageRecu.value == 0xFF7A85)
      {
       digitalWrite(jaune_1, HIGH);
       delay(500);
       digitalWrite(jaune_1, LOW);
       delay(500);
      }
    
      if (messageRecu.value == 0xFF10EF)
      {
        digitalWrite(blanc, HIGH);
      }
    
      if (messageRecu.value == 0xFF38C7)
      {
        digitalWrite(blanc, HIGH);
        delay(500);
        digitalWrite(blanc, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF5AA5)
      {
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF42BD)
      {
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF4AB5)
      {
        digitalWrite(jaune_2_et_3, HIGH);
        delay(500);
        digitalWrite(jaune_2_et_3, LOW);
        delay(500);
      }
    
      if (messageRecu.value == 0xFF52AD)
      {
        digitalWrite(jaune_4, HIGH);
        digitalWrite(jaune_5, HIGH);
        delay(500);
        digitalWrite(jaune_4, LOW);
        digitalWrite(jaune_5, LOW);
        delay(500);
      }
    }*/
    
    // fonction qui est exécutée en boucle une fois que la fonction setup() a été exécutée une fois
    void loop()
    {
      if (monRecepteurInfraRouge.decode(&messageRecu))           // Si mon récépteur infrarouge reçoit une information qu'il a décodé...
      {
        if (messageRecu.value == 0xFFA25D)                      
        {   
        Serial.println("Carre mis en place");
        // appel de la fonction de signalisation avec passage d'état des feux et le delais de pause si besoin
        // à repeter 2* s'il y à clignotement ......
        // void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)
        void signalisation(1, 1, 0, 0, 0, 0, 0, 0, 0);  
        }
        if (messageRecu.value == 0xFF629D)                      
        { 
        Serial.println("Semaphore mis en place");
        void signalisation(0, 1, 0, 0, 0, 0, 0, 0, 0);
        }
        if (messageRecu.value == 0xFFE21D)                       
        {
        Serial.println("Rouge clignotant mis en place");         
        void signalisation(0, 1, 0, 0, 0, 0, 0, 0, 500);
        }
        if (messageRecu.value == 0xFF6897)
        {
        Serial.println("Voie libre mise en place");
        void signalisation(0, 0, 1, 0, 0, 0, 0, 0, 0);
        }
        if (messageRecu.value == 0xFF30CF)
        {
        Serial.println("Fin de préanonce mis en place, retour à 160 km/h");
        void signalisation(0, 0, 1, 0, 0, 0, 0, 0, 500);
        }
        if (messageRecu.value == 0xFF18E7)
        {
        Serial.println("Avertissement mis en place");
        void signalisation(0, 0, 0, 1, 0, 0, 0, 0, 0);
        }
        if (messageRecu.value == 0xFF7A85)
        {
        Serial.println("Avertissement clignotant mis en place");
        void signalisation(0, 0, 0, 1, 0, 0, 0, 0, 500);
        }
        if (messageRecu.value == 0xFF10EF)
        {
        Serial.println("Blanc de manoeuvre mis en place");
        void signalisation(0, 0, 0, 0, 1, 0, 0, 0, 0);
        }
        if (messageRecu.value == 0xFF38C7)
        {
        Serial.println("Blanc de manoeuvre clignotant mis en place");
        void signalisation(0, 0, 0, 0, 1, 0, 0, 0, 500);
        }
        if (messageRecu.value == 0xFF5AA5)
        {
        Serial.println("Ralentissement à 30 km/h mis en place");
        void signalisation(0, 0, 0, 0, 0, 1, 0, 0, 0);
        }
        if (messageRecu.value == 0xFF42BD)
        {
        Serial.println("Rappel de ralentissement à 30 km/h mis en place");
        void signalisation(0, 0, 0, 0, 0, 0, 1, 1, 0);
        }
        if (messageRecu.value == 0xFF4AB5)
        {
        Serial.println("Ralentissement à 60 km/h mis en place");
        void signalisation(0, 0, 0, 0, 0, 1, 0, 0, 500);
        }
        if (messageRecu.value == 0xFF52AD)
        {
        Serial.println("Rappel de ralentissement à 60 km/h mis en place");
        void signalisation(0, 0, 0, 0, 0, 0, 1, 1, 500);
        }
        delay(500);
        monRecepteurInfraRouge.resume();
      }
        delay(1000);
    }

  29. #28
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Oups effectivement une erreur de copier collé,
    Code:
    // fonction qui est exécutée en boucle une fois que la fonction setup() a été exécutée une fois void loop() {   if (monRecepteurInfraRouge.decode(&messageRecu))           // Si mon récépteur infrarouge reçoit une information qu'il a décodé...   {     if (messageRecu.value == 0xFFA25D)                           {        Serial.println("Carre mis en place");     // appel de la fonction de signalisation avec passage d'état des feux et le delais de pause si besoin     // à repeter 2* s'il y à clignotement ......     // void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)     void signalisation(1, 1, 0, 0, 0, 0, 0, 0, 0);       }
    Tu supprime juste le void
    Code:
    // fonction qui est exécutée en boucle une fois que la fonction setup() a été exécutée une fois void loop() {   if (monRecepteurInfraRouge.decode(&messageRecu))           // Si mon récépteur infrarouge reçoit une information qu'il a décodé...   {     if (messageRecu.value == 0xFFA25D)                           {        Serial.println("Carre mis en place");     // appel de la fonction de signalisation avec passage d'état des feux et le delais de pause si besoin     // à repeter 2* s'il y à clignotement ......     // void signalisation(bool R1, bool R2, bool V, bool J1, bool B, bool J23, bool J4, bool J5, int Temps)     signalisation(1, 1, 0, 0, 0, 0, 0, 0, 0);       }

  30. #29
    HAYAC

    Re : Programmer une boucle sur Arduino...

    Il y a une autre erreur, Temps et temps, la casse est extrêmement importante en programmation.
    Ce qui me fait en déduire que tu n'a jamais programmé et que tu ne fait qu'adapter, utiliser des programme de récup.
    Analyse le code et essai de comprendre pour trouver les solutions ...

  31. #30
    HAYAC

    Re : Programmer une boucle sur Arduino...

    D'autre par, une remarque à été faite et reprise concernant les if à remplacer par switch ....
    Simplement pour partir sur de bonne base ...

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [Programmation] comment programmer une arduino à distance
    Par invite03f54f56 dans le forum Électronique
    Réponses: 8
    Dernier message: 06/01/2016, 22h10
  2. Détecteur de voiture à boucle d'induction - Arduino
    Par invite603299a1 dans le forum Électronique
    Réponses: 2
    Dernier message: 10/12/2014, 20h58
  3. programmer pic avec arduino
    Par invite7ade7f5a dans le forum Électronique
    Réponses: 10
    Dernier message: 05/08/2014, 20h47
  4. Stopper une boucle - Langage Arduino.
    Par invited9252388 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 10/04/2014, 06h31
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...