[RESOLU] Millis de base

Bonjour, j'essaye d'apprendre à utiliser le programme millis mais je rencontre des problèmes inattendus.
Le code ci-dessous et censé faire clignoter 4 leds dans l'ordre suivant 1-2-3-4-1-2-3-4... etc.
Le problème et que seul la led 1 s'allume et je ne comprend pas pourquoi le reste ne s'allument pas.
Quelqu'un aurait une idée de la source du problème et une solution à proposer? :slight_smile:

[code]
int led1 = 10;
int led2 = 9;
int led3 = 8;
int led4 = 7;

int led1State = LOW;
int led2State = LOW;
int led3State = LOW;
int led4State = LOW;

unsigned long currentTime = 0;
unsigned long previousTime = 0;

int interval1 = 500 ;
int interval2 = 500 ;
int interval3 = 500 ;
int interval4 = 500 ;

void setup() {

  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}


void loop() {

  unsigned long currentTime = millis();

  //Led1
  if ((currentTime - previousTime) > interval1) {
    previousTime = currentTime;
    if (led1State == LOW) {
      led1State = HIGH;
    } else {
      led1State = LOW;
    }
    digitalWrite(led1, led1State);
  }

  //Led2
  if ((currentTime - previousTime) > interval2) {
    previousTime = currentTime;
    if (led2State == LOW) {
      led2State = HIGH;
    } else {
      led2State = LOW;
    }
    digitalWrite(led2, led2State);
  }

  //Led3
  if ((currentTime - previousTime) > interval3) {
    previousTime = currentTime;
    if (led3State == LOW) {
      led3State = HIGH;
    } else {
      led3State = LOW;
    }
    digitalWrite(led3, led3State);
  }

  //Led4
  if ((currentTime - previousTime) > interval4) {
    previousTime = currentTime;
    if (led4State == LOW) {
      led4State = HIGH;
    } else {
      led4State = LOW;
    }
    digitalWrite(led4, led4State);
  }
}

[/code]

Bonjour,

Il faut que tu utilises une variable pour mémoriser la led qui doit clignoter.

En partant de ton programme tu peux par exemple faire ceci

int led1 = 10;
int led2 = 9;
int led3 = 8;
int led4 = 7;

int led1State = LOW;
int led2State = LOW;
int led3State = LOW;
int led4State = LOW;

unsigned long currentTime = 0;
unsigned long previousTime = 0;

int interval1 = 500 ;
int interval2 = 500 ;
int interval3 = 500 ;
int interval4 = 500 ;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}


void loop() {
  static byte nLed = 0;
  unsigned long currentTime = millis();

  //Led1
  if (nLed == 0 && (currentTime - previousTime) > interval1) {
    previousTime = currentTime;
    if (led1State == LOW) {
      led1State = HIGH;
    } else {
      led1State = LOW;
      nLed++;
    }
    digitalWrite(led1, led1State);
  }

  //Led2
  if (nLed == 1 && (currentTime - previousTime) > interval2) {
    previousTime = currentTime;
    if (led2State == LOW) {
      led2State = HIGH;
    } else {
      led2State = LOW;
      nLed++;
    }
    digitalWrite(led2, led2State);
  }

  //Led3
  if (nLed == 2 && (currentTime - previousTime) > interval3) {
    previousTime = currentTime;
    if (led3State == LOW) {
      led3State = HIGH;
    } else {
      led3State = LOW;
      nLed++;
    }
    digitalWrite(led3, led3State);
  }

  //Led4
  if (nLed == 3 && (currentTime - previousTime) > interval4) {
    previousTime = currentTime;
    if (led4State == LOW) {
      led4State = HIGH;
    } else {
      led4State = LOW;
      nLed = 0;
    }
    digitalWrite(led4, led4State);
  }
}

Le programme peut être simplifié en testant d'abord le temps puis le numéro de led.

Merci beaucoup. J'ai testé et ça fonctionne très bien.