Exercice : Utilisation de la directive #if (1/2)

Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi

Schéma à utiliser

Schéma de câblage pour la LED clignotanteInformations[1]

Lors de la phase de mise au point d'un programme, il est parfois nécessaire d'afficher la valeur d'un élément. Par exemple, dans le programme suivant, on souhaite afficher conditionnellement le contenu de la constante PORT_LED. On utilise pour cela la directive #if ... #endif

1
#include "constantes.h"
2
3
// La fonction setup est appelée une fois 
4
void setup() {
5
  // Initialise la broche digitale PORT_LED en mode sortie.
6
  pinMode(PORT_LED, OUTPUT);
7
  Serial.begin(9600);//Initialisation de la communication avec le moniteur série
8
}
9
10
// La fonction loop crée une boucle infinie
11
void loop() {
12
  #if TRACE
13
  Serial.println(PORT_LED);
14
  #endif
15
  digitalWrite(PORT_LED, ALLUME);   // Allume la LED
16
  delay(1000);                       // Attente d'une seconde
17
  digitalWrite(PORT_LED, ETEINT);    // Eteint la LED
18
  delay(1000);                       // Attente d'une seconde
19
}
1
//Fichier constantes.h
2
#define PORT_LED 4
3
#define ALLUME 1
4
#define ETEINT 0

Question

Que manque-t-il dans le programme précédent ? Complétez-le et vérifiez qu'il fonctionne correctement.

Solution

1
#define PORT_LED 4
2
#define ALLUME 1
3
#define ETEINT 0
4
#define TRACE 1
5
// La fonction setup est appelée une fois
6
void setup() {
7
  // Initialise la broche digitale PORT_LED en mode sortie.
8
  pinMode(PORT_LED, OUTPUT);
9
  Serial.begin(9600);//Initialisation de la communication avec le moniteur série
10
}
11
12
// La fonction loop crée une boucle infinie
13
void loop() {
14
  #if TRACE
15
  Serial.print("Le numero de port est : ");
16
  Serial.println(PORT_LED);
17
  #else
18
  Serial.println("Rien a afficher");
19
  #endif
20
  digitalWrite(PORT_LED, ALLUME);   // Allume la LED
21
  delay(1000);                       // Attente d'une seconde
22
  digitalWrite(PORT_LED, ETEINT);    // Eteint la LED
23
  delay(1000);                       // Attente d'une seconde
24
}
25

Question

Quel est le rôle de la fonction Serial.println() ?

Indice

Vous pouvez par exemple consulter la documentation.

Question

Existe-t-il une autre fonction similaire à Serial.println() ?

Question

Modifiez le programme précédent pour qu'il n'affiche plus seulement le numéro de port mais plutôt un message comme « Le numéro du port est numero_port »