====== 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]]