Loop e data type strutturati
[sketchbook_andrea] / programming / structured_data_types / oggetto_rgb / oggetto_rgb.ino
1 /*
2     RGB Object
3
4     Un oggetto puo' contenere tutte le proprieta' di un elemento
5     assieme ai metodi (le funzioni) che lo caratterizzano.
6
7     In aggiunta il constructor e' una funzione richiamata al momento
8     di instanziare l'oggetto che puo' essere usata per attivare PIN,
9     assegnare variabili.
10
11
12  Schema: http://lab.piffa.net/schemi/rgb.jpg
13  */
14
15 class RGBLed {
16   // Classe rappresentativa di un LED RGB
17   
18     // Private properties, le proprieta' sono private per default
19     byte redPin ;
20     byte greenPin ;
21     byte bluePin ;
22
23   public:
24     // Constructor: come viene instanziato un oggetto facente parte della classe
25     RGBLed(byte pinR, byte pinG, byte pinB)
26     {
27       // Carichiamo i valori dei PIN dentro alle proprieta'
28       redPin    = pinR ;
29       greenPin  = pinG ;
30       bluePin   = pinB ;
31
32       // Equivalente del Setup() per inizializzare i PIN
33       pinMode(redPin, OUTPUT);
34       pinMode(greenPin, OUTPUT);
35       pinMode(greenPin, OUTPUT);
36     }
37
38     void Arrossa () {
39       // Metodo = funzione dell'oggetto
40       // Imposta il colore di un LED RGB a rosso
41
42       analogWrite(redPin,   0);
43       analogWrite(greenPin, 255);
44       analogWrite(bluePin,  255);
45     }
46
47     void SetColor (byte r, byte g, byte b) {
48       // Imposta il colore di un LED RGB
49
50       analogWrite(redPin,   r);
51       analogWrite(greenPin, g);
52       analogWrite(bluePin,  b);
53     }
54 };
55
56 // Instanziamo un LED
57 RGBLed led(11, 10, 9);
58 /* L'oggetto viene istanziato qui e non nella funzione di setup()
59     perche' altrimenti la sua esistenza sarebbe legata solo
60     al contesto (scope) del setup(), non sarebbe disponibile nel loop()
61  */
62
63 void setup()  {
64   // I PIN mode vengono settati dal constructor
65 }
66
67 void loop() {
68   led.Arrossa();
69   delay(1000);
70   led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green
71   delay(1000);
72 }
73