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 :
1 c'est 00000001 en binaire : toutes les leds sont éteinte sauf celle de droite,
2 c'est 00000010 en binaire : toutes les leds sont éteinte sauf la deuxième à partir de la droite,
4 c'est 00000100 en binaire : toutes les leds sont éteinte sauf la troisième à partir de la droite,
etc.
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 :
le premier indique le numéro de sortie à contrôler, comme les LED sont branchées sur
les bornes 2 à 9 on doit ajouter 2 à k
pour avoir le bon numéro,
le deuxième paramètre est habituellement HIGH
(envoyer du courant) ou LOW
(ne pas envoyer de courant) qui
sont en réalité des constantes : HIGH=1
et LOW=0
.
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]);
}
}