====== Jalon 4: Ajout d'un mode clignotement ======
[[in202:seance_7|Retour à la séance 7]]
====== Phase 1 ======
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 :
* ajouter une méthode //protégée// qui effectue l'opération ''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.
====== 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.
* Si ''m_IsBlinking'' est ''true'' alors la diode clignote,
* Si ''m_IsBlinking'' est ''false'' alors la diode ne clignote pas.
Quand nous appelons la fonction ''Tick()'' que se passe-t-il ?
* Si ''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.
* Si ''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()''.
* Si ''m_IsBlinking'' est ''false'', ''DriveLed()'' appelle ''analogWrite(m_Intensity)'', c'est le fonctionnement par défaut.
* Si ''m_IsBlinking'' est ''true'', nous devons déterminer si nous somme dans la phase ''on'' ou la phase ''off'' (du clignogement).
* Si ''on'', on allume la diode en appelant ''analogWrite(m_Intensity)''
* Si ''off'', on éteint la diode en appelant ''analogWrite(0)''.
Voilà, il en reste plus
- qu'à modifier la fonction ''DriveLed()'',
- d'ajouter une fonction ''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'')
- et enfin la fonction ''Tick()'' qui est appellée toutes les secondes afin de pouvoir soit allumer, soit éteindre la diode quand le mode de clignotement est actif.
====== Phase 3 ======
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: **[[.:jalon_3|Commande la diode par le bouton poussoir]]