]> git.piffa.net Git - aerei_site/blob - _posts/snippets/2017-02-13-pulse-in.markdown
0d55432ed89e777792f68eb333047119476ca749
[aerei_site] / _posts / snippets / 2017-02-13-pulse-in.markdown
1 ---
2 layout: post
3 title:  "Lettura dati canli RX con PulseIn"
4 date:   2017-02-13 05:14:16 +0100
5 categories: snippets
6 ---
7
8 # PulseIn
9
10 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.
11
12 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).
13
14 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.
15
16
17 Soluzione migliore: utilizzare gli interrupts.
18
19 ## Lettura di un canale
20
21
22 {% highlight ruby %}
23 {% include_relative /repo/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino %}
24 {% endhighlight %}
25
26
27
28 ## Lettura di un canale con millis
29
30 {% highlight ruby %}
31 {% include_relative /repo/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino %}
32 {% endhighlight %}