Crea sito

Semplice codice per ottenere tutte le tonalità di colore con LED RGB, un potenziometro e Arduino!

Ho da poco iniziato a fare qualche prova con Arduino e i led RGB, il primo test, ed unico per il momento, che ho approntato è stato quello di usare un solo potenziometro per ottenere tutte le tonalità di colori (con 3 potenziometri, uno per colore, non avrebbe neanche senso usare Arduino!!).

La soluzione, secondo me (in realtà è stato un suggerimento di mia sorella che ha fatto il liceo artistico) più semplice, ma che allo stesso tempo da dei risultati ottimi è quella di mescolare i colori solo due alla volta, da qui poi è seguita una breve ricera su internet per trovare qualche rappresentazione di questa soluzione da trasformare in codice: la ruota dei colori!

E questa è quella che mi ha aiutato di più:

Color Wheel

Consiglio di procurarsi un potenziometro multigiri, così si riuscirà a riprodurre tutte le tonalità ed in più si riuscirà ad impostarle con più facilità che con un potenziometro tradizionale.

Il codice:

#define LED_RED 9
#define LED_GREEN 10
#define LED_BLUE 11
#define POT 5
#define BTN 7

int ledPin[] = {9, 10, 11};

unsigned long printTime = 1000;
unsigned long previousPrintTime = 0;

void setup()
{

Serial.begin(9600);

}

void loop()

{

colorWeel();

}

void RGB_led(int red_led, int green_led, int blue_led)
{
analogWrite(LED_RED, red_led);
analogWrite(LED_GREEN, green_led);
analogWrite(LED_BLUE, blue_led);
}

void color_wheel()
{
int red_val = 255;
int green_val = 0;
int blue_val = 0;

int wheel = map(analogRead(POT), 0, 1023, 0, 1535);

if( wheel <= 255 )  //Rosso al max + Verde in crescita
green_val = wheel;  // ottengo al max il Giallo
else if( wheel <= 511 )  //Verde al max + Rosso in diminuzione
{
red_val = abs(wheel – 511);  //Rosso va da 255 a 0
green_val = 255;  //Verde lo tengo al max
}
else if( wheel <= 767 )  //Verde al max + Blu in crescita
{                        //(0, 255, 255) = Ciano
red_val = 0;
green_val = 255;  //Verde al max
blue_val = wheel – 511;  //Blu in crescita da 0 a 255
}
else if( wheel <= 1023 )  //Blu al max + Verde in diminuzione
{     //(0, 0, 255) = Blu
red_val = 0;
green_val =  abs(wheel – 1023); //Verde in diminuzione da 255 a 0
blue_val = 255;  //Blu fisso al max
}
else if( wheel <= 1279 )   //Blu al max + Rosso in crescita
{                          //(255, 0, 255) = Magenta
red_val = wheel – 1023;  //Rosso aumenta da 0 a 255
blue_val = 255;  //Blu fisso al max
}
else {       //Rosso al max + Blu in diminuzione
blue_val = abs(wheel – 1535);
}

if(millis() – previousPrintTime > printTime)
{
previousPrintTime = millis();

Serial.print(“pot: “);
Serial.print(wheel);
Serial.print(“, red: “);
Serial.print(red_val);
Serial.print(“, green: “);
Serial.print(green_val);
Serial.print(“, blue: “);
Serial.println(blue_val);

}

RGB_led(red_val, green_val, blue_val);

}

2 commenti so far »

  1. ionela said,

    Wrote on gennaio 31, 2011 @ 16:29

    un progetto molto utile! grazie per aver postato il codice! intanto vi volevo segnalare un’iniziativa che ritengo sia interessante: arduino gratis! Date un’occhiata:
    http://it.emcelettronica.com/5-arduino-gratis-partecipa-febbruino

  2. cinquetau said,

    Wrote on febbraio 4, 2011 @ 23:53

    Ti ringrazio per aver trovato utile questo articolo!
    Il codice è il cuore vero e proprio dell’articolo perchè trovo che sia più interessante e produttivo, per chi legge poter sperimentare di persona piuttosto che, vederne il risultato in un video dimostrativo senza aver la possibilità di replicare l’esperienza col proprio arduino ed un codice già pronto.

    Ho notato che a livello italiano, la gente fa fatica a condividere i propri progetti e poi si lamenta che si trova scarso materiale nella nostra lingua. Io cerco di dare un piccolo contributo per invertire questa tendenza, con qualcosa di personale ed originale (spero!). Insomma, per usare l’esempio di questo articolo, è pieno internet di articoli (tutti uguali) su come accendere, far lampeggiare o dimmerare un led, che sia normale o RGB. Invece, ci sono pochissime risorse su come trovare un modo per accenderli in un modo creativo o in un po’ meno scontato.

Comment RSS · TrackBack URI

Lascia un commento

Nome: (Required)

E-mail: (Required)

Website:

Comment:

*
To prove that you're not a bot, enter this code
Anti-Spam Image


Chi c'é online

2 visitatori online
2 ospiti, 0 membri

Fornito da Visitor Maps