Temporisation, fonction milli

Bonjour,

Je débute en arduino, et je me permets de poster au sujet de la fonction milli.

Je cherche à allumer une led verte lorsque j’appuie sur un bouton puis 5 secondes après une led rouge puis ensuite une led jaune.(avec le même bouton qui reste enclenché)

Je cherche depuis déjà un moment et je coince déjà avec deux led (la verte (ca va !) mais la rouge >:( )...en fait cela fonctionne si j'appui dès le lancement du programme. Mais si j'appui sur le bouton 10s après le début du programme, les deux s'allume en même temps...

Je vois bien que cela viens de la fonction milli, mais je ne vois pas comment régler le problème de programmation...

Une bonne âme charitable pourrait-il me venir en aide...

Merci par avance

// Numéro de la pin du bouton
const int pinBtn =2;
const int pinled1 =7;
const int pinled2 =6;
// État d'activation de la tempo

// Temps à l'activation de la tempo
unsigned long tempodepart = 0;
unsigned long currentMillis = 0;
int valeurentree=0;

void setup() {
Serial.begin(9600);
pinMode(pinBtn, INPUT);
pinMode(pinled1, OUTPUT);
pinMode(pinled2, OUTPUT);

}

void loop() {

valeurentree=digitalRead(pinBtn);
Serial.println("Etat de l'entrée");
Serial.println(valeurentree);

// Si le bouton est enfoncé,
if ( digitalRead(pinBtn) == LOW ) {

// Alors on active la led verte
Serial.println("LED verte allumée");
digitalWrite(pinled1,HIGH);
currentMillis = millis(); // stocke la valeur courante de la fonction millis()

}
if((currentMillis - tempodepart > 5000)&& ( digitalRead(pinBtn) == LOW )) {

// mémorise la valeur de la fonction millis()
tempodepart = currentMillis;

digitalWrite(pinled2,HIGH);
Serial.println("Led 2 rouge allumée");}
}

Tempo4.ino (1.08 KB)

Rebonjour,

Personne pour un petit coup de main ?

Merci de votre aide

bonjour,
déjà le code entre balise code </>
tu veux quoi exactement?
si tu appuie sur le bouton ou TANT que tu appuie sur le bouton?

après, normal que les deux leds s'allument

       digitalWrite(pinled1,HIGH);

ou est le

       digitalWrite(pinled1,LOW);

slt essaye ça :

// Numéro de la pin du bouton
const int pinBtn =2;
 const int pinled1 =7;
 const int pinled2 =6;
 const int pinled3 =5;
// État d'activation de la tempo

 
// Temps à l'activation de la tempo
unsigned long tempodepart = 0;
unsigned long currentMillis = 0;
 int valeurentree=0;
 
 
void setup() {
    Serial.begin(9600);
    pinMode(pinBtn, INPUT);
    pinMode(pinled1, OUTPUT);
    pinMode(pinled2, OUTPUT);
    pinMode(pinled3, OUTPUT);     // led jaune  
}
 
void loop() {

     valeurentree=digitalRead(pinBtn);
     Serial.println("Etat de l'entrée");
     Serial.println(valeurentree);
     
    
    // Si le bouton est enfoncé,
    if ( digitalRead(pinBtn) == true ) // en lecture on utilise true ou false
       { currentMillis = millis(); // stocke la valeur courante de la fonction millis()
         
        // Alors on active la led verte
        Serial.println("LED verte allumée");
        digitalWrite(pinled1,HIGH);      
  
        if(currentMillis - tempodepart > 5000) // toute les 5 secondes ...
          { 
            if(digitalRead(pinled2)) // si la led rouge est déjà allumée on allume la jaune
              {
                digitalWrite(pinled3,HIGH);
                Serial.println("Led 3 jaune allumée");
              }
            // mémorise la valeur de la fonction millis() 
            tempodepart = currentMillis;  

            digitalWrite(pinled2,HIGH);
            Serial.println("Led 2 rouge allumée");
         } 
 
      } else { // si pas d'appui sur le BP on éteint les leds 
              digitalWrite(pinled1,LOW);
              digitalWrite(pinled2,LOW);
              digitalWrite(pinled3,LOW);      
             }
}

quand tu lis une variable booléenne tel que digitalRead(pinBtn) il faut utiliser true ou false,

if (digitalRead(pinBtn) == true) est égale à if (digitalRead(pinBtn))

et

if (digitalRead(pinBtn) == false) est égale à   "if (!digitalRead(pinBtn))

OK, Merci pour votre aide,

J'essaye tout cela et vous tient au courant

Merci pour votre aide, grace à vous j'ai réussi a réaliser ma programmation et temporiser 2 led.

je vous mets le programme pour info, il y a sans doute plus simple, mais cela fonctionne. :slight_smile:

// Numéro de la pin du bouton
const int pinBtn =2;
 const int pinled1 =7;
 const int pinled2 =6;
 const int pinled3 =5;
 bool entree1valide;
// État d'activation de la tempo

 
// Temps à l'activation de la tempo
unsigned long previousMillis = 0;
unsigned long currentMillis = 0;
 int valeurentree1=0;
 
 
void setup() {
    Serial.begin(9600);
    pinMode(pinBtn, INPUT);
    pinMode(pinled1, OUTPUT);
    pinMode(pinled2, OUTPUT);
    pinMode(pinled3, OUTPUT);
    entree1valide=0;
    digitalWrite(pinled1, LOW);
    digitalWrite(pinled2, LOW);
    digitalWrite(pinled3, LOW);
       
}
 
 
 
void loop() {

  
     valeurentree1=digitalRead(pinBtn);
     Serial.println("Etat de l'entrée");
     Serial.println(valeurentree1);
    
    // Si le bouton est enfoncé,
    if ( digitalRead(pinBtn) == HIGH ) 
      {
         // Alors on active la led verte
        
        entree1valide=true;
        digitalWrite(pinled1, HIGH);
      }
    else 
      {
        
        
        digitalWrite(pinled1, LOW);
        digitalWrite(pinled2, LOW);
        digitalWrite(pinled3, LOW);
        entree1valide = 0;
        previousMillis = millis();
        
      }
      
    if (entree1valide==true)

      // alors on declenche les tempos
      {
        Serial.println("Boucle tempo");
        currentMillis = millis();
             if (currentMillis - previousMillis >= 2000)   // tempo 5s avant de mettre la led en route
           
             // alors declenchement de la tempo 1 de 5s
              {                     
                digitalWrite(pinled2, HIGH);    // mise en route de la sortie 6
                Serial.println("LED JAUNE !!!!!!!!");
              }
              
            else
              {
                Serial.println("Tempo led jaune non déclenché");
              }

              
             if (currentMillis - previousMillis >= 3000)   // tempo 10s avant de mettre la led en route
              {                     
                  digitalWrite(pinled3, HIGH);    // mise en route de la sortie 5
                  Serial.println("LED ROUGE !!!!!!!!");
              }
           
            else
              {
               Serial.println("Tempo led rouge non déclenché");
              }
        }
        
         else // Sinon 
        {
        Serial.println("Boucle tempo non valide");
        }

}