]> git.piffa.net Git - aerei/commitdiff
Aero, toggle on/off
authorAndrea Manni <andrea@piffa.net>
Wed, 15 Mar 2017 11:43:45 +0000 (12:43 +0100)
committerAndrea Manni <andrea@piffa.net>
Wed, 15 Mar 2017 11:43:45 +0000 (12:43 +0100)
.gitignore
aerei/daniele/fsm_switch/fsm_switch.ino
aerei/daniele/prototipo/prototipo.ino
esempi/snippets/lettura_switch_pulse/lettura_switch_pulse.ino [new file with mode: 0644]
esempi/snippets/tog_func/tog_func.ino [new file with mode: 0644]
esempi/toggle_transition/toggle_transition.ino
libraries/aero [new submodule]

index 6b883474fd44e27f8820618a283a7ae31be21ea2..7370be0f03aaadfc89a9cd4096128b939647c74d 100644 (file)
@@ -1,6 +1,5 @@
 TODO
 push.sh
-libraries/aero/
 *.swp
 *Makefile
 *tags
index b5611a6234ae1539ac7ac2b696b89183ff306d02..bae17e1297f57b35d0b8d696acb457b1c4bbf902 100644 (file)
@@ -1,5 +1,6 @@
 /* Aereo di Daniele
 
+FSM: il throttle e' a posto
 Prototipo: F8 Bearcat
 
 Output:
@@ -10,16 +11,22 @@ Input:
     2 interrupts per th e alettone
     PIN 2:  alettone
     PIN 3:  throttle
+    PIN A1: interruttore On/Off
 
 
+NOTE: aggiunta libreria aero per gestione interruttore,
+         da testare.
+
     TODO
+* testare
 * Vedere la calibrazione automatica
 * Min e max a 1000 - 2000 per alettone
 
 */
 
 #include <common.h>
-# define DEBUG
+#include <aero.h>
+# define dEBUG
 
 // Instanziamo un LED fuori dal loop
 Lampeggiatore left = 6;
@@ -27,10 +34,10 @@ Lampeggiatore right = 9;
 Lampeggiatore codasx = 5;
 Lampeggiatore codadx = 10;
 
-//Pwm pleft = 6;
-//Pwm pright = 9;
-//Pwm pcodasx = 5;
-//Pwm pcodadx = 10;
+Pwm pleft = 6;
+Pwm pright = 9;
+Pwm pcodasx = 5;
+Pwm pcodadx = 10;
 
 // Variabili per interrupt 0 si PIN 2
 volatile unsigned int chValue2 = 1500; // Valore computato
@@ -40,6 +47,8 @@ volatile unsigned int chStart2 = 1500; // Inizio rilevamento
 volatile unsigned int chValue3 = 1500; // Valore computato
 volatile unsigned int chStart3 = 1500; // Inizio rilevamento
 
+const byte chPin = A1; // PIN interruttore generale
+
 // Variabili per autocalibrazione 0
 const byte chPin2 = 2; // PIN per la calibrazione alettone
 int mid_point2 = 1500;
@@ -48,30 +57,60 @@ int mid_point2 = 1500;
 const byte chPin3 = 3; // PIN per la calibrazione
 int mid_point3 = 1000;
 
+// Variabili
+int caso ;
+int thrBit;
 
 void setup() {
-    // I PINs vengono impostati dal constructor al momento
-    // della dichiarazione dell'ogetto.
-    right.Invert();
-    codadx.Invert();
+  // I PINs vengono impostati dal constructor al momento
+  // della dichiarazione dell'ogetto.
+right.Invert();
+codadx.Invert();
 
-    // HI -> LOW --> LOW -> HI
-    // per avere 2 LED che lampeggiano alternativamente
+  // HI -> LOW --> LOW -> HI
+  // per avere 2 LED che lampeggiano alternativamente
     // Funzione relativa a calibrazione con pulsein:
-    //mid_point2 =  calibraTrim(chPin2) ; // Calibrazione del TRIM attivo sul canale
+    mid_point2 =  calibraTrim(chPin2) ; // Calibrazione del TRIM attivo sul canale
     //mid_point3 =  calibraTrim(chPin3) ; // Calibrazione del TRIM attivo sul canale
     attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
     attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168
-#ifdef DEBUG
-    Serial.begin(9600);
+#ifdef dEBUG
+Serial.begin(9600); 
 #endif
 }
 
 void loop() {
-    left.Blink(300);
-    right.Blink(300);
-    codasx.Blink();
-    codadx.Blink();
+if (toggleRead(A0)) { // Interruttore generale
+// Gestione throttle
+    if (chValue3 < 1050) {
+        // IDLE
+//pleft.Up(1000);
+//pright.Up(1000);
+pcodasx.UD(2000);
+pcodadx.UD(2000);
+pleft.lUp(1000);
+pright.lDown(1000);
+
+
+    }
+    else if (chValue3 > 1900) {
+        // Throttle al massimo: LED laterali lampeggiano a caso,
+        // Sotto luminosita' a caso
+        caso = random(30, 250) ;
+pleft.Set(caso); 
+pright.Set(caso); 
+pcodasx.Set(caso);
+pcodadx.Set(caso);
+        delay(caso);
+    }
+    else {
+        // Throttle medio
+        thrBit = map(chValue3,1050, 1900, 0, 255);
+        codasx.Blink(1220 - 4 * thrBit );
+        codadx.Blink(1220 - 4 * thrBit );
+left.Blink(map(chValue2,1000,2000,200,800 ));
+right.Blink(map(chValue2,1000,2000,800,200 ));
+    }
 
 #ifdef DEBUG
     Serial.print("PIN2: ");
@@ -85,6 +124,12 @@ void loop() {
     Serial.println(mid_point3);
     delay(200);
 #endif
+} else { // Interruttore off
+pleft.Set(0); 
+pright.Set(0); 
+pcodasx.Set(0);
+pcodadx.Set(0);
+}
 }
 // Functions
 void chRise2() {
index dffeaa52be622c7599df2e3f3847070d1c10e637..a79008246994ef9e86e05c36ab06e14cd2d42ca1 100644 (file)
@@ -10,6 +10,7 @@ Input:
     2 interrupts per th e alettone
     PIN 2:  alettone
     PIN 3:  throttle
+    PIN A1: interruttore On/Off
 
 
     TODO
@@ -40,6 +41,8 @@ volatile unsigned int chStart2 = 1500; // Inizio rilevamento
 volatile unsigned int chValue3 = 1500; // Valore computato
 volatile unsigned int chStart3 = 1500; // Inizio rilevamento
 
+const byte chPin = A1; // PIN interruttore generale
+
 // Variabili per autocalibrazione 0
 const byte chPin2 = 2; // PIN per la calibrazione alettone
 int mid_point2 = 1500;
@@ -54,9 +57,9 @@ void setup() {
   // della dichiarazione dell'ogetto.
 right.Invert();
 codadx.Invert();
-
   // HI -> LOW --> LOW -> HI
   // per avere 2 LED che lampeggiano alternativamente
+
     // Funzione relativa a calibrazione con pulsein:
     //mid_point2 =  calibraTrim(chPin2) ; // Calibrazione del TRIM attivo sul canale
     //mid_point3 =  calibraTrim(chPin3) ; // Calibrazione del TRIM attivo sul canale
diff --git a/esempi/snippets/lettura_switch_pulse/lettura_switch_pulse.ino b/esempi/snippets/lettura_switch_pulse/lettura_switch_pulse.ino
new file mode 100644 (file)
index 0000000..b08b84f
--- /dev/null
@@ -0,0 +1,76 @@
+/* Toggle con transizioni tra On | OFF con pulseIn
+
+
+Sketch di esempio per accensione spegnimento di tutto l'impianto luci
+tramite un interruttore a due posizioni della radio utilizzando pulseIn.
+
+Output esempio: 
+   1 Lampeggiatore in coda in PWM
+
+Input:
+   1 interruttore su interrupt 0 per accensione / spegnimento luci
+
+
+   Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
+   quindi blocca per 1-2ms a ogni esecuzione. Con la variabile freq
+   si imposta ogni quanto fare una lettura.
+
+
+*/
+
+#define DEBUG
+#include <common.h>
+
+unsigned long currentMillis; // timestamp reference per millis per tutto il loop
+
+// Variabili Toggle
+const byte chToggle = A0; // PIN su cui e' collegato il canale
+long unsigned toggleTime = 0; // Timestamp per switch
+int toggleValue = 1500; // Valore catturato
+int toggleIn = 1500; // Valore filtrato
+const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
+const unsigned int freq = 200 ; // Ogni quanti millisecondi leggere il valore
+// Attenzione che pulsein e' blocking
+
+void setup() {
+
+#ifdef DEBUG
+Serial.begin(9600); 
+#endif
+} ;
+
+void loop() {
+    currentMillis = millis(); // Timestamp per tutto il loop
+
+// Lettura ailerons channel ogni 200ms
+    if (currentMillis - toggleTime > freq) {
+
+        toggleIn = pulseIn(chToggle, HIGH, 25000);
+        if (toggleIn != 0 && toggleIn > 1000 && toggleIn <2000)  {
+            // get only resonable values
+            toggleValue = toggleIn;
+            toggleTime = currentMillis ;
+        } ;
+    };
+
+if (toggleValue > soglia) {
+    // Luci accese
+#ifdef DEBUG
+    Serial.print("Luci On ");
+#endif
+
+} else {
+    // luci spente
+#ifdef DEBUG
+    Serial.print("Luci Off ");
+#endif
+} ;
+
+#ifdef DEBUG
+    Serial.print(toggleIn);
+    Serial.print(" - Filtrato: ");
+    Serial.println(toggleValue);
+    //delay(200);
+#endif
+
+}
diff --git a/esempi/snippets/tog_func/tog_func.ino b/esempi/snippets/tog_func/tog_func.ino
new file mode 100644 (file)
index 0000000..7c93dd7
--- /dev/null
@@ -0,0 +1,79 @@
+/* Toggle con transizioni tra On | OFF con pulseIn
+   Funzione
+
+
+Sketch di esempio per accensione spegnimento di tutto l'impianto luci
+tramite un interruttore a due posizioni della radio utilizzando pulseIn.
+
+Output esempio: 
+   1 Lampeggiatore in coda in PWM
+
+Input:
+   1 interruttore su interrupt 0 per accensione / spegnimento luci
+
+
+   Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
+   quindi blocca per 1-2ms a ogni esecuzione. Con la variabile freq
+   si imposta ogni quanto fare una lettura.
+
+
+*/
+
+#define dEBUG
+#include <common.h>
+
+unsigned long currentMillis; // timestamp reference per millis per tutto il loop
+
+
+void setup() {
+   Serial.begin(9600);
+#ifdef DEBUG
+Serial.begin(9600); 
+#endif
+} ;
+
+void loop() {
+currentMillis = millis(); // Timestamp per tutto il loop
+
+
+if (toggleRead(A0)) {
+    // Luci accese
+    Serial.println("Luci On ");
+} else {
+    // luci spente
+    Serial.println("Luci Off ");
+} ;
+
+
+}
+
+boolean toggleRead(byte togglePin) {
+// Variabili Toggle
+long static unsigned toggleTime ; // Timestamp per switch
+static int toggleValue = 0 ; // Valore catturato
+static int toggleIn = 0 ; // Valore filtrato
+const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
+const unsigned int freq = 400 ; // Ogni quanti millisecondi leggere il valore
+
+    if (currentMillis - toggleTime > freq) {
+
+        toggleIn = pulseIn(togglePin, HIGH, 25000);
+        if (toggleIn != 0 && toggleIn > 1000 && toggleIn <2000)  {
+            // get only resonable values
+            toggleValue = toggleIn;
+            toggleTime = currentMillis ;
+        } ;
+    };
+#ifdef DEBUG
+    Serial.print(toggleIn);
+    Serial.print(" - Filtrato: ");
+    Serial.println(toggleValue);
+#endif
+
+if (toggleValue > soglia) {
+    return 1;
+} else {
+    return 0;
+} ;
+
+}
index 0b49d9bdae524d699178ee6855f0ab6b80ecb183..009a736ed58959397514740875a1d51fd3ac9180 100644 (file)
@@ -1,7 +1,11 @@
-/* Toggle con transizioni tra On | OFF
+/* Toggle con transizioni tra On | OFF con interrupt
+
+
+Sketch di esempio per accensione spegnimento di tutto l'impianto luci
+tramite un interruttore a due posizioni della radio.
 
 Output esempio: 
-   1 Lampeggiatore in coda.
+   1 Lampeggiatore in coda in PWM
 
 Input:
    1 interruttore su interrupt 0 per accensione / spegnimento luci
@@ -36,12 +40,7 @@ Lampeggiatore coda = 9;
 Pwm codaPWM = 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() {
diff --git a/libraries/aero b/libraries/aero
new file mode 160000 (submodule)
index 0000000..5d8011d
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 5d8011da088d10d3baf1804159b19aead3c06f3a