Led Class - Part 3 | PushButton Class - Part 2

Introduction
Après "Led Class - Part 1", "Led Class - Part 2", voici enfin le dernier volet de cet article.
Cette fois-ci, j'ai transformé le code de LedTools.h pour en faire une vraie classe nommée MonoLed (pour Monochrome Led).

Il n'est pas exclus que je complète un jour ce code pour ajouter de nouvelles fonctionnalités voire même une classe RGBLed :-) .

Modifications de fonctions
Quelques fonctions décrites dans "Led Class - Part 1" ont été renommées pour permettre une plus grande lisibilité du code.
Le corps du programme de démo (disponible ci-dessous) est d'une grande lisibilité et ne nécessite pas de longue explications.

Documentation des fonctions
Le fonctionnement de toutes les fonctions/méthodes est clairement décrites dans les commentaires des fichier h et cpp.

La classe PushButton
Vous noterez aussi au passage que le code de ButtonTools.h contient maintenant une classe, elle même l'aboutissement du précédent article "PushButton Class - Part 1".
Les fichier ButtonTools.h et ButtonTools.cpp (disponibles ci-dessous) contiennent les descriptions des fonctions/méthodes dans les différents commentaires.

Démonstration
Le petit programme de démonstration suivant illustre l'utilité des deux classes PushButton et MonoLed telles qu'elles seront utilisées dans le projet ArduinoCar.
  • Un bouton Start commande l'état startState.
    Un second bouton Debug commande l'état debugState.
  • Lorsque startState est vrai, la led est allumée (pour signaler le fonctionnement du programme).
  • Si debugState est faux, la led est allumée en mode fixe.
    Par contre, si debugState est vrai, la led clignote (pour signaler un fonctionnement en mode "debug").

Voici donc le résultat obtenu:

ainsi que le résultat du log dans le moniteur (moins visible dans la vidéo).
Le sigle "[X]" signifie "état activé" tandis que le sigle "[ ]" signifie "état désactivé".

 -----------------------------
Started [X]
Debug [ ]
 -----------------------------
Started [X]
Debug [X]
 -----------------------------
Started [X]
Debug [ ]
 -----------------------------
Started [X]
Debug [X]
 -----------------------------
Started [ ]
Debug [X]
 -----------------------------
Started [ ]
Debug [ ]
 -----------------------------
Started [ ]
Debug [X]
 -----------------------------
Started [X]
Debug [X]
 -----------------------------
Started [ ]
Debug [X]
 -----------------------------
Started [ ]
Debug [ ]
 -----------------------------
Started [X]
Debug [ ]
 -----------------------------
Started [ ]
Debug [ ]

Code Source de la démo
Fichier Source: ArduinoCar_Test_BtnInterface_Class.zip
// ==========================================================
//     MAIN PROGRAM
// ==========================================================

int pinStart = 7; // Start/Stop - Brun
int pinDebug = 8; // Debug Switch - Orange

int pinLed = 9;    // State Led

PushButton btnStart;
PushButton btnDebug;
MonoLed ledYellow;
boolean debugState = false; // Debug Mode activated
boolean startState = false; // Start/Stop mode

void setup() {
  Serial.begin( 9600 );

  // Boutons
  btnStart.Attach( pinStart );
  btnDebug.Attach( pinDebug );
  
  //-- Declare a FIXED LIGHTNING led ----------
  ledYellow.Attach( pinLed, LED_FIXED );
  
  //-- Declare a BLINKING led -----------------
  //ledYellow.Attach( pinLed, LED_BLINK );
  
  
  ledYellow.SetBlinkInterval( 300 ); // Change the default blink interval 
}


void loop(){
  // Update all the button statistics
  btnStart.Update(); 
  btnDebug.Update();

  // Update the led
  ledYellow.Update();  
   
  // Wait the the user press the button "btn" to send the 
  // resume of operation over the serial port
  boolean bChanged = false;
  
  // When the btn is pressed (read once only)
  if( btnStart.HasPressed() ) {
    startState = !(startState);
    bChanged = true;
  }  
  
  if( btnDebug.HasPressedMany() ){
    debugState = !(debugState);
    bChanged = true;
  }
  
  // Afficher un changement d'état
  if( bChanged ){
    Serial.println( " -----------------------------" );
    if( startState ) 
      Serial.println( "Started [X]" );
    else
      Serial.println( "Started [ ]" );
    
    
    if( debugState ) 
      Serial.println( "Debug [X]" );
    else
      Serial.println( "Debug [ ]" );
      
    
    bChanged = false;
  }
  
  // Make the led ON when startState = true
  ledYellow.Turn( startState );
  
  // Change display type to LED_BLINK when debugState = true
  if( debugState )
    ledYellow.ChangeDisplayType(LED_BLINK);
  else
    ledYellow.ChangeDisplayType(LED_FIXED); 
}

Constructeurs spécifiques
Les classes MonoLed et PushButton disposent toutes deux de constructeurs spécifiques permettant l'initialisation des paramètres principaux sans faire appel aux méthode Attach().
Cela réduit sensiblement le nombre de lignes nécessaires à l'initialisation.
// ==========================================================
//     MAIN PROGRAM
// ==========================================================

int pinStart = 7; // Start/Stop - Brun
int pinDebug = 8; // Debug Switch - Orange

int pinLed = 9;    // State Led

PushButton btnStart( pinStart );
PushButton btnDebug( pinDebug );
MonoLed ledYellow( pinLed, LED_FIXED );

boolean debugState = false; // Debug Mode activated
boolean startState = false; // Start/Stop mode

void setup() {
  Serial.begin( 9600 );
    
  ledYellow.SetBlinkInterval( 300 ); // Change the default blink interval 
}