From 32041f442197b78fab52a297a1b5e71ef6eb16a3 Mon Sep 17 00:00:00 2001
From: eaman <andrea@piffa.net>
Date: Mon, 30 Jan 2017 19:13:37 +0100
Subject: [PATCH] Cleanup, esempi

---
 TODO                                          |  6 ++
 .../zeta/zeta_5_no_state/zeta_5_no_state.ino  | 42 +-----------
 aerei/zeta/zeta_prot/zeta_prot.ino            |  4 +-
 esempi/base/base.ino                          | 28 ++++++++
 esempi/base_th/base_th.ino                    | 43 ++++++++++++
 esempi/base_th_3stati/base_th_3stati.ino      | 66 +++++++++++++++++++
 esempi/state_throttle/state_throttle.ino      |  2 +
 7 files changed, 150 insertions(+), 41 deletions(-)
 create mode 100644 esempi/base/base.ino
 create mode 100644 esempi/base_th/base_th.ino
 create mode 100644 esempi/base_th_3stati/base_th_3stati.ino

diff --git a/TODO b/TODO
index d203d4d..843791c 100644
--- a/TODO
+++ b/TODO
@@ -1,3 +1,9 @@
+* Esempi:
+    * FSM con gestione degli stati interna (da Zeta)
+    * Sequenza di LED
+    * FSM gerarchica: test iniziale, ON / OFF di tutti lo sketch, fly modes | demo 
+
+
 * Magnetometro: mettere l'attuale bianco / rosso in un oggetto con millis
   e magari farlo andare con una strip binaca + rossa piuttosto che RGB
 * Magnetometro: fare un RGB completo con due colori per il volo laterale
diff --git a/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino b/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino
index 14f5d8c..ce71614 100644
--- a/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino
+++ b/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino
@@ -1,6 +1,6 @@
-/* Zeta test
- *  le funzioni finali sono da controllare
-
+/* Zeta senza state machine
+ 
+Gestione del Throttle con ciclo condizionale.
 
 */
 
@@ -16,12 +16,6 @@ const byte thrPin = A3;
 byte thr ;
 int thrIn ;
 
-long previousMillisA = 0;
-long previousMillisB = 0;
-
-unsigned long intervalA = 200;
-unsigned long intervalB = 200;
-
 void setup() {
   left.Invert() ; // Parte da stato invertito rispetto al default
   pinMode(rtail, OUTPUT);
@@ -62,33 +56,3 @@ digitalWrite(5, 1);
   Serial.println(thr);
 
 }
-
-
-// Functions
-// TODO: non funzionano :(
-
-
-void lampA () {
-  // Illumina la coda r a un tempo random
-  if (millis() - previousMillisA > intervalA) {
-    previousMillisA = millis();
-    intervalA = random(50, 255);
-    digitalWrite(rtail, !digitalRead(rtail));
-    // Leggiamo direttamente il registro di ledB e scriviamo il suo opposto,
-    // questo ci permette di non dover avere una variabile per tracciare lo stato.
-
-  }
-}
-
-void lampB () {
-  // Illumina la coda l a un tempo random
-
-  if (millis() - previousMillisB > intervalB) {
-    previousMillisB = millis();
-    intervalB = random(50, 255);
-    digitalWrite(ltail, !digitalRead(ltail));
-    // Leggiamo direttamente il registro di ledB e scriviamo il suo opposto,
-    // questo ci permette di non dover avere una variabile per tracciare lo stato.
-
-  }
-}
diff --git a/aerei/zeta/zeta_prot/zeta_prot.ino b/aerei/zeta/zeta_prot/zeta_prot.ino
index 600d69c..98194a0 100644
--- a/aerei/zeta/zeta_prot/zeta_prot.ino
+++ b/aerei/zeta/zeta_prot/zeta_prot.ino
@@ -1,6 +1,6 @@
-/* Zeta test
- *  le funzioni finali sono da controllare
+/* Zeta prototipo
 
+   Sketch da breadboard, il throttle e' simulato con un potenziometro.
 
 */
 
diff --git a/esempi/base/base.ino b/esempi/base/base.ino
new file mode 100644
index 0000000..e93c743
--- /dev/null
+++ b/esempi/base/base.ino
@@ -0,0 +1,28 @@
+/* Esempio
+
+   Esempio base:
+   2 LED / Strisce laterali che lampeggiano alternativamente
+   1 LED / Striscia sotto in FADE
+*/
+
+#include <common.h>
+
+// Instanziamo un LED fuori dal loop
+Lampeggiatore left = 12;
+Lampeggiatore right = 11;
+Pwm sotto = 9;
+
+void setup() {
+  // I PINs vengono impostati dal constructor al momento
+  // della dichiarazione dell'ogetto.
+
+  right.Invert() ;  // Opzionale: inverte l'ordine del lampeggio da
+  // HI -> LOW --> LOW -> HI
+  // per avere 2 LED che lampeggiano alternativamente
+}
+
+void loop() {
+  left.Blink();   // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW)
+  right.Blink();
+  sotto.UD(2000);   // Fade completo in 2 secondi
+}
diff --git a/esempi/base_th/base_th.ino b/esempi/base_th/base_th.ino
new file mode 100644
index 0000000..430c94d
--- /dev/null
+++ b/esempi/base_th/base_th.ino
@@ -0,0 +1,43 @@
+/* Esempio
+
+   Esempio base:
+   2 LED / Strisce laterali che lampeggiano alternativamente
+   1 LED / Striscia sotto in FADE
+
+   Lettura del canale Throttle (3) con la funzione Pulsein
+*/
+
+#include <common.h>
+
+// LED disponibili
+Lampeggiatore left = 12;
+Lampeggiatore right = 11;
+Pwm sotto = 9;
+
+// Variabili
+const byte thrPin = 3; // PIN collegato al CH3
+byte thr ; // Throttle
+int thrIn ;
+
+void setup() {
+  // I PINs vengono impostati dal constructor al momento
+  // della dichiarazione dell'ogetto.
+
+  right.Invert() ;  // Opzionale: inverte l'ordine del lampeggio da
+  // HI -> LOW --> LOW -> HI
+  // per avere 2 LED che lampeggiano alternativamente
+}
+
+void loop() {
+// Lettura CH3
+  thrIn = pulseIn(thrPin, HIGH, 25000);
+  thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ;
+
+
+
+// Attivazione LEDs
+  left.Blink(1120 - 4 * thr);   
+  right.Blink(1120 - 4 * thr);
+  sotto.lSet(thr);   // Luminosita' proporzionale al throttle
+  delay(10); // Opzionale 
+}
diff --git a/esempi/base_th_3stati/base_th_3stati.ino b/esempi/base_th_3stati/base_th_3stati.ino
new file mode 100644
index 0000000..21656ae
--- /dev/null
+++ b/esempi/base_th_3stati/base_th_3stati.ino
@@ -0,0 +1,66 @@
+/* Esempio
+
+   Esempio base:
+   2 LED / Strisce laterali che lampeggiano alternativamente
+   1 LED / Striscia sotto in FADE
+
+   Lettura del canale Throttle (3) con la funzione Pulsein
+*/
+
+#include <common.h>
+
+// LED disponibili
+Lampeggiatore left = 10;
+Lampeggiatore right = 11;
+Pwm sotto = 9;
+
+// Quando il Throttle e' in IDE facciamo un PWM anche sui laterali
+Pwm lpwm = 10 ;
+Pwm rpwm = 11;
+
+// Variabili
+const byte thrPin = 3; // PIN collegato al CH3
+byte thr ; // Throttle
+int thrIn ;
+byte caso;
+
+void setup() {
+  // I PINs vengono impostati dal constructor al momento
+  // della dichiarazione dell'ogetto.
+
+  right.Invert() ;  // Opzionale: inverte l'ordine del lampeggio da
+  // HI -> LOW --> LOW -> HI
+  // per avere 2 LED che lampeggiano alternativamente
+
+  randomSeed(analogRead(0));
+}
+
+void loop() {
+  // Lettura CH3
+  thrIn = pulseIn(thrPin, HIGH, 25000);
+  thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ;
+
+// Gestione throttle
+  if (thr > 0 && thr < 15) {
+    // IDLE
+
+    rpwm.UD(2000);
+    lpwm.UD(2000);
+    sotto.lDown(1500);
+  } else if (thr < 245) {
+    // Throttle medio
+
+    right.Blink(1120 - 4 * thr );
+    left.Blink(1120 - 4 * thr );
+    sotto.lSet(thr);   // Luminosita' proporzionale al throttle
+  } else {
+    // Throttle al massimo: LED laterali lampeggiano a caso,
+    // Sotto luminosita' a caso
+
+    caso = random(20, 240) ;
+    right.Swap();
+    left.Swap();
+    sotto.lSet(caso);
+    delay(caso);
+  }
+}
diff --git a/esempi/state_throttle/state_throttle.ino b/esempi/state_throttle/state_throttle.ino
index c263642..23e3a2d 100644
--- a/esempi/state_throttle/state_throttle.ino
+++ b/esempi/state_throttle/state_throttle.ino
@@ -2,6 +2,8 @@
 
 Idle, throttle e averburner effect basati sono sul canale throttle.   
 
+FSM con dispatcher esterno.
+
 
 */
 
-- 
2.39.2