Attendre l’appui d’une touche avec la boucle While

.

Mise à jour le 08/03/2020 : Explications et applications de la boucle while et do-while, dans le fonctionnement et la validation d’un bouton poussoir pour continuer l’exécution d’un programme

Sommaire :

 

.

.

separateur-redohm-001

 Comment attendre la validation d’une touche pour continuer l’exécution d’un programme avec while?

.

 

Explication du code

Nous allons donc utiliser la boucle while pour satisfaire à cette condition. Dans le code ci-dessous tant qu’on satisfait à la condition de la boucle c’est-à-dire que la condition soit vraie, on exécute la portion de code. Pour sortir de cette boucle il faut ne plus satisfaire à la condition exigée, en l’occurrence pour nous il suffit d’appuyer sur le bouton pour que la variable passe à un et dans ce cas nous sortons de la boucle.

Description de la structure de controle while .
Une while boucle en continu, et à l’infini, jusqu’à ce que l’expression à l’intérieur de la parenthèse, () devienne fausse. Quelque chose doit changer la variable testée, sinon la boucle while ne se fermera jamais. Cela peut être dans votre code, comme une variable incrémentée, ou une condition externe, comme tester un capteur.

Code et organigramme  pour appréhender le fonctionnement de la boucle 

Organigramme de la boucle 

Organigramme de la boucle

Organigramme de la boucle

 

.

Code de la boucle 

//
//
// =======================================================================
//
// le 07/03/2020
// RedOhm : Mazelin Herve
//
// But : le programme attend qu'on valide une touche pour continuer 
// à s'exécuter 
// Programme 001
// Utilisation de la boucle While 
// 
//
// =======================================================================


// déclaration de l'entrée du bouton9 branché sur la broche 9
int bouton9 = 9 ;
// variable du type int pour stocker la valeur de passage du bouton9
int bouton9v;

// ---------------------------------------------------------------------------
// Un programme Arduino doit impérativement contenir la fonction "setup"
// Elle ne sera exécutée une seule fois au démarrage du microcontroleur
// Elle sert à configurer globalement les entrées sorties
// ---------------------------------------------------------------------------
void setup() {


//ouvre le port série et fixe le debit de communication à 9600 bauds
   Serial.begin(9600);
// on attent que le port de communication soit pret
     while(!Serial); 

  // lit l'état de la broche en entrée bouton9
  // et met le résultat dans la variable bouton9v 
  bouton9v = digitalRead(bouton9); 
   
  // Il est possible de créer une boucle infinie avec la boucle
  // while, il faut impérativement que dans notre cas bouton9v
  // passe à l'état 1 sinon la boucle s'exécute de manière continue .
  while (bouton9v == 0)
  {

  Serial.print("Valeur de mon bouton => ");
  Serial.println(bouton9v);
  Serial.println("je boucle et j'attends l'appui du bouton");
  delay (400);
  // lit l'état de la broche en entrée bouton9
  // et met le résultat dans la variable bouton9v 
  bouton9v = digitalRead(bouton9);
  Serial.print("Valeur de la variable bouton9v => ");
  Serial.println(bouton9v); 
  }
  Serial.println(" " );


}

// ---------------------------------------------------------------------------
// Le programme principal s’exécute par une boucle infinie appelée Loop () 
// ---------------------------------------------------------------------------
 
void loop() {
  
  Serial.println( "Je suis dans le programme principal");
}

.

separateur-redohm-001

Version optimisée du code pour la boucle 

//
//
// =======================================================================
//
// le 08/03/2020
// RedOhm : Mazelin Herve
//
// But : le programme attend qu'on valide une touche pour continuer 
// à s'exécuter 
// Programme 001A
// Utilisation de la boucle While version optimisée 
// 
//
// =======================================================================


// déclaration de l'entrée du bouton9 branché sur la broche 9
int bouton9 = 9 ;


// ---------------------------------------------------------------------------
// Un programme Arduino doit impérativement contenir la fonction "setup"
// Elle ne sera exécutée une seule fois au démarrage du microcontroleur
// Elle sert à configurer globalement les entrées sorties
// ---------------------------------------------------------------------------
void setup() {


//ouvre le port série et fixe le debit de communication à 9600 bauds
   Serial.begin(9600);
// on attent que le port de communication soit pret
     while(!Serial); 
   
  // Il est possible de créer une boucle infinie avec la boucle
  // while, il faut impérativement que dans notre cas bouton9
  // passe à l'état 1 sinon la boucle s'exécute de manière continue .
  while ( digitalRead(bouton9)== 0)
  {
  Serial.println("je boucle et j'attends l'appui du bouton");
  }
  


}

// ---------------------------------------------------------------------------
// Le programme principal s’exécute par une boucle infinie appelée Loop () 
// ---------------------------------------------------------------------------
 
void loop() {
  
  Serial.println( "Je suis dans le programme principal");
}

 

..

 

Retour au sommaire

 

.

separateur-redohm-001

Solution 2 :  utilisation de la boucle do – while pour attendre la validation d’une touche 

La boucle do / while  fonctionne de la même façon que la boucle while, à la différence près que la condition est testée à la fin de la boucle.Les instructions de la boucle  sont donc exécutées au moins une fois .

 

//
//
// =======================================================================
//
// le 07/03/2020
// RedOhm : Mazelin Herve
//
// But : le programme attend qu'on valide une touche pour continuer 
// à s'exécuter 
// programme 002
// Utilisation de la boucle do- While 
//
// =======================================================================


// déclaration de l'entrée du bouton9 branché sur la broche 9
int bouton9 = 9 ;
// variable du type int pour stocker la valeur de passage du bouton9
int bouton9v;

// ---------------------------------------------------------------------------
// Un programme Arduino doit impérativement contenir la fonction "setup"
// Elle ne sera exécutée une seule fois au démarrage du microcontroleur
// Elle sert à configurer globalement les entrées sorties
// ---------------------------------------------------------------------------
void setup() {


//ouvre le port série et fixe le debit de communication à 9600 bauds
   Serial.begin(9600);
// on attent que le port de communication soit pret
     while(!Serial); 

  
   
  // La boucle do…while est similaire à la boucle while.La différence
  // ici, c’est que la condition de répétabilité de la boucle est 
  // testée à la fin de celle-ci. Donc la boucle est au minimum exécutée
  // une fois. 
  do
  {

  Serial.print("Valeur de mon bouton => ");
  Serial.println(bouton9v);
  Serial.println("je boucle et j'attends l'appui du bouton");
  // lit l'état de la broche en entrée bouton9
  // et met le résultat dans la variable bouton9v 
  bouton9v = digitalRead(bouton9);
  Serial.print("Valeur de la variable bouton9v => ");
  Serial.println(bouton9v);
  }
  while (bouton9v == 0);
  Serial.println(" " );


}

// ---------------------------------------------------------------------------
// Le programme principal s’exécute par une boucle infinie appelée Loop () 
// ---------------------------------------------------------------------------
 
void loop() {
  
  Serial.println( "Je suis dans le programme principal");
}

..

Retour au sommaire

.

separateur-redohm-001

Solution 3 : utilisation de while et goto pour attendre la validation d’une touche

Description de la structure de controle while .

Les boucles while  bouclent sans fin, et indéfiniment, jusqu’à ce que la condition ou l’expression entre les parenthèses  devienne fausse. Quelque chose doit modifier la variable testée, sinon la boucle  ne se terminera jamais.

Syntaxe

var = 0;
while (var < 200)
{
// Exemple de code , incrémentation de la valeur de la variable var 
}

 

L’instruction goto (de l’anglais go to qui signifie en français aller à) . Elle est utilisée pour réaliser des sauts inconditionnels dans un programme, changeant ainsi le flot de contrôle naturel du programme qui consiste à aller exécuter l’instruction suivante. L’exécution est alors envoyée à une autre instruction repérée par une étiquette ou label

Depuis la révolution de la programmation structurée des années 1970, l’instruction goto n’est plus guère appréciée des programmeurs modernes, car elle rend souvent les programmes plus difficiles à comprendre et à maintenir . Voila La raison pour laquelle de nombreux programmeurs désapprouvent l’utilisation de goto est qu’avec l’utilisation illimitée de goto ,il est facile de créer des programmes qui ne pourront jamais être débogués.

Syntaxe

label:
  // code 
goto label;  // envoie le flux du programme à l’étiquette

.

//
//
// =======================================================================
//
// le 07/03/2020
// RedOhm : Mazelin Herve
//
// But : le programme attend qu'on valide une touche pour continuer 
// à s'exécuter
// Programme 003
//
// Utilisation de la boucle While et de la commande goto
//
// =======================================================================


// déclaration de l'entrée du bouton9 branché sur la broche 9
int bouton9 = 9 ;
// variable du type int pour stocker la valeur de passage du bouton9
int bouton9v;

// ---------------------------------------------------------------------------
// Un programme Arduino doit impérativement contenir la fonction "setup"
// Elle ne sera exécutée une seule fois au démarrage du microcontroleur
// Elle sert à configurer globalement les entrées sorties
// ---------------------------------------------------------------------------
void setup() {


//ouvre le port série et fixe le debit de communication à 9600 bauds
   Serial.begin(9600);
// on attent que le port de communication soit pret
     while(!Serial); 

  // Libellé de notre étiquette pour le retour goto
  retour:
  
  // lit l'état de la broche en entrée bouton9
  // et met le résultat dans la variable bouton9v 
  bouton9v = digitalRead(bouton9); 
   
  // Il est possible de créer une boucle infinie avec la boucle
  // while, il faut impérativement que dans notre cas bouton9v
  // passe à l'état 1 sinon la boucle s'exécute de manière continue .
  while (bouton9v == 0)
  {

  Serial.print("Valeur de mon bouton => ");
  Serial.println(bouton9v);
  Serial.println("je boucle et j'attends l'appui du bouton");
  // pause 
  delay (100);

  // L'utilisation de goto est déconseillée dans la programmation C
  // mais utilisé judicieusement, il peut simplifier certains programmes.
  // goto = aller à
  goto retour;   
  }
  Serial.println(" " );


}

// ---------------------------------------------------------------------------
// Le programme principal s’exécute par une boucle infinie appelée Loop () 
// ---------------------------------------------------------------------------
 
void loop() {
  
  Serial.println( "Je suis dans le programme principal");
  // lit l'état de la broche en entrée bouton9
  // et met le résultat dans la variable bouton9v 
  bouton9v = digitalRead(bouton9);
  Serial.print("Valeur de mon bouton => ");
  Serial.println(bouton9v); 
  delay (200);
}

Retour au sommaire

.

.

separateur-redohm-001

Notes et références sur les fonctions while , do-while et goto

 

Information technique :

Retour au sommaire

 

.

separateur-redohm-001

Pour tout probléme 

Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes  sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .

Facebook  Twitter  Youtube 

.

Retour au sommaire

.