ArduRGB è un semplice progetto per mostrare come pilotare un led RGB da Arduino.
Nel repository su GitHub sono presenti lo sketch per Arduino e un programma di esempio scritto in C# e nel forum è possibile porre domande/richieste…
[highlight color=”yellow”]Attenzione: il programma descritto di seguito prevede l’uso di un led a catodo comune, in caso sia invece ad anodo comune i valori inviati devono essere sottratti a 255[/highlight]
Il programma in esecuzione su Arduino riceve via seriale un messaggio composto da 3 bytes, ognuno dei quali indica l’intensità dei colori R (rosso), G (verde) e B (blu). I valori ricevuti vengono utilizzati per comandare le 3 uscite PWM (pin 9/10/11) a cui è collegato il led.
Per prima cosa, definiamo i pin a cui è collegato il led e l’array dove memorizzeremo il messaggio in fase di ricezione:
// pins definition const int red_pin = 9; const int green_pin = 10; const int blue_pin = 11; // message variables byte message[3]; int message_index; |
Nel blocco setup() configuriamo la comunicazione seriale (9600 baud), i pin (come output) e i valori iniziali (led spento):
void setup() { // init serial communication Serial.begin(9600); // pins configured as output pinMode(red_pin, OUTPUT); pinMode(green_pin, OUTPUT); pinMode(blue_pin, OUTPUT); // Start with black value (leds off) analogWrite(red_pin, 0); analogWrite(green_pin, 0); analogWrite(blue_pin, 0); // reset message position pointer message_index = 0; } |
Infine nel loop() attendiamo che sia disponibile un byte sulla porta seriale, lo memorizziamo nell’array e – se è il terzo byte ricevuto – inviamo i 3 valori sulle uscite PWM:
void loop() { // new byte from serial communication if (Serial.available() > 0) { // store received byte in message array // and increment pointer message[message_index] = Serial.read(); message_index++; // if we received 3 bytes, reset pointer // and output the values if(message_index == 3) { message_index = 0; analogWrite(red_pin, message[0]); analogWrite(green_pin, message[1]); analogWrite(blue_pin, message[2]); } } |
Attraverso il programma in esecuzione sul PC è possibile scegliere un colore ed inviare la sua codifica RGB attraverso una porta seriale alla scheda Arduino:
Come prototipo, ho utilizzato un led RGB piranha a catodo comune:
collegato alle 3 porte PWM di Arduino tramite delle resistenze (1Kohm va benissimo) per limitare la corrente:
Ecco il prototipo realizzato ed un filmato che ne mostra il funzionamento: