Augmenter le nbre de sorties avec 74HC595N - Part II

Description
L'article "Augmenter le nbre de sorties avec 74HC595N - Part I" expliquait comment utiliser un 74HC595 pour augmenter le nombre de sorties digitales d'un Arduino.
Il y avait deux amélioration possibles pour ce montage.
L'une d'entre elles concernait l'utilisation d'un code source permettant le contrôle de chaque sortie indépendamment de l'autre.
C'est le but de cet article.

Quelques explications sur le code
En plus de permettre le contrôle de chaque sortie du 74HC595 indépendamment des autres, le code source présenté ci-dessous possède les caractéristiques suivantes:
  • Déclaration et utilisation d'une classe BQS_DigitalOutExt (digital output extension) pour simplifier l'écriture du code de loop().
  • Utilisation de méthode "prepareXXX" qui permet de modifier l'état de plusieurs sortie avant d'appliquer le nouvel état.
  • Déclaration des méthodes setOutput, switchOutput, resetOutputs pour modifier immédiatement l'état des sortie (applique aussi les "prepareXXX")
  • Un code complètement documenté avec une description pour chaque méthode.
Le code source
Source: ShiftRegisterEnh.pde

Grâce à la déclaration de la classe BQS_DigitalOutExt, le code principal du programme (loop) devient extrêmement simple et lisible.
Pour simplifier la lecture, j'ai volontairement omis de reprendre la déclaration de la classe. Elle reste cependant disponible dans le fichier source ShiftRegisterEnh.pde

/* ------------------------------------------
     Arduino Main Loop
   ------------------------------------------ */

// Declare OutputExtension control pining for 74HC595 
int oeDataPin = 2;
int oeClockPin = 3;
int oeLatchPin = 4;

// Declare Output Extension
BQS_DigitalOutExt outExt = BQS_DigitalOutExt( oeDataPin, oeClockPin, oeLatchPin );

void setup(){

}

void loop(){
  // Modifie directement une sortie
  outExt.setOutput( 0, HIGH );
  
  delay( 2000 ); // 2 sec
  
  // Prepare une triple modification
  outExt.prepareOutput( 7, HIGH );
  outExt.prepareOutput( 1, HIGH );
  outExt.setOutput( 0, LOW ); // applique les modifications
  
  delay( 2000 );
  
  // Clear all outputs
  outExt.resetOutputs();

  // Switch on/off each output (one at the time).
  for( int i = 0; i<=7; i++ ){
    outExt.switchOutput( i );
    delay( 300 );
    outExt.switchOutput( i );
    delay( 300 );
  }
  
  // Clear all outputs
  outExt.resetOutputs();
}

Améliorations possibles
La classe BQS_DigitalOutExt pourrait être améliorée pour recevoir quelques fonctionnalités complémentaires... voire aussi contrôler une double 74HC595, ce qui porterait le nombre de sortie digitale à 16!
Par ailleurs, une telle classe serait plus facile à ré-utiliser si elle était disponible sous forme de librairie.
Il y a encore un peu de travail à faire :-)