Bibliothèque
Les library (Bibliothèque en français) sont des programmes qui contiennent des fonctions supplémentaires.
Celles-ci permettent de simplifier la programmation.
Les éditeurs modernes de code permettent d'intégrer facilement de nouvelles bibliothèques (Servo.h, ...)
Nous montrons ici le principe de l'écriture d'une bibliothèque.
Définition : Principe
Nous reprenons le clignotement de deux LEDs avec une fonction.
const int LED1 = 4;
const int LED2 = 5;
void clignotement(int led, int nb) {
for(int i = 0; i < nb; i++) {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop() {
clignotement(LED1, 3);
clignotement(LED2, 4);
}
Pour réaliser une bibliothèque, il faut créer deux fichiers :
un fichier d'en tête avec l'extension .h. Il contient les définitions des fonctions.
un fichier d'implémentation avec l’extension .cpp. il contient la programmation complète des fonctions.
Définition : fonction.h
// vérifie que fonction.h n'existe pas déjà
// commence la définition de fonction
void clignotement(int led, int nb); // déclaration de notre fonction
// fin de la définition
Définition : fonction.cpp
// on inclue les bibliothèques dont on a besoin
// on inclue la définition de notre bibliothèque
void clignotement(int led, int nb) {
for(int i = 0; i < nb; i++) {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}
}
Définition : main.cpp
Au final, on intègre notre bibliothèque dans le main et on l'utilise.
// on inclue la bibliothèque dont on a besoin
// on inclue la nouvelle bibliothèque
const int LED1 = 4;
const int LED2 = 5;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop() {
clignotement(LED1, 3); // on peut utiliser la bibliothèque
clignotement(LED2, 4);
}
Définition : Programmation Objet
La plupart des bibliothèques sont écrites en programmation Objet. La création d'objets sort de notre champ d'étude. Cependant, nous devrons en utiliser.
Je présente ici un exemple de programmation objet qui permet de gérer l'allumage de LEDs non bloquant.
class Led
{
private:
int pinLed;
unsigned long tpsOld = millis();
unsigned long tpsHigh;
unsigned long tpsLow;
public:
Led(int, unsigned long, unsigned long);
void clignotement();
};
Led::Led(int port, unsigned long tpsHigh, unsigned long tpsLow)
{
pinLed = port;
pinMode(pinLed, OUTPUT);
this->tpsHigh = tpsHigh;
this->tpsLow = tpsLow;
}
void Led::clignotement()
{
unsigned long tpsNew = millis();
if (tpsNew - tpsOld > tpsHigh && digitalRead(pinLed) == 1)
{
tpsOld = tpsNew;
digitalWrite(pinLed, 0);
}
if (tpsNew - tpsOld > tpsLow && digitalRead(pinLed) == 0)
{
tpsOld = tpsNew;
digitalWrite(pinLed, 1);
}
}
Led led1(2, 500, 500);
Led led2(3, 1000, 500);
Led led3(5, 500, 1000);
Led led4(7, 200, 1000);
void setup()
{
}
void loop()
{
led1.clignotement();
led2.clignotement();
led3.clignotement();
led4.clignotement();
}
Class : définie la structure de notre objet. C'est une usine à fabriquer des objets.
Led::Led : définie l'initialisation de l'objet
Led::clignotement : méthode qui permet de faire clignoter notre objet
Led led2(3, 1000, 500) : led2 est un objet Led. La Led sur la broche 3 est initialisée pour s'allumer 1000ms et s'éteindre 500ms.
led2.clignotement() : lance la fonction (méthode) clignotement sur l'objet led2.
Supposons que la classe se trouve dans la bibliothèque Led, il nous reste dans notre code :
Led led1(2, 500, 500);
Led led2(3, 1000, 500);
Led led3(5, 500, 1000);
Led led4(7, 200, 1000);
void setup()
{
}
void loop()
{
led1.clignotement();
led2.clignotement();
led3.clignotement();
led4.clignotement();
}