Table des matiéres
Do not index
Do not index
Hide CTA
Hide CTA

Objectifs
Afin de préparer l’avenir de la chaine dans les meilleures conditions, j’aimerais présenter dans ce billet un rapide aperçu des bases de la programmation orienté objet avec Arduino. Point remarquable mais, travailler avec une Arduino pour faire des classes objets C++ fait d’autant plus sens que cette fois l’analogie entre le monde objet physique et le monde abstrait de la programmation objet fait parfaitement sens. Dans cet article, on prendra le montage de l’article précédent sur le contrôle du relais mécanique et fabriquer notre propre objet DriverRelai en charge d’ajouter des fonctionnalités logiques à notre relais.
Le fichier Header.h
Le fichier header est un fichier déclaratif qui sera lu par le compilateur en amont du reste. Créer ce fichier séparé permet une structure de code plus élégante.

La “Vie privée” d’une classe objet
Le langage C++ est autant strict sur les types qu’il ne l’est sur ce qu’on appelle L’encapsulation de la Classe. L’Encapsulation c’est le pouvoir de rendre une partie des membres et méthodes d’une classe publique ou privée dans le but de contrôler ce qu’un utilisateur extérieur de la classe peut manipuler sans risque.

Code source DriverRelai.h
#ifndef RELAI_HEADER
#define RELAI_HEADER //Evite les inclusions multiples
#include "Arduino.h" //Charge la librairie Arduino par defaut
class DriverRelai // Objet relai
{
private :
int data_pin; //Acceuil la définition du Pin sur la carte arduino
boolean current_state; //Définie l'état actuel du relai
public:
DriverRelai(int); //Constructeur : attend le pin du relai en parametre.
void switchOff(); //Met en position NC
void switchOn(); //Met en position NO
void switchState(); //Inverse l'état actuel du relais
boolean getCurrentState(); //Renvoie l'etat actuel de current_state
};
#endif
Code source DriverRelai.cpp
#include <Arduino.h>
#include "DriverRelai.h"
DriverRelai::DriverRelai(int pin)
{
data_pin = pin;
pinMode(data_pin, OUTPUT);
current_state = false;
}
void DriverRelai::switchOn()
{
current_state = true;
digitalWrite(data_pin, current_state);
}
void DriverRelai::switchOff()
{
current_state = false;
digitalWrite(data_pin, current_state);
}
void DriverRelai::switchState()
{
current_state = !current_state;
digitalWrite(data_pin, current_state);
}
boolean DriverRelai::getCurrentState()
{
return current_state;
}
Code source Sketch.ino
#include "DriverRelai.h"
// On declare un objet de type DriverRelai
DriverRelai mon_relai(2);
void setup() {
//On ammorce la connection serial
Serial.begin(9600);
}
void loop() {
//On force l'allumage du relai.
mon_relai.switchOn();
//Attente 2sec
delay(2000);
//On force l'extinction du relai.
mon_relai.switchOff();
//Attente 2sec
delay(2000);
//Boucle de 6 tours qui va inverser l'etat à chaque tour. (Dure au total 1.2 sec)
//Sachant que le nombre de tour est pair, le relai doit resortir de cette boucle a l'etat ETEINT
for (int i = 0; i < 6; i++){
//On inverse l'etat.
mon_relai.switchState();
//Attente 0.2 sec
delay(200);
}
//Envoie sur le port serie l'etat actuel du relai.
//Le membre current_state etant un boolean, est attendu le nombre 0 dans le moniteur serie
Serial.println(mon_relai.getCurrentState());
}