top of page
Immagine del redattoreRobNico

Arduino giochi di luci

Aggiornamento: 12 dic 2020


Realizziamo un programma in grado di far accendere e spegnere i led in modo sequenziale, tipo le luci dell'albero di natale per intenderci.

Cosa occorre:

6 LED vari colori

6 resistenze 220 hom

cavetti jumper

breadboard


 

Dopo aver eseguito i collegamenti del circuito, copia il codice oppure puoi scaricarlo qui

//definizione delle variabili unsigned char j; // definisce la variabile j, di un carattere e priva di segno unsigned char k; // definisce la variabile k, di un carattere privo di segno unsigned char i; // definisce la variabile i, di un carattere privo di segno

void stile1(void) // subroutine stile1 per l'accensione in sequenza dei led e per il loro // spegnimento, sempre in sequenza, partendo dal fondo { for (j = 1; j <= 6; j++) // innesca un ciclo "for" che si ripete fino a quando il valore di j, // inizialmente a 1, diventa 6 grazie all’incremento di 1 (j++) ad ogni // ripetizione { digitalWrite(j, HIGH); // accende il led collegato alla porta j (da 1 a 6) delay(200); // si ferma per 200 millisecondi prima di ricominciare il ciclo "for" e // accendere il led successivo } for (j = 6; j >= 1; j--) // ripete il precedente ciclo "for" al contrario, con j che va da 6 a 1 // decrementando di 1 (j--) il valore di j ad ogni ripetizione { digitalWrite(j, LOW); // spegne il led collegato alla porta j delay(200); // aspetta 200 millisecondi prima di ricominciare il ciclo "for" e // spegnere il led precedente } }

void lampo(void) // subroutine per il lampeggio contemporaneo dei led (ripetuto due volte) { for (k = 0; k <= 1; k++) // ciclo for ripetuto due volte (con k che va da 0 a 1,incrementato di 1 // ad ogni ciclo (k++)) { for (j = 1; j <= 6; j++) // ciclo for, interno al precedente, ripetuto 6 volte digitalWrite(j, HIGH); // accende il led in posizione j delay(200); // aspetta 200 millisecondi for (j = 1; j <= 6; j++) // altro ciclo ripetuto 6 volte digitalWrite(j, LOW); // spegne il led in posizione j delay(200); // aspetta 200 millisecondi } }

void stile2(void) // subroutine stile2 per l'accensione e lo spegnimento progressivo // dei led, partendo da quelli centrali { k = 1; for (j = 3; j >= 1; j--) // ciclo di accensione { digitalWrite(j, HIGH); digitalWrite(j + k, HIGH); delay(400); k += 2; // incrementa di 2 il valore di k e ripete il ciclo di for } k = 5; for (j = 1; j <= 3; j++) // ciclo di spegnimento { digitalWrite(j, LOW); digitalWrite(j + k, LOW); delay(400); k -= 2; // decrementa di 2 il valore di k e ripete il ciclo di for } }

void stile3(void) // subroutine stile3 per l’accensione e lo spegnimento dei led a coppie di 2, // partendo da quelli periferici { k = 5; for (j = 1; j <= 3; j++) // ciclo di accensione e spegnimento dei led: 1 e 6; 2 e 5; 3 e 4 { digitalWrite(j, HIGH); digitalWrite(j + k, HIGH); delay(400); digitalWrite(j, LOW); digitalWrite(j + k, LOW); k -= 2; } k = 3; for (j = 2; j >= 1; j--) // ciclo di accensione e spegnimento dei led: 3 e 4; 2 e 5; 1 e 6 { digitalWrite(j, HIGH); digitalWrite(j + k, HIGH); delay(400); digitalWrite(j, LOW); digitalWrite(j + k, LOW); k += 2; } }

void setup() // inizio della sezione di setup, le cui istruzioni vengono eseguite // una sola volta, all’attivazione del programma { for (i = 1; i <= 6; i++) // ciclo di for per definire le porte da 1 a 6 come porte di output pinMode(i, OUTPUT); }

void loop() // sezione di loop, che si ripete sino a quando non viene tolta // l’alimentazione alla scheda o viene premuto il tasto reset { stile1(); // attivazione della subroutine “stile1” lampo(); // attivazione della subroutine “lampo” stile2(); // attivazione della subroutine “stile2” lampo(); // attivazione della subroutine “lampo” stile3(); // attivazione della subroutine “stile3” lampo(); // attivazione della subroutine “lampo” }

 

661 visualizzazioni0 commenti

Post recenti

Mostra tutti
bottom of page