Exercice : Contrôle des données
Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi
L'inconvénient de la classe précédente était que l'on accédait directement à l’attribut (ou variable membre) pinLed
. Nous allons donc ajouter une fonction qui permette d'accéder à cette variable membre :
class Led{
private:
int pinLed;
public:
void setPinLed(int value){pinLed = value;};
};
Question
Modifiez le programme principal de l'exercice précédent pour qu'il fonctionne correctement.
Dans le programme principal, vous avez sans doute utilisé l'instruction similaire à la suivante :
led.setPinLed(3);
Un programmeur mal informé pourrait par mégarde saisir une instruction comme celle-ci sans que cela n'empêche la compilation du programme :
led.setPinLed(30);
Question
Modifiez la fonction membre setPinLed()
pour limiter l'accès aux ports 2 à 8. En cas d'erreur, on initialisera le port à la valeur la plus faible.
Question
En cas d'erreur, il serait souhaitable que la fonction setPinLed()
renvoie une information la signalant. On pourrait se contenter d'afficher un message sur le moniteur mais l'utilisateur final de votre classe préféra peut-être une autre solution, il faut donc lui laisser ce choix. Il vous est donc demandé de faire en sorte que la fonction renvoie un simple code d'erreur, par exemple 1 si il y a une erreur et 0 sinon, que l'on pourra ensuite exploiter à sa guise dans le programme principal.
Solution
class Led {
private:
int pinLed;
public:
int setPinLed(int value) {
if (value >= PORT_MIN && value <= PORT_MAX) {
pinLed = value;//Valeur correcte
return (0);
}
else {
pinLed = PORT_MIN;//Valeur incorrecte
return (1);
}
};
int getPinLed() {
return (pinLed);
};
};
Led led;
int erreur;
void setup() {
Serial.begin(9600);
erreur = led.setPinLed(PORT_LED) ;
if (erreur == 0) {
pinMode(led.getPinLed(), OUTPUT);
} else {
Serial.println("Erreur de port");
}
}
void loop() {
if (erreur == 0) {
digitalWrite(led.getPinLed(), HIGH);
delay(1000);
digitalWrite(led.getPinLed(), LOW);
delay(1000);
}
}