Chenillard à Leds - part 1

En guise de premier projet, voici un mini chenillard à leds.
Pour le moment, il n'y a que quelques modèles d'allumage et extinction des leds qui tournent en boucle.
Par la suite, j'ajouterais quelques fonctionnalités.

Ce premier petit projet n'est certes pas compliqué mais il me permet de faire une prise en main d'Arduino assez rapidement.

Plan de montage



Code Source
Fichier: chenillard.pde

/*
 * Chenillard pour Leds branchées sur Pin 6 -> 13 (8 leds)
 */
 
 int NbrLed = 8; // nbre de Leds dans le tableau
 int ledPins[] = { 6,7,8,9,10,11,12,13 };  // Tableau contenant les Pins pour les leds
 
 int interval = 80; // // Interval entre deux actions LEDS, 100 ms
 
 void setup(){
   // Activer les pins pour les leds en sortie
   for( int i=0; i<NbrLed; i++ )
     pinMode( ledPins[i], OUTPUT );
 }
 
 void loop(){
   OnOffAll();
   OnOffEachAtTheTime_LtoR();
   OnOffEachAtTheTime_RtoL();
   GraduatedOnOff_LtoR();
   GraduatedOnOff_RtoL();
   K2000();
 }
 
 // Allume puis éteind toutes les leds en meme temps
 // 8 fois (pcq 8 leds).
 //
 void OnOffAll(){
   for( int iTime=0; iTime<NbrLed; iTime++ )
     for( int iOnOff=0; iOnOff<2; iOnOff++ ) {
       for( int i=0; i<NbrLed; i++ )
         if( iOnOff == 0 ) // Allumer au premier passage  
           digitalWrite( ledPins[i], HIGH );
         else // Eteindre au deuxième passage
           digitalWrite( ledPins[i], LOW );
       delay( interval ); 
     }
 }
 
 // Allume puis éteind chaque led, chaque led a son tour.
 // De gauche à droite
 void OnOffEachAtTheTime_LtoR(){
   for( int i=0; i<NbrLed; i++ ){
     digitalWrite( ledPins[i], HIGH );
     delay( interval );
     digitalWrite( ledPins[i], LOW );
     delay( interval );
   }
 }

 void OnOffEachAtTheTime_RtoL(){
   for( int i=NbrLed-1; i>=0; i-- ){
     digitalWrite( ledPins[i], HIGH );
     delay( interval );
     digitalWrite( ledPins[i], LOW );
     delay( interval );
   }
 }
 
 // allume toutes les leds une par une puis les éteinds
 // De Gauche à Droite
 void GraduatedOnOff_LtoR(){
   for( int i=0; i<NbrLed; i++ ) {
     digitalWrite( ledPins[i], HIGH );
     delay( interval );  
   }
   for( int i=0; i<NbrLed; i++ ) {
     digitalWrite( ledPins[i], LOW );
     delay( interval );  
   }
 }

 // allume toutes les leds une par une puis les éteinds
 // De Gauche à Droite
 void GraduatedOnOff_RtoL(){
   for( int i=NbrLed-1; i>=0; i-- ) {
     digitalWrite( ledPins[i], HIGH );
     delay( interval );  
   }
   for( int i=NbrLed-1; i>=0; i-- ) {
     digitalWrite( ledPins[i], LOW );
     delay( interval );  
   }
 }

 // Allume et éteind les leds à la façon K2000
 // Un aller retour complet
 void K2000(){
   for( int i=0; i<NbrLed; i++) {
      // Allume uniquement la led, la précédente et la suivante
      // éteind toutes les autres.
      for( int iBrowser=0; iBrowser<NbrLed; iBrowser++ ) 
        if( iBrowser==(i-1) || iBrowser==(i+1) || iBrowser==i )
          digitalWrite( ledPins[iBrowser], HIGH );
        else
          digitalWrite( ledPins[iBrowser], LOW );
      delay( interval );
   }

   for( int i=NbrLed-1; i>=0; i--) {
      // Allume uniquement la led, la précédente et la suivante
      // éteind toutes les autres.
      for( int iBrowser=0; iBrowser<NbrLed; iBrowser++ ) 
        if( iBrowser==(i-1) || iBrowser==(i+1) || iBrowser==i )
          digitalWrite( ledPins[iBrowser], HIGH );
        else
          digitalWrite( ledPins[iBrowser], LOW );
      delay( interval );
   }
   
   // eteind les deux dernières led
   digitalWrite( ledPins[0], LOW );
   digitalWrite( ledPins[1], LOW );
}