1 /* Ailerons state machine
3 Pilotare un LED RGB in base al canale degli alettoni:
5 = 3 stati + 2 transizioni:
10 Trasizioni per accentuare il cambio di assetto (ad esempio con dei blink
11 e introdurre un po' di inerzia temporale per il cambio di stato
17 enum { // Stati della FMS
19 sxin, // transizione a sx
21 dxin, // transizione a dx
26 RGBLed ailerons(11,10,9);
28 const byte ailPin = A4;
29 int ail ; // Valore a 8bit per ailerons
30 int ailIn ; // Valore rilevato del 4 Ch della RX
35 /* Bisognerebbe introdurre una calibrazione per compensare i TRIM
36 ed eventualmente i dual rates.
37 - attivarla se allo start un ale e' al massimo
38 - fargli leggere i valori massimi
40 - per i dual rates: si potrebbe intercettare valori oltre al max
41 e in base a questi traslare le soglie automaticamente
43 Hint: leggere la soglia di rollio significativo in volo
44 e inserirla nei riferimenti.
52 // Lettura Aileron channel: FAKE con un potenziometro
53 //ailIn = analogRead(3);
54 //ail = constrain(aliIn / 4 , 0, 255) ;
56 // Lettura ailerons channel
57 ailIn = pulseIn(ailPin, HIGH, 25000);
58 if (ailIn != 0) {ail = constrain(ailIn, 1000, 2000); } ;
59 // con un altra ricevente, fare una calibrazione nel caso.
66 if (ail > 1600) { ailstate = sxin; } ;
67 if (ail < 1400) { ailstate = dxin; } ;
82 if (ail < 1600) { ailstate = middle; } ;
83 if (ail < 1400) { ailstate = dxin; } ;
96 if (ail > 1400) { ailstate = middle; } ;
97 if (ail > 1600) { ailstate = dxin; } ;
101 Serial.print("ailIn: ");
103 Serial.print("\tail: ");
105 Serial.print("\t ailstate:");
106 Serial.println(ailstate);