]> git.piffa.net Git - sketchbook_andrea/commitdiff
gmulti ptr
authorAndrea Manni <andrea@piffa.net>
Thu, 30 Apr 2015 16:08:46 +0000 (18:08 +0200)
committerAndrea Manni <andrea@piffa.net>
Thu, 30 Apr 2015 16:08:46 +0000 (18:08 +0200)
multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino [new file with mode: 0644]
multitasking/BlinkWithoutDelay_8_struct_pointer/BlinkWithoutDelay_8_struct_pointer.ino [new file with mode: 0644]

diff --git a/multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino b/multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino
new file mode 100644 (file)
index 0000000..621083e
--- /dev/null
@@ -0,0 +1,52 @@
+/* Blink without Delay
+ Soluzione
+ Introdotto un argomento per la funzione che nodifica l'intervallo di lampeggio 
+ */
+
+struct blinkLed {
+  // Lampeggia un LED utilizzando millis()
+  // Variabili
+  int ledPin ;           // il numero del LED pin
+  int ledState ;         // stato attuale del LED
+  long interval ;        // milliseconds di intervallo nel lampeggiare
+  long previousMillis ;  //precedente cambio di stato  
+} 
+;
+
+// Instanziamo i due led dalla classe 
+blinkLed ledA = {
+  13 , LOW , 1000, 0 };
+blinkLed ledB = {
+  12, LOW, 500, 0};
+
+void setup() {
+  pinMode(ledA.ledPin, OUTPUT);
+  pinMode(ledB.ledPin, OUTPUT);
+}
+
+void loop()
+{
+ ledA = lightLed(ledA );
+ ledB = lightLed(ledB );
+}
+
+////////////////
+// Funzioni
+
+struct blinkLed lightLed(struct blinkLed temp) { // dataType tipo_di_struct nome_funzione(argomenti)
+  // Illumina il ledA secondo un intervallo passato come argomento
+
+  if(millis() - temp.previousMillis > temp.interval) { // gli elementi dello struct sono accessibili tramite l'operatore [punto]
+    // save the last time you blinked the LED 
+    temp.previousMillis = millis();   
+
+    // if the LED is off turn it on and vice-versa:
+    temp.ledState = !temp.ledState ; // Inverti il LED
+  }
+  digitalWrite(temp.ledPin, temp.ledState);
+  return(temp); // copy by value
+}
+
+
+
diff --git a/multitasking/BlinkWithoutDelay_8_struct_pointer/BlinkWithoutDelay_8_struct_pointer.ino b/multitasking/BlinkWithoutDelay_8_struct_pointer/BlinkWithoutDelay_8_struct_pointer.ino
new file mode 100644 (file)
index 0000000..635642d
--- /dev/null
@@ -0,0 +1,57 @@
+/* Blink without Delay
+ Struct con pointer
+ La funzione lightLed() ora passa un pointer alla posizione di memoria
+ della struttura dati ledA / ledB, non viene fatta una copia di
+ tutto lo struct ledA --> temp per poi far tornare (return(temp))
+ una struttura aggiornate di temp che vera' nuovamente copiata 
+ sull'originale ledA.
+ Viene fatta un pass by reference e non un pass by value,
+ vengono usate meno risose di calcolo e meno memoria.
+ */
+
+struct blinkLed {
+  // Lampeggia un LED utilizzando millis()
+  // Variabili
+  int ledPin ;           // il numero del LED pin
+  int ledState ;         // stato attuale del LED
+  long interval ;        // milliseconds di intervallo nel lampeggiare
+  long previousMillis ;  //precedente cambio di stato  
+};
+// Instanziamo i due led dalla struttur 
+blinkLed ledA = {
+  13 , LOW , 1000, 0 };
+blinkLed ledB = {
+  12, LOW, 500, 0};
+
+void setup() {
+  pinMode(ledA.ledPin, OUTPUT);
+  pinMode(ledB.ledPin, OUTPUT);
+}
+
+void loop()
+{
+ lightLed(&ledA ); // Viene passato il riferimento (Left value) di ledA
+ lightLed(&ledB );
+}
+
+////////////////
+// Funzioni
+
+void lightLed(struct blinkLed *temp) { // temp ora e' un pointer e non una struttura autonoma: pass by reference (not by value)
+  // Illumina il ledA secondo un intervallo passato come argomento
+
+  if(millis() - (*temp).previousMillis > (*temp).interval) { // l'operatore punto ha priorita' maggiore rispetto al pointer asterisco
+    (*temp).previousMillis = millis();   
+
+    // if the LED is off turn it on and vice-versa:
+    temp->ledState = !temp->ledState ; // Forma contratta, deference operator: temp->ledState == (*temp).ledState
+  }
+  digitalWrite(temp->ledPin, temp->ledState);
+  //return(temp); // copy by value
+}
+
+
+