Code source de la barre lumineuse

Retour à la page du projet

Afficher/Masquer les commentaires

La LED rouge est reliée à la borne 9, la LED verte est reliée à la borne 10 et la LED bleu est reliée à la borne 11.

L'usage des constantes ROUGE, VERT et BLEU au lieu de 9, 10 et 11 rend l'écriture et la lecture du programme plus facile.

const int ROUGE=9;
const int VERT=10;
const int BLEU=11;

La constante TEMPO permet de régler la vitesse de transition entre les couleurs par un temps exprimé en ms.

const int TEMPO=10;

La fonction setup est obligatoire dans tout programme Arduino. Elle est appelée une fois au démarrage du module. C'est dans cette fonction que nous mettons les différentes instructions d'initialisation.

void setup(){

Les broches qui commandent les LED sont mises en mode OUTPUT

  pinMode(ROUGE,OUTPUT);
  pinMode(VERT,OUTPUT);
  pinMode(BLEU,OUTPUT);

La couleur de départ est bleue : on définit l'intensité de bleu au maximum et les intensités des couleurs rouge et verte à 0.

  analogWrite(ROUGE,0);
  analogWrite(VERT,0);
  analogWrite(BLEU,255); 
}

La fonction loop est également obligatoire dans tout programme Arduino. Elle est exécutée en boucle juste après l'exécution de la fonction setup.

void loop(){

De bleu à magenta

La boucle est exécutée pour i variant de 0 à 255 inclus par pas de 1.

A chaque tour la tension sur la broche de la LED rouge est réglée sur la valeur définie par i, et une pause de la durée TEMPO est réalisée (10 ms, puisque TEMPO=10).

La LED rouge va passer de éteinte à sa luminosité maximum en 256 étapes qui durent chacune 10 ms. Ainsi un rouge de plus en plus intense va se "mélanger" avec le bleu jusqu'à l'obtention du magenta en environ 2,5 s.

Toutes les autres transitions fonctionnent sur le même principe.

On notera que :

  for(int i=0;i<=255;i++){
    analogWrite(ROUGE,i);
    delay(TEMPO);
  }
 
  //Magenta -> rouge
  for(int i=255;i>=0;i--){
    analogWrite(BLEU,i);
    delay(TEMPO); 
  }
  
  //Rouge -> Magenta
  for(int i=0;i<=255;i++){
    analogWrite(BLEU,i);
    delay(TEMPO); 
  }
  
  //Magenta -> bleu
  for(int i=255;i>=0;i--){
    analogWrite(ROUGE,i);
    delay(TEMPO); 
  }
}