From: eaman Date: Mon, 12 Dec 2016 10:27:11 +0000 (+0100) Subject: Intro obj X-Git-Url: http://git.piffa.net/web?a=commitdiff_plain;h=294093ad0f4ea400cb835391831fa01a60d5236d;p=sketchbook_andrea Intro obj --- diff --git a/RGB_LED/rgb_6_obj/rgb_6_obj.ino b/RGB_LED/rgb_6_obj/rgb_6_obj.ino deleted file mode 100644 index 23c34e1..0000000 --- a/RGB_LED/rgb_6_obj/rgb_6_obj.ino +++ /dev/null @@ -1,69 +0,0 @@ -/* - RGB Object - - Gestione di un LED RGB tramite programmazione a oggetti - - Schema: http://lab.piffa.net/schemi/rgb.jpg - */ - -class RGBLed { - // Classe rappresentativa di un LED RGB - - byte redPin ; - byte greenPin ; - byte bluePin ; - byte redValue ; - byte greenValue ; - byte blueValue ; - - // Constructor: come viene instanziato un oggetto facente parte della classe - public: - RGBLed(byte pinR, byte pinG, byte pinB) - { - // Carichiamo i valori dei PIN dentro alle proprieta' - redPin = pinR ; - greenPin = pinG ; - bluePin = pinB ; - - // Equvalente del Setup() per inizializzare i PIN - pinMode(redPin, OUTPUT); - pinMode(greenPin, OUTPUT); - pinMode(greenPin, OUTPUT); - } - - void Arrossa () { - // Metodo = funzione dell'oggetto - // Imposta il colore di un LED RGB a rosso - - analogWrite(redPin, 0); - analogWrite(greenPin, 255); - analogWrite(bluePin, 255); - } - - void SetColor (byte r, byte g, byte b) { - // Imposta il colore di un LED RGB - - analogWrite(redPin, r); - analogWrite(greenPin, g); - analogWrite(bluePin, b); - } -}; - -// Instanziamo un LED -RGBLed led(11, 10, 9); -/* L'oggetto viene istanziato qui e non nella funzione di setup() - * perche' altrimenti la sua esistenza sarebbe legata solo - * al contesto (scope) del setup(), non sarebbe disponibile nel loop() - */ - -void setup() { - // I PIN mode vengono settati dal constructor -} - -void loop() { - led.Arrossa(); - delay(1000); - led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green - delay(1000); - -} diff --git a/RGB_LED/rgb_6_quasi_obj/rgb_6_quasi_obj.ino b/RGB_LED/rgb_6_quasi_obj/rgb_6_quasi_obj.ino new file mode 100644 index 0000000..7150a1f --- /dev/null +++ b/RGB_LED/rgb_6_quasi_obj/rgb_6_quasi_obj.ino @@ -0,0 +1,86 @@ +/* + RGB Object (quasi!) + + Gestione di un LED RGB tramite programmazione a oggetti + Esercizio intermedio: manca constructor. + + Schema: http://lab.piffa.net/schemi/rgb.jpg + */ + +class RGBLed { + // Classe rappresentativa di un LED RGB + + byte redPin =11; + byte greenPin =10; + byte bluePin =9; + byte redValue ; + byte greenValue ; + byte blueValue ; + + public: + void Arrossa () { + // Metodo = funzione dell'oggetto + // Imposta il colore di un LED RGB a rosso + + analogWrite(redPin, 0); + analogWrite(greenPin, 255); + analogWrite(bluePin, 255); + } + + void SetColor (byte r, byte g, byte b) { + // Imposta il colore di un LED RGB + + analogWrite(redPin, r); + analogWrite(greenPin, g); + analogWrite(bluePin, b); + } +} led; // Dichiariamo un instanza dell'oggetto + + +void setup() { + pinMode(9, OUTPUT); + pinMode(10, OUTPUT); + pinMode(11, OUTPUT); +} + +void loop() { + led.Arrossa(); + delay(1000); + led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green + delay(1000); + +} + +/* Domande + 1. Come posso fare per instanziare un altro oggetto LED? + 2. Posso accedere (leggere / modificare) le proprieta' dell'oggetto? + 3. A quali di queste proprieta' potrei voler accedere? + 4. Devo comunque abilitare i PIN come OUTPUT nel setup(): sarebbe possibile + farlo tramite una funione, magari automaticamente? + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + 1. Mi serve una funzione che permetta di assegnare delle proprieta come i PIN + 2. Al momento no: sono tutte PRIVATE. provate a spostarne alcune sotto + la dichiarazione PUBLIC . + 3. Ad es. i colori che vado a modificare, i numeri dei pin su suppone + debbano restare immutati. + 4. Per usare una funzione nel setup() bisognerebbe rendere pubbliche + le proprieta' che indicano i PIM. + Meglio sarebbe avere una funzione che venga invocata una sola volta + al momento di instanziare l'oggetto. Un CONSTRUCTOR . + */ + diff --git a/RGB_LED/rgb_7_obj/rgb_7_obj.ino b/RGB_LED/rgb_7_obj/rgb_7_obj.ino new file mode 100644 index 0000000..e63ace4 --- /dev/null +++ b/RGB_LED/rgb_7_obj/rgb_7_obj.ino @@ -0,0 +1,78 @@ +/* + RGB Object + + Gestione di un LED RGB tramite programmazione a oggetti + + Schema: http://lab.piffa.net/schemi/rgb.jpg + */ + +class RGBLed { + // Classe rappresentativa di un LED RGB + + // Private properties, le proprieta' sono private per default + byte redPin ; + byte greenPin ; + byte bluePin ; + + public: + // Public properties + byte redValue ; + byte greenValue ; + byte blueValue ; + + // Constructor: come viene instanziato un oggetto facente parte della classe + RGBLed(byte pinR, byte pinG, byte pinB) + { + // Carichiamo i valori dei PIN dentro alle proprieta' + redPin = pinR ; + greenPin = pinG ; + bluePin = pinB ; + + // Equvalente del Setup() per inizializzare i PIN + pinMode(redPin, OUTPUT); + pinMode(greenPin, OUTPUT); + pinMode(greenPin, OUTPUT); + } + + void Arrossa () { + // Metodo = funzione dell'oggetto + // Imposta il colore di un LED RGB a rosso + + analogWrite(redPin, 0); + analogWrite(greenPin, 255); + analogWrite(bluePin, 255); + } + + void SetColor (byte r, byte g, byte b) { + // Imposta il colore di un LED RGB + + analogWrite(redPin, r); + analogWrite(greenPin, g); + analogWrite(bluePin, b); + } +}; + +// Instanziamo un LED +RGBLed led(11, 10, 9); +/* L'oggetto viene istanziato qui e non nella funzione di setup() + perche' altrimenti la sua esistenza sarebbe legata solo + al contesto (scope) del setup(), non sarebbe disponibile nel loop() + */ + +void setup() { + // I PIN mode vengono settati dal constructor +} + +void loop() { + led.Arrossa(); + delay(1000); + led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green + delay(1000); + +} + +/* Domande + 1. Provate ad accedere (serial print oppure modificare) le proprieta private e pubbliche. + + */ +