I lampeggi variano di frequenza in base al throttle, il PWM inferiore e’ proporzionale al throttle con correzione di luminosita’. Per rilevare il valore del throttle viene usata la funzione pulseIn: questa’ e’ bloking durante la transizione HI -> LOW quindi per circa 1-2ms ogni ~20ms (considerando una frequenza di aggiornamento di 50Hz) il loop sara’ bloccato.
Il vantaggio e’ che pulseIn puo’ essere usata su qualunque PIN.
Negli esempi successivi vedremo come impostare un numero definito di letture per secondo (ad esempio una lettura ogni 200ms potrebbe essere piu’ che sufficiente per i nostri scopi) in modo da limitare il blocco. Poi useremo gli interrupts per leggere i canali della ricevente.
- 2 LED / Strisce laterali che lampeggiano alternativamente
- 1 LED / Striscia sotto in FADE
/* 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 ; // Valore a 8bit per il throttle
int thrIn ; // Valore rilevato del 3 Ch della RX
const int thMin = 983; // In genere il valore minimo del TH resta costante,
// per calcolarlo si puo' usare la funzione di calibrazione nel setup
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);
if (thrIn >= thMin && thrIn < 2000) { // clean up
thr = map(thrIn, thMin, 2000, 0, 255); // mappato su 8bit per PWM
};
// Attivazione LEDs
left.Blink(100 + thr);
right.Blink(100 + thr);
sotto.lSet(thr); // Luminosita' proporzionale al throttle
}