IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

[UNO] Commande de trois leds


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    informatique
    Inscrit en
    Juillet 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Juillet 2023
    Messages : 10
    Par défaut [UNO] Commande de trois leds
    Je viens vous demander de l'aide, je suis débutant sur le forum et dans la programmation ARDUINO,j'ai réalisé un programme pour commandre des leds, je n'ai pas obtenus le résultat désiré, j'ai besoins de conseils

    voici mon projet:
    1, commander avec un front montant ou un bouton poussoir un cycle de 3 leds.
    2, au front montant la première led doit s'allumer avec un délai, ensuite s'éteindre.
    la deuxième led doit s'allumer avec un délai, ensuite s'éteindre.
    la troisième led doit s'allumer avec un délai, ensuite s'éteindre.
    Ensuite le cycle est fini toutes les diodes sont éteintes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
      /*
      Code 6 - Edurobot.ch, destiné à l'Arduino
      Objectif : faire un chenillard à 4 LED montées sur les ports 10 à 13
      */
    // dans ce montage si inter enfoncé cycle normal sinon leqs 3 led son eteinte
              //***** EN-TÊTE DÉCLARATIF *****
      int bouton = 3;    //commande de la boucle  for (int thisPin = 10; thisPin < 13; thisPin++)
      int led = 2;       // vérification de l'action
      int etatbouton;
     
     
     
      int timer = 1000;  // Durée, en millisecondes Définition de la variable « temps
     
           //***** FONCTION SETUP =  *****
     
     
      void setup()
      {
        pinMode(bouton,INPUT);
        pinMode(led,OUTPUT);    // led de controle action bouton
     
        for (int thisPin = 10; thisPin < 13; thisPin++)// Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
              {
             pinMode(thisPin, OUTPUT);
              }
      }
     
      void loop()
      {
         // Boucle de la broche 10 à la broche 12 :
     
          for (int thisPin = 10; thisPin < 13; thisPin++)  // Incrément faisant passer la variable thisPin de 10 à 12  
     
              {
      if(thisPin == 13)break;  // arret de la boucle le résultat n'est pas atteint
     
             digitalWrite(thisPin, HIGH); // Allumer la LED action sur la boucle For
     
              {   
     
     
             etatbouton=digitalRead(bouton);// lecture etat bouton
        if(etatbouton==HIGH)
               {
             digitalWrite(thisPin,LOW);
               }
        else
               {
               digitalWrite(thisPin,HIGH); //Allume la led
               delay(1000);}
               }
     
             delay(timer);                // Durée
             digitalWrite(thisPin, LOW);  // Éteindre la LED 
             }
     
     
      }
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Bonsoir RoquesClaude
    Je ne suis pas un grand expert, juste un bricolo. Pour ton petit projet je ferais un truc comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     /*
      Objectif : faire un chenillard à 3 LED montées sur les ports 10 à 12
      */
    // dans ce montage si poussoir enfoncé cycle normal sinon leqs 3 led restent eteintes
              //***** EN-TÊTE DÉCLARATIF *****
     
    #define BOUTON 3   //commande de la boucle  for (int thisPin = 10; thisPin < 13; thisPin++)
    #define TIMER 1000
     
    void setup(){
      pinMode(BOUTON,INPUT_PULLUP); 
      for (uint8_t thisPin = 10; thisPin < 13; thisPin++){  // Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
        pinMode(thisPin, OUTPUT);
        digitalWrite(thisPin,LOW);
      }
    }
    void loop(){   
      while(digitalRead(BOUTON==HIGH)){;}     //tant que le poussoir n'est pas enfoncé, on attend
      for(uint8_t thisPin = 10; thisPin < 13; thisPin++){  // Incrément faisant passer la variable thisPin de 10 à 12  
        digitalWrite(thisPin, HIGH); // Allumer la LED action sur la boucle For 
        delay(TIMER);
        digitalWrite(thisPin,LOW);
      }
      delay(TIMER);
    }

  3. #3
    Membre habitué
    Homme Profil pro
    informatique
    Inscrit en
    Juillet 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Juillet 2023
    Messages : 10
    Par défaut
    Bonjour Mornic

    Le programme que vous m'avez donné


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     // Objectif : faire un chenillard à 3 LED montées sur les ports 10 à 12
     
    // dans ce montage si poussoir enfoncé cycle normal sinon leqs 3 led restent eteintes
              //***** EN-TÊTE DÉCLARATIF *****
     
    #define BOUTON 3   //commande de la boucle  for (int thisPin = 10; thisPin < 13; thisPin++)
    #define TIMER 1000
     
    void setup(){
      pinMode(BOUTON,INPUT_PULLUP); 
      for (uint8_t thisPin = 10; thisPin < 13; thisPin++){  // Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
        pinMode(thisPin, OUTPUT);
        digitalWrite(thisPin,LOW);
      }
    }
    void loop(){   
      while(digitalRead(BOUTON==HIGH)){;}     //tant que le poussoir n'est pas enfoncé, on attend
      for(uint8_t thisPin = 10; thisPin < 13; thisPin++){  // Incrément faisant passer la variable thisPin de 10 à 12  
        digitalWrite(thisPin, HIGH); // Allumer la LED action sur la boucle For 
        delay(TIMER);
        digitalWrite(thisPin,LOW);
      }
      delay(TIMER);
    }
    Je ne comprend pas cette ligne surtout : for (uint8_t thisPin de la ligne ci dessous, j'aurais enlevé "uint8_t" pensant a une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for (uint8_t thisPin = 10; thisPin < 13; thisPin++)
    Je l'ai envoyé vers mon montage il ne se passe rien

    A bientôt
    Roquesclaude

  4. #4
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    je vous renvoie le programme avec un peu plus d'explication. J'ai remplacé uint8_t par int car cela semble vous chagriner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //****Objectif : faire un chenillard à 3 LED montées sur les ports 10 à 12 déclenché par un poussoir entre la masse et la pin 3
    // dans ce montage si le poussoir est enfoncé un cycle normal démarre sinon les 3 leds restent eteintes
     
    #define BOUTON 3        //poussoir connecté entre la pin 3 et la masse
    #define TIMER 1000      //correspond à une seconde
     
    void setup(){
      pinMode(BOUTON,INPUT_PULLUP);   //le bouton poussoir doit être entre la masse et la pin 3
      for (int thisPin = 10; thisPin < 13; thisPin++){  // Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
        pinMode(thisPin, OUTPUT);                             // les pin 10 à 12 sont des sorties
        digitalWrite(thisPin,LOW);                              // initialisation des pins 10 à 12 à LOW (leds éteintes)
      }
    }
    void loop(){   
      while(digitalRead(BOUTON==HIGH)){;}               //tant que le poussoir n'est pas enfoncé, on attend
      for(int thisPin = 10; thisPin < 13; thisPin++){   // Incrément faisant passer la variable thisPin de 10 à 12  
        digitalWrite(thisPin, HIGH);                    // Allumer successivement les leds 10 à 12 
        delay(TIMER);                                   // délai une seconde
        digitalWrite(thisPin,LOW);                      // Eteindre successivement les leds 10 à 12
        delay(TIMER);                                   // délai d'une seconde pour passer à l'allumage de la led suivante
      }                                                 // lorsque thisPin est arrivé à 13 on sort de la boucle
      delay(TIMER);                                     // délai supplémentaire, peut être inutile
    }
    Pour thisPin, on pourrait le déclarer en variable globale avant le setup: Dans ce cas les boucles deviendraient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(thisPin=10;thisPin<13;thisPin++){
    Cela devrait fonctionner (cathode des leds raccordée à la masse via une résistance de 470 ohms par exemple (à calculer selon la led)).

  5. #5
    Membre habitué
    Homme Profil pro
    informatique
    Inscrit en
    Juillet 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Juillet 2023
    Messages : 10
    Par défaut ARDUINO UNO Commande trois leds
    Bonjour MORMIC
    Jai envoyé le prog vers la carte Arduino , cette fois ci j'ai compris la boucle while avec une boucle for imbriquée j'ai fait des test envoyer sur l'entrée 3 des fronts montant ou descendant aucune led ne s'allume , pour vérifier le circuit des leds j'ai mis en commentaire la ligne 17 qui est le début de la boucle , dans ce cas les diodes s'allume avec un délai les unes après les autres ,j'aurais voulus chercher moi même le défaut ce que j'ai fait mais mon niveau encore ne le permet pas, je vous remercie pour l'aide que vous m'apportez
    Roquesclaude

  6. #6
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    En effet j'ai commis une grossière erreur de paranthèse:
    ligne 18 il faut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(digitalRead(BOUTON)==HIGH){;}     //tant que le poussoir n'est pas enfoncé, on attend
    Je viens d'essayer, cela fonctionne.

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    il manque le ; là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(digitalRead(BOUTON)==HIGH) ;
    pour comprendre il faut relire la gammaire du while qui dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(condition) statement
    et que le while va exécuter le statement tant que la condition est vraie

    donc tout revient à la définition d'un statement

    pour faire simple, un statement c'est a peu près une ligne de commande, une expression qui se tient comme affecter une valeur à une variable par exemple c'est un statement.

    On peut cependant faire un statement vide, en mettant juste le point virgule et rien avant. c'est un statement valide qui ne fait rien

    donc on pourrait écrire
    pour attendre sans rien faire que la condition devienne fausse

    La grammaire du while n'attendant qu'un seul statement, comment faire pour répéter plusieurs choses? c'est là que le compound statement rentre en jeu. En groupant des statements au sein d'accolades {} on fabrique un compound statement, c'est à dire que le groupe est vu comme un seul statement. le compound statement est un statement en soi, donc peut être vide

    donc on pourrait écrire
    pour attendre sans rien faire que la condition devienne fausse

    En écrivant comme l'a fait @mormic
    vous avez comme statement du while un compound statement qui comprend un statement vide, une double affirmation qu'on ne veut rien faire ==> clairement ça ne sert à rien d'un point de vue programmation, mais ça permet de montrer clairement l'intention / la volonté du programmeur de ne rien faire dans le while.

  8. #8
    Membre habitué
    Homme Profil pro
    informatique
    Inscrit en
    Juillet 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Juillet 2023
    Messages : 10
    Par défaut ARDUINO UNO Commande trois leds
    Bonjour
    Merci pour ses explications , je vais m'en souvenir mon problème est résolu , ca fait pratiquement 40 ans que j'avais fait une formation dans le pascal et le c depuis je n'avais pas eu l'occasion d'y revenir , Arduino me permet de retravailler, ca va faire 20 ans que j'enseigne à titre bénévole de l'informatique pour
    les saignoirs ,c'étais mon tour de redevenir élève.
    Merci beaucoup à tous ce qui passe beaucoup de temps pour aider les autres , ce n'est pas la première fois que je fréquente les forum j'y retrouve toujours le même esprit.
    Roquesclaude

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Commande de led avec le port serie
    Par valdano dans le forum MATLAB
    Réponses: 0
    Dernier message: 24/04/2013, 18h23
  2. trois commandes avec pipes
    Par aniss77 dans le forum C
    Réponses: 3
    Dernier message: 26/01/2011, 20h24
  3. Réponses: 0
    Dernier message: 20/10/2010, 13h19
  4. Commander une LED reliée au port //
    Par orfix dans le forum C
    Réponses: 6
    Dernier message: 12/08/2009, 16h36
  5. Créer des raccourcis de texte/commandes personnalisés sous LEd
    Par jyloup dans le forum Editeurs / Outils
    Réponses: 1
    Dernier message: 24/06/2009, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo