Exercice : Modularité d'un programme - Application à la gestion de la LED

Le langage C comporte assez peu d'instruction et repose essentiellement sur l'utilisation de bibliothèques. On se propose donc de créer dans cette partie une bibliothèque de gestion de la LED. Voici le programme de test à utiliser :

1
#include "constantes.h"
2
#include "led.h"
3
void setup() {
4
  Serial.begin(9600);
5
  if(!ledInitialise(PORT_LED)){
6
      Serial.println("Le numéro de port n'est pas valide !");
7
      while(1); //On bloque l'exécution du programme.
8
  }
9
  ledFlash(5); //Cette fonction fait clignoter la LED rapidement un certain nombre de fois
10
11
}
12
/*Boucle principale */
13
void loop() {
14
  ledAllume(); //Cette fonction allume la LED
15
  Serial.print("Etat LED : ");
16
  Serial.println(getLedEtat());
17
  delay(5000);
18
  ledEteint(); //et celle-là l'éteint...
19
  Serial.print("Etat LED : ");
20
  Serial.println(getLedEtat());
21
  delay(5000);
22
  ledBascule(); //Cette fonction inverse l'état de la LED.
23
  Serial.print("Etat LED : ");
24
  Serial.println(getLedEtat());
25
  delay(500);
26
  ledBascule();
27
  Serial.print("Etat LED : ");
28
  Serial.println(getLedEtat());
29
  delay(500);
30
  ledCommande(ALLUME); //Commande d'un état allumé ou éteint
31
  Serial.print("Etat LED : ");
32
  Serial.println(getLedEtat());
33
  delay(500);
34
  ledCommande(ETEINT);
35
  Serial.print("Etat LED : ");
36
  Serial.println(getLedEtat());
37
  delay(500);
38
}

La bibliothèque à créer sera constituée de deux fichiers led.h et led.ino. Voici le contenu du fichier header :

1
int ledPin;
2
bool ledEtat; //Variable contenant l'état de la LED (mise à jour par la plupart des  fonctions ci-dessous)
3
bool ledInitialise(int ); //Initialise le numéro de port et contrôle les erreurs
4
void ledAllume(); //Allume la LED
5
void ledEteint(); //Eteint la LED
6
void ledBascule(); //Change l'état de la LED
7
void ledFlash(int); //Fait clignoter rapidement (100ms par état) la LED un certain nombre de fois
8
void ledCommande(bool); //Commande l'état de la LED, allumée ou éteinte
9
bool getLedEtat(); //Renvoie l'état de la LED

Question

Il est demandé de développer et tester le contenu de led.ino de la bibliothèque.

Indice

Pour ajouter des fichiers à un projet Arduino, il faut cliquer sur la flèche en haut à droite :

Gestion des onglets

Puis cliquer sur « Nouvel onglet » pour ajouter un nouveau fichier au projet :

Amélioration du programme principal

Le programme principal comporte une séquence assez répétitive, similaire à celle-ci :

1
Serial.print("Etat LED : ");
2
Serial.println(getLedEtat());
3
delay(500);

Question

Proposez une solution pour améliorer la lisibilité du programme principal.

Travail à rendre

Seul la dernière version du programme est à rendre. Vous exporterez le croquis (OutilsArchiver le croquis) puis le déposerez sur la plate-forme pédagogique selon les instructions qui vous seront indiquées.

Tout programme non commenté ne sera pas corrigé.