La bande de LED que je possède fonctionne sous 12 Vcc (voir détails). Après avoir perdu du temps sur la recherche de conversion de 9V vers 12V en courant continu, je me suis rendu compte que le Arduino Uno pouvait être alimenté de 6V à 20V, contrairement au Arduino Mini qui est limité à 9V.
J'ai suivi le tutorial RGB LED Strips sur le site LadyAda afin de réaliser une interface pouvant être pluggée sur le Arduino Uno. Elle est simplement composée de 3 résistances et 3 transistors.
Le premier programme que j'ai testé est celui que j'ai réalisé pour la LED RGB.
J'ai amélioré le programme pour adoucir les variations des couleurs façon lumière d'ambiance.
Programme
struct RGB {
byte r;
byte g;
byte b;
};
const boolean aleatoire = false;
const int LED_BLEU = 6;
const int LED_ROUGE = 5;
const int LED_VERT = 3;
RGB couleurRouge = { 255, 0, 0 };
RGB couleurVert = { 0, 255, 0 };
RGB couleurBleu = { 0, 0, 255 };
RGB couleurCyan = { 0, 255, 255 };
RGB couleurMagenta = { 255, 0, 255 };
RGB couleurJaune = { 255, 255, 0 };
RGB couleurs[] = { couleurRouge, couleurJaune, couleurVert, couleurCyan, couleurBleu, couleurMagenta };
int nbCouleurs = 6;
int indiceCouleur = 0;
int bleu = 0;
int rouge = 0;
int vert = 0;
int deltaBleu = 0;
int deltaRouge = 0;
int deltaVert = 0;
int boucle = 0;
void setup() {
pinMode(LED_BLEU, OUTPUT); // BLEU
pinMode(LED_VERT, OUTPUT); // VERT
pinMode(LED_ROUGE, OUTPUT); // ROUGE
randomSeed(analogRead(A0));
indiceCouleur = random(nbCouleurs);
bleu = couleurs[indiceCouleur].b;
rouge = couleurs[indiceCouleur].r;
vert = couleurs[indiceCouleur].g;
analogWrite(LED_BLEU, bleu);
analogWrite(LED_ROUGE, rouge);
analogWrite(LED_VERT, vert);
}
void loop() {
if(boucle == 0) {
indiceCouleur = (indiceCouleur + 1) % nbCouleurs;
deltaBleu = (couleurs[indiceCouleur].b - bleu)/255;
deltaRouge = (couleurs[indiceCouleur].r - rouge)/255;
deltaVert = (couleurs[indiceCouleur].g - vert)/255;
} else if(boucle == 255) {
deltaBleu = 0;
deltaRouge = 0;
deltaVert = 0;
} else if(boucle == 512) {
boucle = -1;
}
bleu += deltaBleu;
rouge += deltaRouge;
vert += deltaVert;
analogWrite(LED_BLEU, constrain(bleu,0,255));
analogWrite(LED_ROUGE, constrain(rouge,0,255));
analogWrite(LED_VERT, constrain(vert,0,255));
delay(20);
boucle++;
}
Aucun commentaire:
Enregistrer un commentaire