Exercice : Interrupteur virtuel
Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi
On souhaite améliorer la classe Bp
sans pour autant la modifier. Nous allons donc créer une classe fille qui enrichira la classe d'origine en lui ajoutant des fonctionnalités supplémentaires, l'objectif étant de simuler un interrupteur à deux positions à l'aide du poussoir.
Question
Proposer une solution à base de classe héritée pour simuler l'interrupteur à deux positions
Question
Incorporez la nouvelle classe l'exercice précédent et créez un objet que vous utiliserez en remplacement de l'objet de classe Bp
Solution
1
Programme principal
2
3
4
5
6
7
8
9
Led diode(PORT_LED);
10
InterVirtuel bouton(PORT_BP);
11
12
//Programme principal
13
void setup() {
14
}
15
16
void loop() {
17
18
/* ancienne version (qui fonctionne toujours) en mode "bouton poussoir"
19
//Lire Bp et allumer Led si Bp enfoncé, éteindre sinon
20
if(bouton.getBpState()){diode.setOn();}
21
else{diode.setOff();}
22
*/
23
bouton.refresh();
24
if(bouton.getState()){
25
diode.setOn();
26
}else{diode.setOff();}
27
}
28
29
InterVirtuel.h
30
31
class InterVirtuel : public Bp{
32
private:
33
bool state;
34
bool previousState;
35
bool currentState;
36
public:
37
InterVirtuel(int);
38
bool getState();
39
void refresh();
40
};
41
42
InterVirtuel.ino
43
44
45
InterVirtuel::InterVirtuel(int value) : Bp(value) {
46
previousState = 0;
47
currentState = 0;
48
state = 0;
49
}
50
void InterVirtuel::refresh(){
51
currentState = getBpState();
52
if(!previousState && currentState){
53
state = !state;
54
delay(100);
55
}
56
previousState = currentState;
57
}
58
bool InterVirtuel::getState(){
59
60
return(state);
61
}