Code source du chenillard 8 led

Retour à la page du projet

Afficher/Masquer les commentaires

La constante TEMPO contient le temps en ms entre deux allumages de motifs.

const int TEMPO=100;

Le tableau sequence contient le codage des différents motifs à allumer.

Chaque motif est codé sur 8 bits et peut donc être défini par un nombre décimal compris entre 0 et 255, par exemple pour les premiers nombres de la séquence :

byte sequence[]={1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,85,170,85,170,85,170,255,255,0,0,255,255,0,0};

Tout programme Arduino, possède une fonction setup dans laquelle on place les instructions d'initialisation : cette fonction est appelée une seule fois au démarrage du module Arduino.

La boucle permet de mettre en mode OUTPUT les bornes 2 à 9 sur lesquelles les LED sont branchées, du coup on peut les allumer ou les éteindre par programmation.

void setup(){
  
  for (int i=2;i<=9;i++) {
    pinMode(i,OUTPUT);
  }
  
}

Tout programme Arduino possède également une fonction loop qui s'exécute indéfiniment.

void loop(){

La boucle permet de parcourir les 29 éléments du tableau sequence (qui sont numérotés de 0 à 28).

Chacune des valeurs de ce tableau est utilisée comme paramètre pour appeler la fonction motif qui s'occupe de réaliser "l'affichage" sur les LED du motif correspondant.

Entre chaque "affichage" une pause de durée TEMPO est réalisée, gelant le motif.

  for (int i=0;i<29;i++){
    motif(sequence[i]);
    delay(TEMPO);
  }
 
}

Cette fonction sert à "afficher" un motif sur les LED, elle prend en argument un entier n de type byte qui contient le codage du motif à afficher.

void motif(byte n) {

L'algorithme de conversion en binaire est utilisé, le résultat est un nombre binaire sur 8 bits.

Pour en savoir plus : Conversion d'un entier en binaire

  byte bits[]={0,0,0,0,0,0,0,0};
  byte r;
  byte k=0;
  
  do{
    r=n%2;
    bits[k]=r;
    k++;
    n=(n-r)/2;
  }while(n!=0);

Une fois le nombre converti en binaire, il reste à assurer l'allumage des LED selon les éléments du tableau bits. Pour cela on réalise un boucle qui parcourt ce tableau.

L'instruction digitalWrite possède deux paramètres :

Dans notre cas bits[k] contient 0 ou 1 selon que la LED doit être allumée ou non, donc on passe directement bits[k] en deuxième paramètre de la fonction digitalWrite.

  for (int k=0;k<=7;k++){
    digitalWrite(k+2,bits[k]);
  }

}