Bonjour,

avec mon arduino Uno je cherche à allumer 3 LED avec ce programme.
J'utilise la librairie elapsedMillis pour mon code.

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
 
#include <elapsedMillis.h>
 
const int LED_COUNT = 2;    // Les LED sont sur les sorties paires (LED1 = pin 2; LED2 = pin4; LED3 = pin6; etc.)
int CLOCK_INTERVAL = 1000;   // période de clignotement 
 
int ledOutput[LED_COUNT];
boolean ledState[LED_COUNT];
elapsedMillis timeElapsed[LED_COUNT];
 
int i = 0;
 
// the setup routine runs once when you press reset:
void setup() 
{ 
  for (i=0; i<LED_COUNT; i++)
  {
    ledOutput[i] = (i + 1) * 2;
    ledState[i] = LOW;
 
    pinMode(ledOutput[i], OUTPUT);
    digitalWrite(ledOutput[i], ledState[i]);
  }
 
  Serial.begin(115200);
  i = 0;
 
}
 
// the loop routine runs over and over again forever:
void loop() 
{
      if (timeElapsed[i]  > CLOCK_INTERVAL && i < LED_COUNT)
      {
        ledState[i] = !ledState[i];
        digitalWrite(ledOutput[i], ledState[i]);
        timeElapsed[i] = 0;
      }
 
      Serial.print("i=");
      Serial.print(i);
      Serial.print(" c=");
      Serial.println(LED_COUNT);
 
      i = i + 1;
      if (i > LED_COUNT)
      {
        i = 0;
      }
}
J'affiche également le contenu de mon compteur i. Le code tel que je l'ai posté fonctionne. Voici le contenu de la console :
i=0 c=2
i=1 c=2
i=2 c=2
i=0 c=2
i=1 c=2
i=2 c=2
i=0 c=2
i=1 c=2
Mais si je remplace la condition if (timeElapsed[i] > CLOCK_INTERVAL && i < LED_COUNT) par if (timeElapsed[i] > CLOCK_INTERVAL) voici le contenu de la console :
i=25288 c=2
i=0 c=2
i=1 c=2
i=25291 c=2
i=0 c=2
i=1 c=2
i=25294 c=2
i=0 c=2
i=1 c=2
i=25296 c=2
Vous y comprenez quelque chose ? Où est le problème ? Pourquoi i prend ces valeurs ?