«

»

Mar 01

Stampa Articolo

Grove lcd rgb i2c wheel

Grove lcd rgb i2c wheel è un progetto dimostrativo per controllare la retroilluminazione rgb del display lcd secondo i codici della “color wheel”

Grove lcd rgb i2c wheelLa retroilluminazione del display è a led per cui puoi riutilizzare del codice già scritto in passato per controllare led RGB, come spesso capita, senza riscrivere tutto il codice da zero.

Parti da una base già conosciuta o che hai scritto in passato.

In questa occasione prendi il codice scritto da Eduardo A. Flores e rilasciato sul suo sito: eduardofv.com 

Al codice originale ho eseguito alcune modifiche per consentire il controllo del Grove lcd rgb i2c wheel che usa in fase di scrittura i comandi della libreria rgb_lcd.h che hai già visto utilizzare in questo sketch.

Lo sketch del Grove lcd rgb i2c wheel color

Lo sketch  che puoi utilizzare è ampiamente tratto da quello di Eduardo F. e solo alcune linee di codice sono state da me modificate, ti illustrerò quali nella spiegazione in basso:

/*
 * Color Wheel LED
 *
 * Loops a RGB LED attached to pins 9,10,11 through
 * all the "exterior" colors of a Color Wheel
 * 
 * The RGB LED uses a 3 component (red green blue) model which adds 
 * light colors to produce a composite color. 
 * But the RGB does not make easy to loop through a more
 * "natural" sequence of colors. The HSV (hue saturation value) model 
 * uses a color cylinder in which each color is a point inside the cylinder. 
 * The hue is represented by the angle at which the point is, 
 * the saturation represents the length (how close to the center the 
 * point is) and the value represent the height at which the point is. 
 *
 * By cycling the hue value from 0 to 360 degrees, and keeping the 
 * saturation and value at 1 we can represent all the brightest 
 * colors of the wheel, in a nice natural sequence.
 *
 * The algorithm to convert a HSV value to a RGB value is taken from 
 * Chris Hulbert's blog (splinter)
 *
 * Created 1 January 2011
 * By Eduardo A. Flores Verduzco
 * http://eduardofv.com
 *
 * References:
 * http://en.wikipedia.org/wiki/HSL_and_HSV
 * http://en.wikipedia.org/wiki/Color_wheel
 * http://splinter.com.au/blog/?p=29
 *
 * http://academe.co.uk/2012/04/\
 * arduino-cycling-through-colours-of-the-rainbow/
 */

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

void setup() {
    Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.print("RGB I2C color");
}

void loop() {
    for(int hue=0;hue<360;hue++) {
      setLedColorHSV(hue,1,1);
      delay(10);
    }
}

// Convert a given HSV (Hue Saturation Value) to RGB(Red Green Blue)
// and set the led to the color
//  h is hue value, integer between 0 and 360
//  s is saturation value, double between 0 and 1
//  v is value, double between 0 and 1
//http://splinter.com.au/blog/?p=29
void setLedColorHSV(int h, double s, double v) {
  //this is the algorithm to convert from RGB to HSV
  double r=0; 
  double g=0; 
  double b=0;

  double hf=h/60.0;

  int i=(int)floor(h/60.0);
  double f = h/60.0 - i;
  double pv = v * (1 - s);
  double qv = v * (1 - s*f);
  double tv = v * (1 - s * (1 - f));

  switch (i) {
  case 0: //rojo dominante
    r = v;
    g = tv;
    b = pv;
    break;
  case 1: //verde
    r = qv;
    g = v;
    b = pv;
    break;
  case 2: 
    r = pv;
    g = v;
    b = tv;
    break;
  case 3: //azul
    r = pv;
    g = qv;
    b = v;
    break;
  case 4:
    r = tv;
    g = pv;
    b = v;
    break;
  case 5: //rojo
    r = v;
    g = pv;
    b = qv;
    break;
  }

  //set each component to a integer value between 0 and 255
  int red=constrain((int)255*r,0,255);
  int green=constrain((int)255*g,0,255);
  int blue=constrain((int)255*b,0,255);

  Serial.print("Red: ");    Serial.print(r);
  Serial.print(" Green: "); Serial.print(g);
  Serial.print(" Blu: ");   Serial.print(b);
  Serial.println();
  
  lcd.setRGB(red,green,blue);
}

linee 036-037: includi le due librerie necessarie al controllo del Grove lcd rgb i2c wheel, la prima per la gestione della comunicazione I2C e la seconda per il controllo del display stesso;

linea 039: inizializzi l’istanza lcd;

linee 043-044: imposti le righe e colonne del display ed il testo “RGB I2C color”;

linea 048: imposta un ciclo for da 0 a 360° ( un giro completo della ruota: color wheel );

linea 049: imposta il colore del Backlight richiamando la “setLedColorHSV“;

linea 050: attendi un delay di 10 millisecondi tra un colore ed il successivo, eseguirai il giro completo in 3600 millisecondi ossia 3.6 secondi;

linee 060-118: esegui il calcolo del valore di r,g e b per ciascun angolo della ruota ( color wheel ) e nelle ultime righe lo scrivi sul monitor seriale prima di assegnarlo al background del display alla linea 117 mediante il metodo lcd.setRGB(red,green,blue).

Il video demo dell’LCD RGB Color Wheel

Il video ti mostra l’effetto del carosello di colori visualizzati come sfondo del display LCD RGB Color Wheel:

Buon divertimento con il tuo display Grove lcd rgb i2c wheel.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/grove-lcd-rgb-i2c-wheel.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>