Arduino (L13): Pin PWM, effetto fade su led

La scheda elettronica Arduino Uno (o compatibile) è formata da 6 ingressi analogici (da A0 ad A5) e da 14 porte digitali (input/output), di cui sei definite PWM, evidenziate dal simbolo del tilde (~).

Le porte PWM di Arduino Uno sono la numero: 3, 5, 6, 9, 10 e 11.

La porta PWM consente di “trasformare” un uscita digitale in analogica; così facendo non si invia un valore digitale (zero o uno, quindi spento o accesso) ma una tensione variabile, che nel caso del led consentirà, di realizzare l’effetto fade, ovvero una dissolvenza continua sia in entrata che in uscita.

Effetto fade su led

Lo schema è il solito visto più volte nel corso di queste lezioni. Comunque riepilogando basta avere una basetta e collegare un led, una resistenza da 220 Ohm e il cavo nero (dal polo negativo del led/resistenza) alla massa e il cavo rosso (dal polo positivo/resistenza) ad una porta digitale PWM.

int lucentezza = 0; // definisce la variabile “lucentezza” con valore iniziale 0
int incremento = 5; // definisce la variabile “incremento” con valore 5
//
void setup ()
{
pinMode (9, OUTPUT); // definisce la porta 9 come porta di output
}
//
void loop()
{
analogWrite (9, lucentezza); // invia alla porta 9 una tensione pari a (5/255) * lucentezza
lucentezza = lucentezza + incremento; // modifica il valore di lucentezza
if (lucentezza == 0 || lucentezza == 255) /* il simbolo || e’ un operatore booleano che
rappresenta la “or” mentre == e’ il simbolo convenzionalmente utilizzato per verificare la
condizione di uguaglianza. Non viene utilizzato il normale simbolo = poiche’ il programma lo
interpreterebbe come l’assegnazione di un valore es. lucentezza = 0 verrebbe interpretato
come “assegna 0 alla variabile lucentezza” – The combination ” || ” is a Boolean operator that
represents the “or”, while ” == ” symbol is conventionally used to indicate a condition of
equality. Is not used the normal symbol ” = ” because the program interprets it as an assigning
value. Example: lucentezza = 0 would be interpreted as “assigns 0 to the variable lucentezza
(brightness)” */
{
incremento = incremento *-1; /* se la lucentezza ha raggiunto gli estremi ( 0 oppure 255) cambia
segno all’incremento (lo si moltiplica per -1 e quindi se era 5 lo fa diventare -5 e viceversa) – if
the brightness has reached the extremes (0 or 255) changes sign to the increase (multiplies it by -1
and if it was 5, becomes -5, and vice versa) */
}
delay (50); //attende 50 millisecondi prima di ricominciare il ciclo
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *