70cfc625b573c00f0f9cea39764544351f5f0f7e
[sketchbook_andrea] / programming / loops / loop_3_multi_led_random / loop_3_multi_led_random.ino
1 /*
2   Random Rainbow
3   
4   Generazione di un numero casuale per modificare il flusso del programma.
5   
6  
7
8  
9  The circuit:
10  * LEDs from pins 2 through 9 to ground
11  
12  Schemi:
13  - http://lab.piffa.net/schemi/8_led_single_res_bb.png
14  - http://lab.piffa.net/schemi/8_led_single_res_schem.png
15  
16  http://www.arduino.cc/en/Tutorial/ForLoop
17  */
18
19 byte ledPins[8] = {  // Domanda: cosa succede se uso int?
20   2,3,4,5,6,7,8,9} 
21 ; //Array
22 int timer = 100;           // Pausa per far brillare i LED
23 int randNumber ;
24
25 void setup() {
26   Serial.begin(9600);
27   // use a for loop to initialize each pin as an output:
28   for (int thisPin = 0; thisPin < sizeof(ledPins); thisPin++)  {
29     pinMode(ledPins[thisPin], OUTPUT);
30     Serial.print("Inizializzato pin n. ");
31     Serial.println(  thisPin);
32   }
33
34   Serial.print("Dimesione array: ");
35   Serial.println(sizeof(ledPins));
36   randomSeed(analogRead(0));  // Rilevazione di un valore esterno
37  // per scegliere il primo elemento del pseudorandom generators
38 }
39
40 void loop() {
41   // print a random number from 0 to 8
42   randNumber = random(8);
43   // turn the pin on:
44   Serial.print("Accensione pin  n. ");
45   Serial.println(randNumber);
46   digitalWrite(ledPins[randNumber], HIGH);  
47   delay(timer);                  
48   // turn the pin off:
49   digitalWrite(ledPins[randNumber], LOW);    
50
51   if (randNumber == 0) {
52     rainbow() ;
53   }
54 }
55
56 ////////////////
57 // Funzioni
58
59 void rainbow() {
60   // Esegue un pattern con i led
61   
62   Serial.println(">>> Rainbow! <<<");
63   for (int thisPin = 0; thisPin < sizeof(ledPins); thisPin++) {
64     // turn the pin on:
65     digitalWrite(ledPins[thisPin], HIGH);  
66     delay(timer / 2);                  
67     // turn the pin off:
68     digitalWrite(ledPins[thisPin], LOW);    
69     // Debug
70
71   }
72
73   // loop from the highest pin to the lowest:
74   for (int thisPin = sizeof(ledPins) -1 ; thisPin > 0; thisPin--) {
75     // ><<turn the pin on:
76     digitalWrite(ledPins[thisPin], HIGH);
77     delay(timer / 3);
78     // turn the pin off:
79     digitalWrite(ledPins[thisPin], LOW);
80   }
81 }
82
83
84
85
86