Une introduction aux Librairies et Classes C++ avec Arduino

Une introduction aux Librairies et Classes C++ avec Arduino
Do not index
Do not index
Hide CTA
Hide CTA
Video preview

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.
notion image

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.
notion image

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());
  

}
 
Cyril

Written by

Cyril

Hobbyiste en électronique, programmation et IA