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);
}
#include "lamp.h"
// instanziamo un lampeggino
-lampeggino rosso { 13, 1000, 0, ">> Led Rosso <<"};
+lampeggino rosso { 13, 1000, ">> Led Rosso <<"};
void setup()
{
--- /dev/null
+/* 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);
+}
--- /dev/null
+/*
+ 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);
+}