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 :

Clignotement LEDs avec millis


Sujet :

Arduino

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Clignotement LEDs avec millis
    Hello !

    Je viens vers vous car j'en suis à un point où je n'y arrive plus tout seul ^^

    J'aimerais faire clignoter 4 leds l'une après l'autre avec un UNO. Chaque led sera allumée 350ms et les autres seront éteintes en attendant leur tour. Je veux éviter le code bloquant car j'ai des boutons qui appuyés génèrent des sons et changent le pattern du clignotement des LEDs, donc je suis tombé sur une solution avec millis. Je comprends le principe mais je n'arrive pas à personnaliser l'intervalle de clignotement. Quelqu'un pourrait m'aider ? Je vous mets mon code en dessous.
    Je pensais pouvoir faire ce que je veux en modifiant les valeurs BLINK_XXXX mais non car ça joue autant sur la durée d'allumage que la durée d'extinction. La durée d'allumage de 350ms est correcte, il faut que j'arrive à modifier la durée d'extinction.
    Au départ je voulais controler des SIPO avec ce type de code qui est déjà au point, mais en utilisant des delay ça me bloquait. Me manque plus qu'à savoir m'en servir sans delay donc je pars d'abord sur un test avec 4 leds puis j'adapterais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void ledJaune(){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, B01000100); // Vers SIPO 3
    shiftOut(dataPin, clockPin, LSBFIRST, B00100000); // Vers SIPO 2
    shiftOut(dataPin, clockPin, LSBFIRST, B10100010); // Vers SIPO 1
    digitalWrite(latchPin, HIGH);
    }
    Merci de votre aide en tous cas, quand j'aurais compris ça mon code sera complet à priori

    Le code avec 4 leds et millis :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    // Intervals de clignotement LED
    const unsigned long BLINK_JAUNE = 350;
    const unsigned long BLINK_ROUGE = 350;
    const unsigned long BLINK_BLEUE = 350;
    const unsigned long BLINK_VERTE = 350;
     
    const int LED_JAUNE = 7;
    const int LED_ROUGE = 6;
    const int LED_BLEUE = 5;
    const int LED_VERTE = 4;
     
    // Précédent état de la LED
    byte etatJaune = LOW;
    byte etatRouge = LOW;
    byte etatBleue = LOW;
    byte etatVerte = LOW;
     
    void setup() {
    pinMode (LED_JAUNE, OUTPUT);
    pinMode (LED_ROUGE, OUTPUT);
    pinMode (LED_BLEUE, OUTPUT);
    pinMode (LED_VERTE, OUTPUT);
     
      digitalWrite(LED_JAUNE, LOW);
      digitalWrite(LED_ROUGE, LOW);
      digitalWrite(LED_BLEUE, LOW);
      digitalWrite(LED_VERTE, LOW);
     
    }
     
    void loop() {
    ledJaune();
    ledRouge();
    ledBleue();
    ledVerte();
    }
     
     
     
    void ledJaune(){
        static unsigned long previousMillisJaune = 0;
        static byte etatJaune = LOW;
        unsigned long currentMillis = millis();
     
        if(currentMillis  - previousMillisJaune >= BLINK_JAUNE) {
              previousMillisJaune = currentMillis;
        etatJaune = !etatJaune;
        digitalWrite(LED_JAUNE, etatJaune);
        }
    }
     
    void ledRouge(){
      static unsigned long previousMillisRouge = 0;
      static byte etatRouge = LOW;
      unsigned long currentMillis = millis();
     
      if(currentMillis - previousMillisRouge >= BLINK_ROUGE) {
        previousMillisRouge = currentMillis;
        etatRouge = !etatRouge;
        digitalWrite(LED_ROUGE, etatRouge);
      }
    }
     
    void ledBleue(){
      static unsigned long previousMillisBleue = 0;
      static byte etatBleue = LOW;
      unsigned long currentMillis = millis();
     
      if(currentMillis - previousMillisBleue >= BLINK_BLEUE) {
        previousMillisBleue = currentMillis;
            etatBleue = !etatBleue;
        digitalWrite(LED_BLEUE, etatBleue);
      }
     
    }
     
    void ledVerte(){
      static unsigned long previousMillisVerte = 0;
      static byte etatVerte = LOW;
      unsigned long currentMillis = millis();
     
      if(currentMillis - previousMillisVerte >= BLINK_VERTE) {
        previousMillisVerte = currentMillis;
        etatVerte = !etatVerte;
        digitalWrite(LED_VERTE, etatVerte);
      }
    }

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 643
    Points : 56 975
    Points
    56 975
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Citation Envoyé par dabigben Voir le message
    Je pensais pouvoir faire ce que je veux en modifiant les valeurs BLINK_XXXX mais non car ça joue autant sur la durée d'allumage que la durée d'extinction. La durée d'allumage de 350ms est correcte, il faut que j'arrive à modifier la durée d'extinction.
    Vite fait, je ferais ça avec deux constantes, par exemple pour le jaune BLINK_JAUNE_ON et BLINK_JAUNE_OFF pour les durées allumées/éteintes.

    Puis dans la fonction ledjaune(), je modifierais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
        unsigned long elapsedTime;
        if (etatJaune) 
          elapsedTime = BLINK_JAUNE_ON;
        else 
          elapsedTime = BLINK_JAUNE_OFF;
     
         // plus concis : elapsedTime = etatJaune ? BLINK_JAUNE_ON : BLINK_JAUNE_OFF;
     
        if(currentMillis  - previousMillisJaune >= elapsedTime) { 
          // etc.
     ...

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 771
    Points : 5 570
    Points
    5 570
    Par défaut
    "vite fait" aussi:

    vous avez des réponses à votre question dejà sur le forum arduino

    https://forum.arduino.cc/t/clignotem...erents/1254945

    Quand on poste à plusieurs endroits, la moindre des choses c'est de le mentionner.
    Ça évite aux bénévoles qui veulent aider de perdre leur temps à vous reproposer quelque chose quand vous avez déjà la solution....

Discussions similaires

  1. [PIC] MikroC PIC16F84 chenillard de leds avec boutons
    Par Caenem dans le forum Embarqué
    Réponses: 19
    Dernier message: 23/01/2016, 17h57
  2. Commande de led avec le port serie
    Par valdano dans le forum MATLAB
    Réponses: 0
    Dernier message: 24/04/2013, 18h23
  3. Réponses: 5
    Dernier message: 17/04/2013, 12h08
  4. clignotement Leds, Timer
    Par faycal91 dans le forum Autres architectures
    Réponses: 0
    Dernier message: 10/01/2011, 20h12
  5. [Vb.NET]Clignotement involontaire avec GDI+
    Par bicou13 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/05/2006, 17h12

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