Electronique > Les bases

5/ Faire un chenillard

Dans cet article nous allons apprendre à faire un chenillard : 

Si vous n'êtes pas à l'aise avec la programmation Arduino, ou l'utilisation d'une breaboard, je vous conseille de lire cet article en cliquant ici.

Voici le schéma électrique :

 

Le branchement sur la breadboard :

Et le programme : 

// Broche où la led est branchée
const int BROCHE_LED_1 = 0;
const int BROCHE_LED_2 = 1;
const int BROCHE_LED_3 = 2;
const int BROCHE_LED_4 = 3;
const int BROCHE_LED_5 = 4;
const int BROCHE_LED_6 = 5;


void setup() {
  // on défini les broches en sortie.
  pinMode(BROCHE_LED_1, OUTPUT); 
  pinMode(BROCHE_LED_2, OUTPUT); 
  pinMode(BROCHE_LED_3, OUTPUT); 
  pinMode(BROCHE_LED_4, OUTPUT); 
  pinMode(BROCHE_LED_5, OUTPUT); 
  pinMode(BROCHE_LED_6, OUTPUT); 
}
    
void loop() {
  // On allume la led 1, en mettant la sortie au niveau haut (5V)
  digitalWrite(BROCHE_LED_1, HIGH);
  // On attend 0,2 seconde 
  delay(200);
  // On éteint la led 1, en mettant la sortie au niveau bas (0V)
  digitalWrite(BROCHE_LED_1, LOW);

  // On fait pareil pour la led 2
  digitalWrite(BROCHE_LED_2, HIGH);
  delay(200);
  digitalWrite(BROCHE_LED_2, LOW);
  
  // On fait pareil pour la led 3
  digitalWrite(BROCHE_LED_3, HIGH);
  delay(200);
  digitalWrite(BROCHE_LED_3, LOW); 

  // On fait pareil pour la led 4
  digitalWrite(BROCHE_LED_4, HIGH);
  delay(200);
  digitalWrite(BROCHE_LED_4, LOW);

  // On fait pareil pour la led 5
  digitalWrite(BROCHE_LED_5, HIGH);
  delay(200);
  digitalWrite(BROCHE_LED_5, LOW);

  // On fait pareil pour la led 6
  digitalWrite(BROCHE_LED_6, HIGH);
  delay(200);
  digitalWrite(BROCHE_LED_6, LOW);
}

Comme vous pouvez le voir sur le programme ci dessus, on répete beaucoup de fois le même code en changeant juste le numéro de la LED qui s'allume ou s'éteint.
On peux simplifier le programme en utilisant une boucle :

for en anglais.

Voici le programme simplifié :

void setup() {
  // on défini les broches de 0 à 6 en sortie.
  for(int i=0;i<=6;i++) {
    pinMode(i, OUTPUT); 
  }
}
    
void loop() {
  // on execute le code ci dessous 6 fois
  for(int i=0;i<=6;i++) {
    digitalWrite(i, HIGH);
    delay(200);
    digitalWrite(i, LOW);
  }
}

Si on souhaite faire afficher les leds en aller et retour, il suffit de modifier le code :

void setup() {
  // on défini les broches de 0 à 6 en sortie.
  for(int i=0;i<=5;i++) {
    pinMode(i, OUTPUT); 
  }
}
    
void loop() {
  // on execute le code ci dessous 6 fois de 0 à 6
  for(int i=0;i<=5;i++) {
    digitalWrite(i, HIGH);
    delay(200);
    digitalWrite(i, LOW);
  }

  //on execute le code ci dessous 6 fois de 6 à 0
   for(int i=5;i>=0;i--) {
    digitalWrite(i, HIGH);
    delay(200);
    digitalWrite(i, LOW);
  }
}

Vous allez voir qu'avec ce code, il y'a un petit défaut dans l'affichage.
En effet quand on arrive sur la premiere et la derniere led, le délai d'allumage est plus long. Cela est du au 2 boucles for qui se chevauche.

Voila la dernière version du programme améliorée :

void loop() {
  // on execute le code ci dessous 6 fois de 0 à 6
  for(int i=0;i<=4;i++) {
    digitalWrite(i, HIGH);
    delay(200);
    digitalWrite(i, LOW);
  }

  //on execute le code ci dessous 6 fois de 6 à 0
   for(int i=5;i>=1;i--) {
    digitalWrite(i, HIGH);
    delay(200);
    digitalWrite(i, LOW);
  }
}