Difference entre delay et millis (tutoriel arduino).

Difference entre delay et millis (tutoriel arduino)

Nous venons de voir nos deux premiers programmes servant à faire clignoter une LED, qui sont les exemples blink et blinkWithoutDelay. Au cours de ceux ci, nous avons parlé de la différence entre les fonctions delay() et millis(). Et bien dans cette courte vidéo, j’ai légérement modifié les programmes d’exemple en y ajoutant un bouton qui allume une autre LED afin que vous puissiez vous rendre compte par vous même du « problème » que pose la fonction delay().

difference delay millis

Rappel du problème avec la fonction delay().

Nous avons donc vu que la fonction delay mettait en pause l’intégralité du programme durant son exécution et que par conséquent il était possible de rater des « événements importants » à cause de cela (si vous les avez manqués retrouvez l’article sur blink ici et celui sur blinkwithoutdelay ici). Pour remédier à cela, nous avons vu avec blinkWithoutDelay que nous pouvions utiliser une fonction comptant le temps depuis lequel le programme est exécute (en millisecondes) nommé millis, qui à force de mémorisations et comparaisons, arrivait au même résultat que blink (avec delay) mais sans stopper le programme.

Alors voici une courte vidéo afin de vous montrer concrètement l’impact que peut avoir cette fonction delay().

J’ai repris les codes des exemple blink et blinkWithoutDelay auxquelles j’ai ajouté l’allumage d’une LED via un bouton poussoir au début de la boucle loop().

Vous pourrez alors constater l’effet catastrophique que peut avoir delay() sur l’exécution d’un programme. Cela dit ne tombait pas dans l’excès en bannissant celle ci. Vous vous doutez bien que si elle est encore d’actualité c’est que à une utilité bien précise, et notamment lorsque l’on à besoin de faire certaines acquisitions de capteur (température, ultrason…) afin que le programme puisse pleinement leur laisser le temps de faire leurs diverses conversions.

Codes blink et blinkWithoutDelay modifiés.

Voici le code modifié de l’exemple blink avec la fonction delay(), les modifications se trouvent lignes 22, 23 et 34:

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

Most Arduinos have an on-board LED you can control. On the Uno and
Leonardo, it is attached to digital pin 13. If you're unsure what
pin the on-board LED is connected to on your Arduino model, check
the documentation at http://arduino.cc

This example code is in the public domain.

modified 8 May 2014
by Scott Fitzgerald
*/


// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
//Nous ajoutons une 2e LED et un bouton poussoir "en mode resistance de rappel" 
pinMode(12, OUTPUT);
pinMode(8, INPUT_PULLUP);

}

// the loop function runs over and over again forever
void loop() {
/*
Ici nous écrivons la sortie 12 à l'inverse de l'entrée 8.
En effet l'entree 8 étant cablé avec une résistance de rappel,
celle ci est à 1 lorsque l'on appuie pas et à 0 lorsque l'on appuie
*/
digitalWrite(12, !digitalRead(8));
//Puis le reste du programme blink
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

Puis le code blinkWithoutDelay avec ces même ajouts, les modifiations se trouvent lignes 42, 43 et 53:

/* Blink without Delay

Turns on and off a light emitting diode (LED) connected to a digital
pin, without using the delay() function. This means that other code
can run at the same time without being interrupted by the LED code.

The circuit:
* LED attached from pin 13 to ground.
* Note: on most Arduinos, there is already an LED on the board
that's attached to pin 13, so no hardware is needed for this example.

created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald


This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number :
const int ledPin = 13; // the number of the LED pin

// Variables will change :
int ledState = LOW; // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated

// constants won't change :
const long interval = 1000; // interval at which to blink (milliseconds)

void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
//Nous ajoutons une 2e LED et un bouton poussoir "en mode resistance de rappel" 
pinMode(12, OUTPUT);
pinMode(8, INPUT_PULLUP);
}

void loop()
{
/*
Ici nous écrivons la sortie 12 à l'inverse de l'entrée 8.
En effet l'entree 8 étant cablé avec une résistance de rappel,
celle ci est à 1 lorsque l'on appuie pas et à 0 lorsque l'on appuie
*/
digitalWrite(12, !digitalRead(8));
// here is where you'd put code that needs to be running all the time.

// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();

if(currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED 
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;

// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}

J’espère que cette vidéo vous aura parlée, vous pouvez passer sur le forum afin d’y poser vos questions et autres renseignements.

Bonne vidéo!


Liens internes:

Lien du forum.

Exemple arduino blink et la fonction delay.

Exemple arduino blinkWithoutDelay et la fonction millis.

Liens externes:

Arduino: fonction delay.

Arduino: fonction millis.


Mots clé: difference delay millis, arduino fonction delay, arduino fonction millis, comparaison delay millis.

About the Author: maxpeigne