X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=_posts%2Fsnippets%2F2017-02-13-pulse-in.markdown;fp=_posts%2Fsnippets%2F2017-02-13-pulse-in.markdown;h=0d55432ed89e777792f68eb333047119476ca749;hb=3a734e85bd34704fdf2977eaa6493f39cde93791;hp=0000000000000000000000000000000000000000;hpb=e481500224d49e7c687121ebba70b6bfce7ceec6;p=aerei_site diff --git a/_posts/snippets/2017-02-13-pulse-in.markdown b/_posts/snippets/2017-02-13-pulse-in.markdown new file mode 100644 index 0000000..0d55432 --- /dev/null +++ b/_posts/snippets/2017-02-13-pulse-in.markdown @@ -0,0 +1,32 @@ +--- +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 %}