Millis

Dans les exercices précédents, nous avons vu la fonction delay() qui permet d'attendre un temps donné avant de passer à la suite.

Cette fonction permet de faire clignoter une Led toutes les secondes. Mais, si vous voulez faire une autre action, celle-ci sera bloquée aussi pendant une seconde.

La fonction millis() permet de retourner le temps écoulé depuis le début de votre croquis.

Grâce à cette fonction, on pourra réaliser une action si un certain temps s'est écoulé et continuer une autre le reste du temps.

DéfinitionClignotement de 2 LED

On fait clignoter la LED1 toutes les 500ms et la LED2 toutes les secondes :

Arduino - LED
1
const int LED1 = 4;
2
const int LED2 = 5;
3
unsigned long tpsOld1 = millis();
4
unsigned long tpsOld2 = millis();
5
6
void setup(){
7
  pinMode(LED1, OUTPUT);
8
  pinMode(LED2, OUTPUT);
9
}
10
11
void loop(){
12
  unsigned long tpsNew = millis();
13
14
  if(tpsNew - tpsOld1 > 500){  // vrai au bout de 500ms
15
    tpsOld1 = tpsNew;
16
    digitalWrite(LED1, !digitalRead(LED1)); // LED1 vaut l'inverse de l'état actuel
17
  }
18
19
  if(tpsNew - tpsOld2 > 1000){  // vrai au bout de 1s
20
    tpsOld2 = tpsNew;
21
    digitalWrite(LED2, !digitalRead(LED2)); // LED2 vaut l'inverse de l'état actuel
22
  }
23
24
}

tpsNew : temps actuel

tpsOld1 : temps du dernier changement de LED1

tpsOld2 : temps du dernier changement de LED2

tpsNew - tpsOld1 : temps écoulé entre maintenant et le dernier changement de LED1

digitalRead(LED1) : valeur de LED1

!digitalRead(LED1) : valeur inverse de LED1

toutes les 500ms tpsOld1 devient le temps actuel, la valeur de LED1 devient son inverse.

DéfinitionClignotement temps différents

Clignotement d'une LED.

  • Allumée 500ms

  • Éteinte 4s

Arduino - LED
1
const int LED = 4;
2
unsigned long tpsOld = millis();
3
4
void setup(){
5
  pinMode(LED, OUTPUT);
6
}
7
8
void loop(){
9
  unsigned long tpsNew = millis();
10
11
  if(tpsNew - tpsOld > 500 && digitalRead(LED) == 1){  // 
12
    tpsOld = tpsNew;
13
    digitalWrite(LED, 0);
14
  }
15
  if(tpsNew - tpsOld > 4000 && digitalRead(LED) == 0){  // 
16
    tpsOld = tpsNew;
17
    digitalWrite(LED, 1);
18
  }
19
20
}

tpsNew - tpsOld > 500 && digitalRead(LED) == 1 : 500ms et LED à 1

DéfinitionClignotement avec fonction

La fonction fait clignoter une LED avec des temps d'allumage et d'extinction différents

Arduino - LED
1
const int LED1 = 4; 
2
const int LED2 = 5; 
3
unsigned long tpsOld1 = millis();
4
unsigned long tpsOld2 = millis();
5
6
void clignotement(int Led, unsigned long *tpsOld, unsigned long duree1, unsigned long duree2) {
7
  unsigned long tpsNew = millis();
8
  if(tpsNew - *tpsOld > duree1 && digitalRead(Led) == 1){  // 
9
    *tpsOld = tpsNew;
10
    digitalWrite(Led, 0);
11
  }
12
  if(tpsNew - *tpsOld > duree2 && digitalRead(Led) == 0){  // 
13
    *tpsOld = tpsNew;
14
    digitalWrite(Led, 1);
15
  }
16
}
17
18
void setup() {
19
  pinMode(LED1, OUTPUT);
20
  pinMode(LED2, OUTPUT);
21
}
22
23
void loop() {
24
  clignotement(LED1, &tpsOld1, 500, 500);
25
  clignotement(LED2, &tpsOld2, 1000, 4000);
26
}

unsigned long *tpsOld : la fonction reçoit l'adresse du tps et modifiera la valeur

clignotement(LED1, &tpsOld1, 500, 500) : on envoie l'adresse du tpsOld

La LED1 s'allume 500ms et s'éteint 500ms.

La LED2 s'allume 1s et s'éteint 4s.