This is an old revision of the document!
L'objectif du C++ n'est pas de faire le code le plus court, C++ a pour objectif de simplifier la lisibilité, la maintenance et la réutilisation du code.
Sur le montage que vous avez, nous avons des composants physiques. Pour l'instant, nous n'avons que deux familles de composants :
L'idée est d'abstraire les composants par des classes qui offrent les fonctionalités d'une diode et d'un bouton poussoir en cachant l'ensemble des opérations de bas-niveaux que sont digitalRead()
, digitalWrite()
, pinMode()
etc.
En vous inspirant de ce qui a été fait sous Tinkercad, proposer une classe Led
en définissant :
Led
,Led
,Led
et pourquoi pas proposer aussi des opérations :
operator = (bool)
pour allumer éteindre la Led
,operator bool() const
pour récupérer l'état de la Led
,Led
ou avec une valeur booléenne : operator == ()
et
operator != ()
operator !()
.Tout ceci vous permettra de réaliser les opérations classiques sur la Led.
blink
que vous allez sauvegarder dans un répertoire.setup()
et loop()
. Normalement, il ne devrait y avoir aucune information dans le code setup()
.
L'idée est que vous ajouter une option debug
qui par défaut est à faux. De plus, il serait bien dans ce cas d'avoir aussi le nom de la “diode” pour pouvoir identifier le composant qui envoie des messages.
Led
pour contenir les deux informations supplémentaires, le nom de la diode ainsi qu'un drapeau (une valeur booléenne) qui indique si le mode débogage est activé.debug
est activé sur la diode. Le message doit contenir le nom de la diode ainsi que le nouvel état de celle-ci.En fait le mode débogage est un mode qui est intéressant pour tous les composants. On peut donc mutualiser partie du code pour tous les composants.
L'idée est de proposer une classe de base que l'on appellera CustomComponent
dont héritera l'ensemble des autres classes composants comme par exemple Led
.
class CustomComponent { protected; CustomComponent(const char* name, bool debug) {} public: bool debugIsActive() const; const char* getName() const; const char* header() const; // Génère l'entête de message avec le nom du composant. };
Led
qui hérite désormais de cette classe de base.class CustomComponent { protected; CustomComponent(const char* name, bool debug) {} public: bool debugIsActive() const; const char* getName() const; const char* header() const; // Génère l'entête de message avec le nom du composant. }; class Led: public CustomComponent { public: };
Précédent: Obtenir des informations
Suivant: Gérer deux LEDs