S'amuser avec 8 LED
Nous avons réussi a faire clignoter une LED; maintenant le moment est venu d'aller plus loin. Nous allons en connecter huit. Nous aurons aussi une occasion de pousser un peu l'Arduino en créant des séquences lumineuses variées. Ce circuit est aussi un bon marchepied pour apprendre à écrire vos propres programmes et se faire une idée de la façon dont fonctionne l'Arduino.
En même temps que le contrôle des LED nous commençons à voir quelques méthodes de programmation pour que vos programmes restent courts:
- boucles for - utilisées quand vous voulez exécuter un bloc de code plusieurs fois
- tableaux - utilisés pour faciliter la gestion de variables (c'est une liste de variables)
- fonctions - des blocks de code que l'on peut appeler.
COMPOSANTS
- LED de 5mm x 8
- Résistance de 330 ohms (orange-orange-brun) x 8
- Fils de connexion.
SCHEMA du CIRCUIT
MONTAGE du CIRCUIT
Montage avec 4 LED par le traducteur
CODE
Vous pouvez trouver ce code dans CIRC02-code-leds.js
var j5 = require("johnny-five");
var board, leds=[], ledPins = [2,3,4,5,6,7,8,9];
board = new j5.Board();
board.on("ready", function() {
// initialiser les LEDs avec une boucle for
for (var i = 0; i < ledPins.length; i++){
var myLed = new j5.Led(ledPins[i]);
leds.push(myLed);
}
function allOn(){
for (var i = 0; i < leds.length; i++) {
leds[i].on();
}
}
function allOff(){
for (var i = 0; i < leds.length; i++) {
leds[i].off();
}
}
function oneAfterAnother() {
var delay = 1;
board.counter = 0;
for (var i = 0; i < leds.length; i++) {
var led = leds[i];
board.wait(delay,function(){
console.log(this.counter + " on");
leds[this.counter].on();
});
board.wait(delay + 200,function(){
console.log(this.counter + " off");
leds[this.counter].off();
this.counter = (this.counter + 1) % leds.length;
});
delay += 500;
}
}
// allOn();
// board.wait(1000,allOff);
oneAfterAnother();
board.loop(4500, oneAfterAnother);
});
Nous utilisons des tableaux pour conserver la trace de la liste des objets broches aussi bien que LED que nous créons. On peut utiliser des boucles for pour itérer sur (donc faire quelque chose pour chaque élément) les tableaux.
Nous avons structuré le programme en le découpant en fonctions (allOn, allOff et oneAfterAnother).
Nous utilisons la méthode board.wait pour programmer le comportement à certains moments. Elle prend deux paramètres - le nombre de millisecondes à attendre, et une fonction qui définit le code à exécuter après avoir attendu durant le délai spécifié.
DEPANNAGE
Quelques LED n'arrivent pas à l'allumer
Il est facile d'insérer une LED à l'envers. Vérifiez les LED qui ne fonctionnent pas et assurez-vous qu'elles sont à l'endroit.
Rupture de séquence
Avec huit fils, il est facile d'en intervertir une paire. Vérifiez que la première LED est enfoncée dans le port 2 et chaque port à la suite.
Rédémarrage
Il est facile de mal positionner un fil sans y prendre garde. Enlever tout et repartir à zéro est souvent plus facile que d'essayer de retrouver l'origine du problème.
ETENDRE LE CODE
Code désactivé en commentaire
A la fin du programme vous verrez deux lignes commentées (le symbole // au début de ces lignes les désactive). Elles représentent un comportement alternatif (toutes les LED allumées à la fois et ensuite éteintes). Décommentez ces lignes et commentez les deux dernières lignes du programme avec // pour intervertir le comportement du programme.
Animations supplémentaires
Fatigué de l'animation par défaut? Essayez de modifier le temps de la fonction oneAfterAnother, ou écrivez votre propre fonction d'animation: les fonctions board.loop et board.wait vous aideront à programmer l'allumage des LED (ou les pulser, ou changer la luminosité) à des moments prédéfinis.
Désorienté?
Ne vous en faites pas! Cet exercice sert à explorer les possibilités aussi il y a pas mal de choses à prendre en compte. Nous reviendrons à un code plus simple dans le prochain couple d'exercices.
Licence Common Creative. Traduit de l'anglais par Scriptol.fr à partir du tutoriel d'Anna Gerber. Copie et modification autorisées sous réserve de conserver cette notice y compris le lien sur la page originale.