GUIDA 12: Arduino, LED RGB (2 di 2)

Realizziamo un semplice progetto che varia i tre colori di un LED RGB con un fade.

Lo schema elettrico è quello del precedente articolo: è sufficiente che tu colleghi il LED RGB a tre pin digitali abilitati al PWM.

Nello sketch utiliziamo un nuovo concetto di programmazione: il ciclo for. Ecco la sua sintassi:
for(inizializzazione; test; incremento) {
//operazioni che vengono eseguite fino a quando il test risulta falso;
}

All’interno delle parentesi tonde si scrivono tre istruzioni, separate da “;”:

  1. inizializzazione di una variabile
  2. condizione da verificare (test)
  3. operazione da eseguire sulla variabile fino a quando il test risulta falso (incremento o decremento)

All’inizio avviene l’inizializzazione. Poi viene eseguito il ciclo tra le graffe e viene verificata la condizione. Quando questa diventa falsa, il ciclo si ferma. Il ciclo è anche detto iterazione.

L’incremento di una variabile si esegue scrivendo:

nomevariabile++

Il decremento:
nomevariabile--
Vediamo lo sketch:

const int verde=9;
const int blu=10;
const int rosso=11;
int ValRosso;
int ValBlu;
int ValVerde;
void setup() {
pinMode(verde, OUTPUT);
pinMode(blu, OUTPUT);
pinMode(rosso, OUTPUT);
digitalWrite(verde, HIGH);
digitalWrite(blu, HIGH);
digitalWrite(rosso, HIGH);
}
void loop() {
//variazione da verde a rosso
ValRosso=255;
ValBlu=0;
ValVerde=0;
for(int i=0; i<255; i++) {
ValVerde++;
ValRosso--;
analogWrite(verde, 255 - ValVerde );
analogWrite(rosso, 255 - ValRosso );
delay(20);
}
//variazione da blu a verde
ValRosso=0;
ValBlu=0;
ValVerde=255;
for(int i=0; i<255; i++) {
ValBlu++;
ValVerde--;
analogWrite(blu, 255 - ValBlu);
analogWrite(verde, 255 - ValVerde);
delay(20);
}
//variazione da rosso a blu
ValRosso=0;
ValBlu=255;
ValVerde=0;
for(int i=0; i<255; i++) {
ValRosso++;
ValBlu--;
analogWrite(rosso, 255 - ValRosso);
analogWrite(blu, 255 - ValBlu);
delay(20);
}
}

Definiamo tre costanti che ci permetteranno di richiamare i pin dei tre colori del LED RGB. Definiamo poi delle variabili ValColore che useremo nel loop. Nel setup inizializziamo i pin dei tre colori in OUTPUT e gli assegnamo lo stato logico alto: il LED RGB sarà spento.

Dividiamo il loop in tre parti:

  • passaggio da verde a rosso
  • passaggio da blu a verde
  • passaggio da rosso a blu

Siccome il concetto è lo stesso per le tre parti, ne analizzeremo solo una: passaggio da verde a rosso.

ValRosso=255;
ValBlu=0;
ValVerde=0;
for(int i=0; i<255; i++) {
ValVerde++;
ValRosso--;
analogWrite(verde, 255 - ValVerde );
analogWrite(rosso, 255 - ValRosso );
delay(20);
}

“ValRosso” viene impostata al massimo per la funzione “analogWrite()”. Nel ciclo viene inizializzata la variabile “i” e poi eseguite le istruzioni nelle graffe: la luminosità del verde diminuisce, mentre aumenta quella del led rosso. Ciò viene eseguito fino a che la variabile i sarà uguale a 255 (i<255 falso). L’attesa alla fine del ciclo serve per percepire la variazione.

Nel video puoi vedere l’effetto che produce questo sketch:

 
{\rtf1\ansi\ansicpg1252
{\fonttbl\f0\fnil\fcharset0 ArialMT;}
{\colortbl;\red255\green255\blue255;\red51\green51\blue51;\red255\green255\blue255;}
\deftab720
\pard\pardeftab720\partightenfactor0

\f0\fs26 \cf2 \cb3 \expnd0\expndtw0\kerning0
\outl0\strokewidth0 \strokec2 }
 

4 Risposte a “GUIDA 12: Arduino, LED RGB (2 di 2)”

  1. Hello to every one, its truly a fastidious for me to visit this site, it contains helpful Information. dadgagbdfdke

    1. Hi. You’re right. In fact the style is a little bit fastidious. I’ll try to change it in next days.

  2. Heya im for the first time the following. I discovered this specific table as a consequence I to discover The item faithfully of use &amp the idea rallied round myself publicized lots. I am hoping to deliver a little back again furthermore foster further like so gedbeceefdbb

  3. Hello, Neat post. There’s a problem with your web site in web explorer, may test thisK IE still is the market leader and a large component to people will leave out your magnificent writing due to this problem. eegkggdeddcdbkfa

I commenti sono chiusi.