From 6c4dff57d5afd76942f01aae151acd6b2e217db5 Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Wed, 15 Mar 2017 12:43:45 +0100 Subject: [PATCH] Aero, toggle on/off --- .gitignore | 1 - aerei/daniele/fsm_switch/fsm_switch.ino | 81 ++++++++++++++----- aerei/daniele/prototipo/prototipo.ino | 5 +- .../lettura_switch_pulse.ino | 76 +++++++++++++++++ esempi/snippets/tog_func/tog_func.ino | 79 ++++++++++++++++++ .../toggle_transition/toggle_transition.ino | 13 ++- libraries/aero | 1 + 7 files changed, 229 insertions(+), 27 deletions(-) create mode 100644 esempi/snippets/lettura_switch_pulse/lettura_switch_pulse.ino create mode 100644 esempi/snippets/tog_func/tog_func.ino create mode 160000 libraries/aero diff --git a/.gitignore b/.gitignore index 6b88347..7370be0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ TODO push.sh -libraries/aero/ *.swp *Makefile *tags diff --git a/aerei/daniele/fsm_switch/fsm_switch.ino b/aerei/daniele/fsm_switch/fsm_switch.ino index b5611a6..bae17e1 100644 --- a/aerei/daniele/fsm_switch/fsm_switch.ino +++ b/aerei/daniele/fsm_switch/fsm_switch.ino @@ -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 -# define DEBUG +#include +# 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() { diff --git a/aerei/daniele/prototipo/prototipo.ino b/aerei/daniele/prototipo/prototipo.ino index dffeaa5..a790082 100644 --- a/aerei/daniele/prototipo/prototipo.ino +++ b/aerei/daniele/prototipo/prototipo.ino @@ -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 index 0000000..b08b84f --- /dev/null +++ b/esempi/snippets/lettura_switch_pulse/lettura_switch_pulse.ino @@ -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 + +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 index 0000000..7c93dd7 --- /dev/null +++ b/esempi/snippets/tog_func/tog_func.ino @@ -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 + +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; +} ; + +} diff --git a/esempi/toggle_transition/toggle_transition.ino b/esempi/toggle_transition/toggle_transition.ino index 0b49d9b..009a736 100644 --- a/esempi/toggle_transition/toggle_transition.ino +++ b/esempi/toggle_transition/toggle_transition.ino @@ -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 index 0000000..5d8011d --- /dev/null +++ b/libraries/aero @@ -0,0 +1 @@ +Subproject commit 5d8011da088d10d3baf1804159b19aead3c06f3a -- 2.39.2