--- /dev/null
+<a href="/">Home </a> - <a href="/setup">Setup</a> - <a href="/">Esempi</a> - <a href="/">Aerei</a> - <a href="/repo/">codice</a>
<body>
{% include page-header.html %}
+ {% include nav_bar.html %}
<section class="main-content">
date: 2017-02-13 06:14:16 +0100
categories: aerei
---
-L'aereo di Antonino, vedi [esempio dell'uso del throttle](/esempi/2017/02/15/throttle-stadi.html).
+L'aereo di Antonino, vedi [esempio sull'uso del throttle](/esempi/2017/02/15/throttle-stadi.html).
{% highlight ruby %}
{% include_relative /repo/aerei/antonino/bugatti/bugatti.ino %}
{% endhighlight %}
---
La *Wing Wing z84 (Zeta)* di Andrea, il primo aereo usato per il volo notturno.
+![zeta](/img/zeta.jpg){:class="img-responsive"}
+
Della Zeta sono disponibili [vari prototipi](/repo/aerei/zeta/).
-La particolarita' di Zeta e' che invece che usare un integrato ULN2803a per pilotare i LED buona parte delle striscie sono attivate da un transistor incastonato nel telaio dell'aereo in prossimita' delle strisce.
+La particolarita' di Zeta e' che invece che usare un integrato ULN2803a per pilotare i LED buona parte delle striscie sono attivate da transistors incastonati nel telaio dell'aereo in prossimita' delle strisce. *Non e' buon sistema ;)*
-Per gli altri transistor e' stato fatto in piccolo circuito su una scheda preforata per metterne in array 4, questo sistema puo' essere seguito se non si hanno a disposizione gli integrati darlighton.
+La flessione delle ali, atterraggi e transporto rendono molto instabile i circuiti: molto piu' semplice cablare tutto con l'integrato e fine (vedi <https://lab.piffa.net/schemi/uln2_darlinghton_arduino_bb.png> ).
+Per un gruppo di transistors e' stato fatto in piccolo circuito su una scheda preforata per metterne in array 4, questo sistema puo' essere seguito se non si hanno a disposizione gli integrati darlighton.
TODO: aggiungere foto
+![zeta-illuminata](/img/zeta_light.jpg){:class="img-responsive"}
+
{% highlight ruby %}
{% include_relative /repo/aerei/zeta/zeta/zeta.ino%}
{% endhighlight %}
--- /dev/null
+---
+layout: post
+title: "Yak 3D"
+date: 2017-02-17 08:14:16 +0100
+categories: aerei
+---
+# Prototipo dello Yak 980 3D di Andrea.
+
+Yak e' un acrobatico in EPP / scatolato, usa come inputs i canali throttle e alettoni. In questa versione non usa state machines, per il momento c'e' solo un ciclo *if* per gestire i LED.
+C'e' un uso estensivo di map() per abbinare gli inputs al comportamento delle luci, probabilmente e' poco efficente ma e' una soluzione semplice...
+
+Di interessante c'e' una serie di LED in sequenza (3 unita' da 3 sgmenti) sotto l'aereo, comandati dall'oggetto Sequenza che li fa' muovere variandone la velocita' in base al throttle, utile per dare un'indicazione della direzione e intensita' di avanzamento dell'aereo.
+
+Yak e' stato il primo aereo a montare questa soluzione, realizzata con due piste di rame da 3mm ai lati + dei ponti con cavetti, un po' rozza ma molto economica rispetto a una striscia di neopixels.
+
+{% highlight ruby %}
+{% include_relative /repo/aerei/yak/interrupts/interrupts.ino %}
+{% endhighlight %}
+
date: 2017-02-13 08:14:16 +0100
categories: esempi
---
-TODO
# Introduzione
-* blocking
-* OOP
+La libreria *common* contiene alcuni oggetti e funzioni di base per lampeggi, dissolvenze e sequenze tramite millis() in modo da non bloccare il processore.
+
+I PWM oltre al solito comportamento lineare hanno i metodi **l** come in *lUp* o *lSet* per la correzione della luminosita' (simile alla GAMMA), il metodo UD (Up and Down) usa invece il *coseno* per ottenere un effetto analogo che puo' quindi essere spalmato su intervalli di varia lunghezza.
+
+Si possono instanziare piu' oggetti sugli stessi PIN, ad esempio se se vuole usare un lampeggio su un PWM o su un RGB.
# Esempi sull'utilizzo della libreria
Nell'esempio successivo *ailerons_state_rgb.ino* verra' implementata una FMS con transizioni tra gli stati per la gestione di una luce RGB associata al canale degli alettoni.
{% highlight cpp %}
-{% include_relative /repo/esempi/ailerons_state_rgb/ailerons_state_rgb.ino %}
+{% include_relative /repo/esempi/state_throttle/state_throttle.ino %}
{% endhighlight %}
--- /dev/null
+---
+layout: post
+title: "Alettoni e Trottle con FSM"
+date: 2017-02-20 08:14:16 +0100
+categories: esempi
+---
+
+Questo sketch pilota una striscia RGB in base agli alettoni: bianco con roll neutro, verde da un lato e blu dall'altro. Per enfatizzare la transizione tra neutro -> rollio si verifica un lampeggio di mezzo secondo nella transizione.
+
+Il throttle e' associato a un ciclo IF che pilota un LED in PWM sul motore e due lampeggiatori laterali: al throttle e' a zero corrisponde uno PWM in dissolvenza verso il bassso per il motore e per i lampeggiatori, con throttle normali la luminosita' del motore e' proporzionale a questo, i LED laterali lampeggiano a una frequenza proporzionale al throttle. A throttle al massimo c'e' una serie di lampeggi casuali per simulare un effetto afterburner.
+
+
+INPUT:
+* PIN 2 : throttle
+* PIN 3 : alettoni
+
+OUTPUT:
+* ailerons RGB Alettoni
+* motore Motore PWM
+* left, right 2 Lampeggiatori PWM laterali + PWM
+
+FSM per alettoni
+= 3 stati + 2 transizioni:
+- piatto
+- roll a sx
+- roll a dx
+- piatto -> sx
+- piatto -> dx
+
+Tramite la lettura del valore del *throttle* vengono indicati 3 stati:
+* IDLE: gas praticamente a zero
+* Max: a tutto gas!
+* Medio: tutti i valori intermedi
+
+
+
+{% highlight cpp %}
+{% include_relative /repo/esempi/ailerons_state_thrFSM/ailerons_state_thrFSM.ino %}
+
+{% endhighlight %}
+
--- /dev/null
+---
+layout: post
+title: "Lettura dati canli RX con PulseIn"
+date: 2017-02-13 05:14:16 +0100
+categories: snippets
+---
+
+# PulseIn
+
+PulseIn e' il modo piu' semplice per decodificare un canale PWM in ingresso, puo' lavorare su qualunque PIN che possa essere utilizzato come *INPUT*. Il problema e' che la funzione e' blocking: mentre viene misurata la lunghezza dell'intervallo il processore non puo' fare altro.
+
+Quindi possiamo anticipare un blocco di circa 1.5ms (media tra il minimo di 1ms e il massimo di 2ms) ogni 20ms (se la TX manda un impulso a ~50Hz, la FRSky che sto utilizzando ha un periodo di 18ms ma puo' essere impostata anche a 8ms).
+
+Questo puo' non avere un grosso effetto su dei lampeggi da 500ms ma e' influente su dei FADE o ovviamente la lettura di altri eventuali INPUT! Una soluzione potrebbe essere di lanciare la lettura con una frequenza minore, ad es. 5 volte al sec puo' essere adeguato per leggere un interruttore, vedi esempio di pulseIn con millis.
+
+
+Soluzione migliore: utilizzare gli interrupts.
+
+## Lettura di un canale
+
+
+{% highlight ruby %}
+{% include_relative /repo/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino %}
+{% endhighlight %}
+
+
+
+## Lettura di un canale con millis
+
+{% highlight ruby %}
+{% include_relative /repo/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino %}
+{% endhighlight %}
--- /dev/null
+---
+layout: post
+title: "Calibrazione Trim"
+date: 2017-02-14 05:14:16 +0100
+categories: snippets
+---
+
+# Clibrazione
+
+Un canale come gli alettoni ha un minimo di 1000ms e un massimo di 2000ms, si presume quindi un punto medio di 1500ms. Questo e' il valore centrale che possiamo utilizzare come riferimento per i movimenti del comando.
+
+Questi canali possono pero' essere stati modificati con del Trim che trasla costantemente il punto medio: la funzione di calibrazione viene richiamata nel setup (quindi all'accensione della scheda, nel caso resettarla) e calcola il valore medio attuale del canale. Se la radio era spenta al momento dell'avvio viene utilizzato il valore medio 1500.
+
+Si noti che un canale come il throttle in genere non riceve TRIM e quindi non va' calibrato: potete leggere il valore tipico che hanno le vostre riceventi e impostare sempre quello come minimo. Sara' quindi un valore ~1000 e non 1500.
+
+
+
+{% highlight ruby %}
+{% include_relative /repo/esempi/snippets/calibrazione_servo/calibrazione_servo.ino%}
+{% endhighlight %}
--- /dev/null
+---
+layout: post
+title: "Interrupts"
+date: 2017-02-15 05:14:16 +0100
+categories: snippets
+---
+
+# Lettura di un canale PWM della RX con un interrupt
+
+Utilizzando un interrupt si puo' decodificare il segnale PWM proveninte dalla RX senza bloccare il processore. Le schede Arduino come la Uno / Nano / Mini hanno 2 interrupts abbinati ai PIN 2 / 3 utilizzabili tramite la funzione attachInterrupt .
+
+
+# Canale Singolo
+
+{% highlight ruby %}
+{% include_relative /repo/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino %}
+{% endhighlight %}
+
+# Doppio Canale
+
+{% highlight ruby %}
+{% include_relative /repo/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino %}
+{% endhighlight %}
+
--- /dev/null
+../repo
\ No newline at end of file
<div class="home">
-<h2>aerei</h2>
+<h2>Aerei</h2>
<p>Codice degli aerei gia' pronti.</p>
<ol>
{% for post in site.categories.aerei %}
utilizzate. Un modo rapido per farlo e' settare nelle preferences dell'Arduino
IDE l'intero repo ``aerei_arduino`` come cartella degli sketchbook, oppure
copiare la cartella ``libraries/common`` dentro ``libraries`` dello sketchbook
-attuale.
+attuale. Per scaricare solo la libreria vedi sotto.
Download
===============
Libreria
------------
-La sola libreria Common contenete gli oggetti base puo' essere scaricata direttamente nella vostra cartella libraries da:
+La sola libreria Common contenete gli oggetti base puo' essere scaricata direttamente nella vostra cartella libraries da::
+
git clone git://git.andreamanni.com/common
* `Download manuale archivio <https://git.andreamanni.com/web?p=common;a=snapshot;h=HEAD;sf=tgz>`__
Risorse utili per utilizzare Arduino:
* Per poter programmare le schede Arduino: `Arduino IDE <https://www.arduino.cc/en/Main/Software#>`_
+* Testi consigliati: https://lab.piffa.net/testi.html
+* Risorse online: http://wiki.piffa.net/index.php/Guide
* Risorse di Andrea: https://lab.piffa.net/
* Wiki: http://wiki.piffa.net/
* Forum: https://forum.piffa.net/
-* Testi consigliati: https://lab.piffa.net/testi.html
-* Risorse online: http://wiki.piffa.net/index.php/Guide