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
#define PORT_LED 7
4
#define PORT_BP 6
5
#include "Led.h"
6
#include "Bp.h"
7
#include "InterVirtuel.h"
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
}