Ardu? No!Initiation ≫ do..while

do..while

Nous venons dans la page précédente de voir la boucle while (on peut dire tant que ... faire), nous allons voir maintenant une boucle très voisine, le do while (faire ... tant que). Il y a une toute petite différence, avec while la condition est vue avant l'action à faire, tandis qu'avec do...while le test est fait après. Cela ne change que pour la première fois, car ensuite il y a dans les deux cas alternance test et action. Dans une boucle do while on exécutera forcément une fois l'action, même si la condition est toujours fausse.

La boucle do...while est plus proche du langage machine et avec les vieux compilateurs elle était plus intéressante. Maintenant cela n'a plus gère d'importance. Cette boucle est moins utilisée que la boucle while.

La syntaxe est la suivante:

do <instruction> while (<condition>);

Notre programme

Reprenons la partie loop du programme que l'on a utilisé pour while:

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); // Allumer la LED
  dernierChangement = millis();
  while (millis() - dernierChangement <= DEMI_PERIODE) // Pendant 500 ms
    Serial.println(random(100)); // Affiche un nombre de 0 à 99

  digitalWrite(LED_BUILTIN, LOW); // Éteindre la LED
  dernierChangement = millis();
  while (millis() - dernierChangement <= DEMI_PERIODE) // Pendant 500 ms
    Serial.println(random(100)); // Affiche un nombre de 0 à 99
}

En remplaçant la boucle while par une do...while cela donne:

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); // Allumer la LED
  dernierChangement = millis();
  do Serial.println(random(100)); // Affiche un nombre de 0 à 99
  while (millis() - dernierChangement <= DEMI_PERIODE); // Pendant 500 ms

  digitalWrite(LED_BUILTIN, LOW); // Éteindre la LED
  dernierChangement = millis();
  do Serial.println(random(100)); // Affiche un nombre de 0 à 99
  while (millis() - dernierChangement <= DEMI_PERIODE); // Pendant 500 ms
}

Dans ce cas, il n'y a pas de différence car la boucle est faite plusieurs fois.