Crea sito

Tag Archive for Led RGB

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);

}

Chi c'é online

1 visitatori online
1 ospiti, 0 membri

Fornito da Visitor Maps