From: eaman Date: Mon, 30 Jan 2017 18:13:37 +0000 (+0100) Subject: Cleanup, esempi X-Git-Url: http://git.piffa.net/web?a=commitdiff_plain;h=32041f442197b78fab52a297a1b5e71ef6eb16a3;p=aerei Cleanup, esempi --- 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 + +// 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 + +// 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 + +// 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. + */