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ù:

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

