Structured data types
authorAndrea Manni <andrea@piffa.net>
Thu, 20 Apr 2017 02:22:32 +0000 (04:22 +0200)
committerAndrea Manni <andrea@piffa.net>
Thu, 20 Apr 2017 02:22:32 +0000 (04:22 +0200)
programming/structured_data_types/struct_risposta/lamp.h
programming/structured_data_types/struct_risposta/struct_risposta.ino
programming/structured_data_types/struct_risposta_pointers/lamp.h [new file with mode: 0644]
programming/structured_data_types/struct_risposta_pointers/struct_risposta_pointers.ino [new file with mode: 0644]

index 6a88397..b648ad2 100644 (file)
@@ -9,15 +9,13 @@
 struct lampeggino {
   byte pin ;
   long pausa;
-  boolean stato;
   char feedback[20]; // Messaggio via seriale
 } ;
 
 void lampeggia (lampeggino oggetto) {
     // Lampeggia e manda un feedback via seriale
 
-    digitalWrite(oggetto.pin, oggetto.stato);
+    digitalWrite(oggetto.pin, !digitalRead(oggetto.pin));
     Serial.println(oggetto.feedback);
-    oggetto.stato = !oggetto.stato ;
     delay(oggetto.pausa);
 }
index 1b3588d..7714825 100644 (file)
@@ -14,7 +14,7 @@
 #include "lamp.h"
 
 // instanziamo un lampeggino
-lampeggino rosso { 13, 1000, 0, ">> Led Rosso <<"};
+lampeggino rosso { 13, 1000, ">> Led Rosso <<"};
 
 void setup()
 {
diff --git a/programming/structured_data_types/struct_risposta_pointers/lamp.h b/programming/structured_data_types/struct_risposta_pointers/lamp.h
new file mode 100644 (file)
index 0000000..e67125b
--- /dev/null
@@ -0,0 +1,23 @@
+/* Lamp Header
+ *  
+ *  Senza un file Header Arduino IDE non ne vuole sapere
+ *  di riconosce un data type custom da utilizzare con una funzione.
+ */
+#include <Arduino.h> // Senza non si possono usare i byte, digitaWrite...
+
+struct lampeggino {
+  byte pin ;
+  long pausa;
+   boolean stato;
+  char feedback[20]; // Messaggio via seriale
+} ;
+
+void lampeggia (lampeggino *oggetto) {
+    // Lampeggia e manda un feedback via seriale
+
+    digitalWrite(oggetto->pin, (*oggetto).stato); // foo->bar eqivale a (*foo).bar, l'operatore punto ha precedenza rispetto al pointer
+    Serial.println((*oggetto).feedback);
+    (*oggetto).stato = !(*oggetto).stato ;
+    delay((*oggetto).pausa);
+}
diff --git a/programming/structured_data_types/struct_risposta_pointers/struct_risposta_pointers.ino b/programming/structured_data_types/struct_risposta_pointers/struct_risposta_pointers.ino
new file mode 100644 (file)
index 0000000..e7be3a7
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    struct 
+
+ Struct e' un tipo struttura di dati non omogenea,
+ puo' contenere tipi di dati diversi a differenza di un array.
+
+ Possiamo quindi raggruppare diverse proprieta' di un oggetto
+ sotto lo stesso identificatore.
+
+Questa versione permette alla funzione lempeggia() di modificare una delle proprieta
+(  lo stato) dello struct rosso. Il fatto e' che una funzione non potrebbe modificare
+dei dati al suo esterno! Al massimo potrebbe ritornare un valore...
+
+Per superare questo si invoca la funziona con un riferimento ( & ) al dato originale
+e poi nel corpo della funzione si usano pointers (foo->bar eqivale a (*foo).bar, 
+l'operatore punto ha precedenza rispetto al pointer) per modificare un indirizzo di memoria
+esterno alla funzione.
+
+ Schema: http://lab.piffa.net/schemi/rgb.jpg
+ */
+
+
+#include "lamp.h"
+
+// instanziamo un lampeggino
+lampeggino rosso { 13, 1000, ">> Led Rosso <<"};
+
+void setup()
+{
+    pinMode(rosso.pin, OUTPUT);
+    Serial.begin(9600);
+}
+
+void loop()
+{
+    // Utilizziamo un lampeggiatore
+   lampeggia(&rosso);
+}