/// Déclaration de la classe Led class Led { private: byte pin; byte etat; // HIGH pour allumé, LOW pour éteint, // quelque soit la valeur de montageInverse bool montageInverse; // true si il faut LOW pour allumer ! void Rafraichir(); public: Led(byte aPin, bool aMontageInverse = false); // constructeur complet void Setup(); void Allumer(); void Eteindre(); }; // Définition des méthodes. Par convention, on commence par le constructeur Led::Led(byte aPin, bool aMontageInverse) { pin = aPin; montageInverse = aMontageInverse; } // Et le reste, dans l'ordre de définition de la classe pour s'y retrouver... void Led::Setup() { pinMode(pin, OUTPUT); // Je décide de commencer dans un état éteint... Eteindre(); } void Led::Allumer() { etat = HIGH; // Allumé Rafraichir(); } void Led::Eteindre() { etat = LOW; // Eteint Rafraichir(); } void Led::Rafraichir() { byte vraiEtat = etat; // on prend l'état demandé if (montageInverse == true) // si c'est un montage inversé vraiEtat = ! vraiEtat; // on inverse digitalWrite(pin, vraiEtat); // ou la ligne unique suivante : // digitalWrite(pin, etat ^ montageInverse); } /// Fin de la classe Led /// Partie classique du Sketch // On crée 2 leds Led rouge(10); // pin 10 Led verte(11); // pin 11 void setup() { rouge.Setup(); verte.Setup(); } void loop() { rouge.Allumer(); delay(1000); rouge.Eteindre(); delay(1000); verte.Allumer(); delay(1000); verte.Eteindre(); delay(1000); }