Luci di Natale

 In questo progetto viene proposto un gioco di luci.

 

{tab=Descrizione}

 

  In questo progetto viene proposto un gioco di luci (come quello che, nel periodo natalizio, si vede ai balconi di molte abitazioni) mediante l’uso delle funzioni:

  • lampeggio
  • sequenza: i 6 LED, in sequenza, prima si accendo da sinistra verso destra e poi si spengono nel verso opposto
  • simmetrica_int: prima si accendono a coppie i LED 4 e 5, 3 e 6, infine 2 e 7; in maniera analoga avviene lo spegnimento
  • centro_periferia: si accende e spengono i LED dall’interno verso l’esterno, prima da un lato e poi dall’altro
  • casuale

 

{tab=Cablaggio}

Luci di Natale

 

 

Componenti

 

  • 6 LED (2 gialli, 2 verdi, 2 rossi)
  • 6 resistenze da 220 Ω
  • 7 cavetti

 

 {tab=Il codice}

Il codice

 

void lampeggio() {

   for (int i = 2; i < 8; i = i + 1) {

     digitalWrite(i, HIGH);

   }

   delay(300);

   for (int i = 2; i < 8; i = i + 1) {

     digitalWrite(i, LOW);

   }

   delay(300);

}

 

void sequenza() {

   for (int i = 2; i < 8; i = i + 1) {

     digitalWrite(i, HIGH);

     delay(200);

   }

   delay(300);

   for (int i = 7; i > 1; i = i - 1) {

     digitalWrite(i, LOW);

     delay(200);

   }

   delay(300);

}

 

void simmetrica_int() {

   int k = 1;

   for (int i = 4; i > 1; i = i - 1){   // ciclo di accensione simmetrica

     digitalWrite(i, HIGH);

     digitalWrite(i + k, HIGH);

     delay(400);

     k = k + 2;

/* prima accende i LED 4 e 5, poi incrementa k di 2 (k = 3) ed accende i LED 3 e 6; poi incrementa ancora una volta k di 2 (k = 5) ed accende i LED 2 e 7 */

   }

   delay(500);

   k = 1;

   for (int i = 4; i > 1; i = i - 1) { // ciclo di spegnimento simmetrico

     digitalWrite(i, LOW);

     digitalWrite(i + k, LOW);

     delay(400);

     k = k + 2;

   }

}

 

void centro_periferia() {

   for (int i = 5; i < 8; i = i + 1) {

     digitalWrite(i, HIGH);

     delay(50);

     digitalWrite(i, LOW);

     delay(400);

   }

   for (int i = 4; i > 1; i = i - 1) {

     digitalWrite(i, HIGH);

     delay(30);

     digitalWrite(i, LOW);

     delay(30);

   }

}

 

void casuale() { // ciclo di accensione (e spenimento) casuale dei LED

   for (int i = 0; i < 100; i = i + 1) {

     int k = random(8);

     digitalWrite(k, HIGH);

     delay(30);

     digitalWrite(k, LOW);

     delay(30);

   }

}

 

void setup() {

  for (int i = 2; i < 8; i = i + 1) pinMode(i, OUTPUT);

}

 

void loop() {

   sequenza(); sequenza(); sequenza();

   lampeggio(); lampeggio(); lampeggio();

   simmetrica_int(); simmetrica_int(); simmetrica_int(); simmetrica_int();

   lampeggio(); lampeggio(); lampeggio();

   casuale();

   lampeggio(); lampeggio(); lampeggio();

   centro_periferia(); centro_periferia(); centro_periferia(); centro_periferia(); centro_periferia();

   lampeggio(); lampeggio(); lampeggio();

}

 

   Adeguando i tempi è possibile personalizzarne gli effetti. Si può snellire il loop, evitando di richiamare più volte la stessa funzione, introducendo ulteriori for nel loop stesso o nelle singole funzioni.

 

 {/tabs}


 

Liberamente tratto da https://www.progettiarduino.com/28-arduino-luci-di-natale-6ch.html