Vous avez dans votre classe plusieurs commandes analogWrite()
que vous appelez pour règler l'intensite lumineuse de votre diode.
Pour préparer la suite :
analogWrite()
. Cette méthode peut s'appelée void DriveLed()
et elle aura typiquement comme contenu :void DriveLed() { analogWrite(GetPortNumber(), m_Intensity); }
Cette modification va simplifier la phase 2.
Pour l'instant votre fonction loop
est vide. Nous pouvons la modifier pour informer la classe DimmableLed
qu'une seconde est écoulée par exemple.
void loop() { led.Tick(); delay(1000); }
Nous pouvons ajouter un état à la classe DimmableLed
, par exemple l'état m_IsBlinking
qui indique si la diode clignote ou ne clignote pas.
m_IsBlinking
est true
alors la diode clignote,m_IsBlinking
est false
alors la diode ne clignote pas.
Quand nous appelons la fonction Tick()
que se passe-t-il ?
m_IsBlinking
est true
, alors nous devons changer l'état de la diode, si elle était allumée, on l'éteint, sinon on l'allume.m_IsBlinking
est false
, nous ne faisons rien.
Comment faisons nous l'opération d'allumer ou d'éteindre ? Nous pouvons déléguer cette opération à la fonction DriveLed()
.
m_IsBlinking
est false
, DriveLed()
appelle analogWrite(m_Intensity)
, c'est le fonctionnement par défaut.m_IsBlinking
est true
, nous devons déterminer si nous somme dans la phase on
ou la phase off
(du clignogement).on
, on allume la diode en appelant analogWrite(m_Intensity)
off
, on éteint la diode en appelant analogWrite(0)
.Voilà, il en reste plus
DriveLed()
, Blink()
qui active le clignotement ou désactive le clignotement (si m_IsBlinking
est true
, on le désactive et m_IsBlinking
est mis à 0, sinon on active le clignotement et m_IsBlinking
est mis à true
)Tick()
qui est appellée toutes les secondes afin de pouvoir soit allumer, soit éteindre la diode quand le mode de clignotement est actif.
Modifier la fonction OnVeryLongButtonClick()
pour que lorsque l'on appuie longtemps sur le bouton, on active ou on désactive le mode de clignotement.
Intégrer tout et tester.
Suivant: Jalon 3: Commande la diode par le bouton poussoir