From b46e75aacd9a0d7e318d5ef06730bf1e701ae9f5 Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Thu, 20 Apr 2017 04:22:32 +0200 Subject: [PATCH] Structured data types --- .../struct_risposta/lamp.h | 4 +- .../struct_risposta/struct_risposta.ino | 2 +- .../struct_risposta_pointers/lamp.h | 23 +++++++++++ .../struct_risposta_pointers.ino | 38 +++++++++++++++++++ 4 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 programming/structured_data_types/struct_risposta_pointers/lamp.h create mode 100644 programming/structured_data_types/struct_risposta_pointers/struct_risposta_pointers.ino diff --git a/programming/structured_data_types/struct_risposta/lamp.h b/programming/structured_data_types/struct_risposta/lamp.h index 6a88397..b648ad2 100644 --- a/programming/structured_data_types/struct_risposta/lamp.h +++ b/programming/structured_data_types/struct_risposta/lamp.h @@ -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); } diff --git a/programming/structured_data_types/struct_risposta/struct_risposta.ino b/programming/structured_data_types/struct_risposta/struct_risposta.ino index 1b3588d..7714825 100644 --- a/programming/structured_data_types/struct_risposta/struct_risposta.ino +++ b/programming/structured_data_types/struct_risposta/struct_risposta.ino @@ -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 index 0000000..e67125b --- /dev/null +++ b/programming/structured_data_types/struct_risposta_pointers/lamp.h @@ -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 // 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 index 0000000..e7be3a7 --- /dev/null +++ b/programming/structured_data_types/struct_risposta_pointers/struct_risposta_pointers.ino @@ -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); +} -- 2.39.2