Descriptif du projet
Le but ici est de choisir la couleur émise par une led RGB à partir de la liaison série (câblée ou Bluetooth).
Pour une utilisation du Bluetooth, une application AI2 nommée BtRGB est disponible et présentée dans cet article.
Branchement de la led RGB
Une telle led, comme sur l’illustration ci-dessus possède 4 pattes, de gauche
à droite :
– RED : à brancher sur une entrée PWM ;
– Anode ou cathode commune :selon les modèles, à brancher sur le GND ou le 5V ;
– GREEN : à brancher sur une entrée PWM ;
– BLUE : à brancher sur une entrée PWM.
Attention : ne pas oublier de placer une résistance de quelques centaines d’ohms en série entre les pattes couleurs de la led et les entrées PWM.
Le niveau de chaque couleur varie donc entre 0 et 255.
Pour en savoir plus, lire cet article.
Programme
/* Ce programme permet a l'utilisateur d'ajuster la lumiere d'une led RGB. */ //------------------------------------------------------------ // Librairies //------------------------------------------------------------ // pour le traitement du message recu sur la liaison serie #include <SerialDLF.h> //------------------------------------------------------------ // Constantes //------------------------------------------------------------ // Classe de SerialDLF SerialString messageRecu; const int pinRouge = 11 ; const int pinVert = 10 ; const int pinBleu = 9 ; const int niveauDepart =128; //------------------------------------------------------------ // Setup //------------------------------------------------------------ void setup() { // Initialisation de la liaison serie Serial.begin(9600); Serial.flush(); Serial.println("Liaison serie operationnelle !"); Serial.println("------------------------------"); delay(1000); // Autres initilisations pinMode(pinRouge, OUTPUT ); pinMode(pinVert, OUTPUT ); pinMode(pinBleu, OUTPUT ); analogWrite(pinRouge,niveauDepart); analogWrite(pinVert,niveauDepart); analogWrite(pinBleu,niveauDepart); } // fin setup //------------------------------------------------------------ // Loop //------------------------------------------------------------ void loop() { messageRecu.renew(); // on lit un eventuel message. if (messageRecu.empty()==false) // Si le message est non vide ... { //Serial.println(messageRecu.get()); traitement(); Serial.flush(); } } //fin loop //------------------------------------------------------------ // Fonction traitement() //------------------------------------------------------------ /* Execute le traitement des caracteres recus par la liaison serie qui sont stockes dans messageRecu. */ void traitement() { int niveau; if ((messageRecu.equals("Descriptif")) || (messageRecu.equals("d"))) { Serial.println("--------------------------"); Serial.println("Descriptif du programme :"); Serial.println("--------------------------"); Serial.println("Ce programme permet d'ajuster la couleur d'une led RGB."); Serial.println("--------------------------"); } else if ((messageRecu.equals("Help")) || (messageRecu.equals("h"))) { Serial.println("--------------------------"); Serial.println("Liste des commandes :"); Serial.println("--------------------------"); Serial.println("--> Descriptif ou d : affiche le descriptif du programme."); Serial.println("--> Help ou h : affiche la liste des commandes."); Serial.println(" Exemple : r 255"); Serial.println("--> Green ou g : la couleur a modifier est le vert."); Serial.println(" Exemple : g 128"); Serial.println("--> Blue ou b : la couleur a modifier est le bleu."); Serial.println(" Exemple : b 0"); Serial.println("--> Reset : remet toutes les couleurs a 128."); Serial.println("--------------------------"); } else if ((messageRecu.equals("Red")) || (messageRecu.equals("r"))) { if (messageRecu.withParameter()==true) { niveau=messageRecu.parameter(); analogWrite(pinRouge,niveau); } } else if ((messageRecu.equals("Green")) || (messageRecu.equals("g"))) { if (messageRecu.withParameter()==true) { niveau=messageRecu.parameter(); analogWrite(pinVert,niveau); } } else if ((messageRecu.equals("Blue")) || (messageRecu.equals("b"))) { if (messageRecu.withParameter()==true) { niveau=messageRecu.parameter(); analogWrite(pinBleu,niveau); } } else if ((messageRecu.equals("Reset"))) { analogWrite(pinRouge,niveauDepart); analogWrite(pinVert,niveauDepart); analogWrite(pinBleu,niveauDepart); } else { Serial.println("Erreur de saisie !"); } } // fin traitement