Exercice : Accesseur de lecture
Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi
Nous allons maintenant ajouter un bouton poussoir. Nous souhaitons le fonctionnement suivant : lorsqu'on lance le programme, il ne se passe rien tant qu'on n'a pas appuyé sur le bouton poussoir. Tant que le bouton est enfoncé, le cycle de clignotement de la diode s'exécute. Il s'arrête si on relâche le bouton.
Lorsque l'interrupteur est ouvert, la broche d'entrée du micro-contrôleur est « en l'air » : il est donc nécessaire de fixer le potentiel à 0 via une résistance reliée au 0v.
Question
Modifiez le projet précédent pour introduire le fonctionnement du bouton poussoir pour lequel on définira une classe Bp
en s'inspirant de la classe Led précédente. Vous prévoirez un assesseur de lecture pour connaitre l'état du bouton.
Question
Testez la classe Bp seule dans un premier temps puis incorporez-la au programme précédente pour répondre au cahier des charges.
Solution
Programme principal
Led diode;
Bp bouton;
//Programme principal
void setup() {
diode.setPinLed(PORT_LED);
bouton.setPin(PORT_BP);
}
void loop() {
//Lire Bp et allumer Led si Bp enfoncé, éteindre sinon
if(bouton.getBpState()){diode.setOn();}
else{diode.setOff();}
}
Led.h
class Led{
private:
int pinLed;
public:
void setPinLed(int);
void setOn();
void setOff();
};
Led.ino
void Led::setPinLed(int port_number){
/*Avant d'affecter la valeur du port à pinLed, il faut
vérifier que cette valeur est conforme*/
if(port_number >=2 && port_number <=8){
pinLed = port_number;
}
else{
pinLed = 2;//En cas d'erreur, on peut par exemple utiliser une valeur par défaut
}
pinMode(pinLed, OUTPUT);
}
void Led::setOn(){
digitalWrite(pinLed, HIGH);
}
void Led::setOff(){
digitalWrite(pinLed, LOW);
}
Bp.h
class Bp{
private:
int pinBp;
public:
void setPin(int);
bool getBpState();
};
Bp.ino
void Bp::setPin(int value){
if(value >= PORT_MIN && value <= PORT_MAX){
pinBp = value;
pinMode(pinBp, INPUT);
}
else{
Serial.println("Erreur");
}
}
bool Bp::getBpState(){
return(digitalRead(pinBp));
}