From 294093ad0f4ea400cb835391831fa01a60d5236d Mon Sep 17 00:00:00 2001 From: eaman Date: Mon, 12 Dec 2016 11:27:11 +0100 Subject: [PATCH] Intro obj --- RGB_LED/rgb_6_quasi_obj/rgb_6_quasi_obj.ino | 86 +++++++++++++++++++ .../rgb_6_obj.ino => rgb_7_obj/rgb_7_obj.ino} | 15 +++- 2 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 RGB_LED/rgb_6_quasi_obj/rgb_6_quasi_obj.ino rename RGB_LED/{rgb_6_obj/rgb_6_obj.ino => rgb_7_obj/rgb_7_obj.ino} (81%) 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_6_obj/rgb_6_obj.ino b/RGB_LED/rgb_7_obj/rgb_7_obj.ino similarity index 81% rename from RGB_LED/rgb_6_obj/rgb_6_obj.ino rename to RGB_LED/rgb_7_obj/rgb_7_obj.ino index 23c34e1..e63ace4 100644 --- a/RGB_LED/rgb_6_obj/rgb_6_obj.ino +++ b/RGB_LED/rgb_7_obj/rgb_7_obj.ino @@ -9,15 +9,18 @@ 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 - public: RGBLed(byte pinR, byte pinG, byte pinB) { // Carichiamo i valori dei PIN dentro alle proprieta' @@ -52,8 +55,8 @@ class RGBLed { // 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() + perche' altrimenti la sua esistenza sarebbe legata solo + al contesto (scope) del setup(), non sarebbe disponibile nel loop() */ void setup() { @@ -67,3 +70,9 @@ void loop() { delay(1000); } + +/* Domande + 1. Provate ad accedere (serial print oppure modificare) le proprieta private e pubbliche. + + */ + -- 2.39.2