Contrôle d’une led RGB avec Arduino

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

led_rgb.jpg

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