Header Ads

Librairie: ButtonTools V0.01

Description
ButtonTools vise a simplifier la capture de l'état des boutons poussoir de type pull-down à partir d'Arduino.
Son principal avantage est d'offrir la classe PushButton qui permet:
  • De faire la collecte des états via la fonction PushButton::Update() appelée à interval régulier dans loop()
  • D'inclure un déparasitage logiciel (software debounce).
    Voir l'article "Entrée Bouton - Résistance pull-up, pull-down et déparasitage" pour complément d'information.
  • D'offrir les méthodes PushButton::HasPressed(), PushButton::AsPressedMany(), etc pour lire facilement l'état du bouton dans le programme.
Téléchargement

Fichier: ButtonTools v001.zip
Cette archive contient le répertoire ButtonTools qu'il suffit de placer dans le répertoire librairies d'Arduino IDE (dans /usr/share/arduino/librairies)

Exemple d'utilisation
Le schéma électronique et fonctionnement de cet exemple sont décris dans l'article "Led Class - Part 3 | PushButton Class - Part 2" alors que les classes MonoLed et PushButton étaient encore en cours d'écriture.

Source de l'exemple: ArduinoCar_Test_BtnInterface_Lib.pde

Note importante:
Cet exemple utilise également la librairie LedTools v0.01 publiée dans un autre article.


// Inclusion de mon fichier "ButtonTools.h" pour faciliter la capture des états des boutons.
// Provoque aussi l'erreur "expected unqualified-id before ‘double’" à cause de l'inclusion
//   de "WConstants.h" nécessaire à la définition dy type "boolean".
#include <ButtonTools.h>
#include <LedTools.h>

// Evite l'erreur "expected unqualified-id before ‘double’"
// voir article http://forums.adafruit.com/viewtopic.php?f=25&t=19511 on AdaFruit Forum
#undef round 

// ==========================================================
//     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 
}


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); 
}