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éfinition : Clignotement de 2 LED
On fait clignoter la LED1 toutes les 500ms et la LED2 toutes les secondes :
const int LED1 = 4;
const int LED2 = 5;
unsigned long tpsOld1 = millis();
unsigned long tpsOld2 = millis();
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop(){
unsigned long tpsNew = millis();
if(tpsNew - tpsOld1 > 500){ // vrai au bout de 500ms
tpsOld1 = tpsNew;
digitalWrite(LED1, !digitalRead(LED1)); // LED1 vaut l'inverse de l'état actuel
}
if(tpsNew - tpsOld2 > 1000){ // vrai au bout de 1s
tpsOld2 = tpsNew;
digitalWrite(LED2, !digitalRead(LED2)); // LED2 vaut l'inverse de l'état actuel
}
}
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éfinition : Clignotement temps différents
Clignotement d'une LED.
Allumée 500ms
Éteinte 4s
const int LED = 4;
unsigned long tpsOld = millis();
void setup(){
pinMode(LED, OUTPUT);
}
void loop(){
unsigned long tpsNew = millis();
if(tpsNew - tpsOld > 500 && digitalRead(LED) == 1){ //
tpsOld = tpsNew;
digitalWrite(LED, 0);
}
if(tpsNew - tpsOld > 4000 && digitalRead(LED) == 0){ //
tpsOld = tpsNew;
digitalWrite(LED, 1);
}
}
tpsNew - tpsOld > 500 && digitalRead(LED) == 1 : 500ms et LED à 1
Définition : Clignotement avec fonction
La fonction fait clignoter une LED avec des temps d'allumage et d'extinction différents
const int LED1 = 4;
const int LED2 = 5;
unsigned long tpsOld1 = millis();
unsigned long tpsOld2 = millis();
void clignotement(int Led, unsigned long *tpsOld, unsigned long duree1, unsigned long duree2) {
unsigned long tpsNew = millis();
if(tpsNew - *tpsOld > duree1 && digitalRead(Led) == 1){ //
*tpsOld = tpsNew;
digitalWrite(Led, 0);
}
if(tpsNew - *tpsOld > duree2 && digitalRead(Led) == 0){ //
*tpsOld = tpsNew;
digitalWrite(Led, 1);
}
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop() {
clignotement(LED1, &tpsOld1, 500, 500);
clignotement(LED2, &tpsOld2, 1000, 4000);
}
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.