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 :
void setup() {
Serial.begin(9600);
if(!ledInitialise(PORT_LED)){
Serial.println("Le numéro de port n'est pas valide !");
while(1); //On bloque l'exécution du programme.
}
ledFlash(5); //Cette fonction fait clignoter la LED rapidement un certain nombre de fois
}
/*Boucle principale */
void loop() {
ledAllume(); //Cette fonction allume la LED
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
delay(5000);
ledEteint(); //et celle-là l'éteint...
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
delay(5000);
ledBascule(); //Cette fonction inverse l'état de la LED.
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
delay(500);
ledBascule();
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
delay(500);
ledCommande(ALLUME); //Commande d'un état allumé ou éteint
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
delay(500);
ledCommande(ETEINT);
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
delay(500);
}
La bibliothèque à créer sera constituée de deux fichiers led.h
et led.ino
. Voici le contenu du fichier header :
int ledPin;
bool ledEtat; //Variable contenant l'état de la LED (mise à jour par la plupart des fonctions ci-dessous)
bool ledInitialise(int ); //Initialise le numéro de port et contrôle les erreurs
void ledAllume(); //Allume la LED
void ledEteint(); //Eteint la LED
void ledBascule(); //Change l'état de la LED
void ledFlash(int); //Fait clignoter rapidement (100ms par état) la LED un certain nombre de fois
void ledCommande(bool); //Commande l'état de la LED, allumée ou éteinte
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.
Amélioration du programme principal
Le programme principal comporte une séquence assez répétitive, similaire à celle-ci :
Serial.print("Etat LED : ");
Serial.println(getLedEtat());
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 (Outils
→ Archiver 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é.