+* 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
-/* Zeta test
- * le funzioni finali sono da controllare
-
+/* Zeta senza state machine
+
+Gestione del Throttle con ciclo condizionale.
*/
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);
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.
-
- }
-}
-/* Zeta test
- * le funzioni finali sono da controllare
+/* Zeta prototipo
+ Sketch da breadboard, il throttle e' simulato con un potenziometro.
*/
--- /dev/null
+/* 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
+}
--- /dev/null
+/* 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
+}
--- /dev/null
+/* 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);
+ }
+}
Idle, throttle e averburner effect basati sono sul canale throttle.
+FSM con dispatcher esterno.
+
*/