User Tools

Site Tools


in202:seance_7:jalon_4

Jalon 4: Ajout d'un mode clignotement

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

  1. qu'à modifier la fonction DriveLed(),
  2. 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)
  3. 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: Commande la diode par le bouton poussoir

in202/seance_7/jalon_4.txt · Last modified: 2022/11/18 10:45 (external edit)