1 /* Ailerons state machine
3 Pilotare un LED RGB in base al canale degli alettoni:
5 = 3 stati + 2 transizioni:
10 NOTE: uso di goto all'interno dell FSM.
14 * clean up magic numbers
20 enum { // Stati della FMS
22 sxin, // transizione a sx
24 dxin, // transizione a dx
29 RGBLed ailerons(11,10,9);
31 const byte ailPin = A4;
32 int ail ; // Valore a 8bit per ailerons
33 int ailIn ; // Valore rilevato del 4 Ch della RX
36 unsigned long now; // timestamp reference for millis
37 unsigned long pausa = 1000;
39 int mid_point = 1500 ; // centro del segnale, trimmato nel setup
40 const int deviation = 50 ; // deviazione per entrare nello stato succiessivo
43 /* Bisognerebbe introdurre una calibrazione per compensare i TRIM
44 ed eventualmente i dual rates.
46 - attivarla se allo start un ale e' al massimo
47 - fargli leggere i valori massimi
49 - per i dual rates: si potrebbe intercettare valori oltre al max
50 e in base a questi traslare le soglie automaticamente
52 Hint: leggere la soglia di rollio significativo in volo
53 e inserirla nei riferimenti.
58 /* START Calibrazione TRIM canale:
60 calcolo del valore medio esclusi gli 0
63 Serial.println(">> Calibrazione: ");
65 ailIn = pulseIn(ailPin, HIGH, 25000);
72 digitalWrite(13, !digitalRead(13));
76 mid_point = ail / 10 ;
77 Serial.print(">> Fine Calibrazione: ");
78 Serial.print(mid_point);
82 // Funzione relativa a calibrazione:
83 //mid_point = calibraTrim(ailPin) ; // Pin a cui e' collegato il canale
84 //mid_point = calibraTrim(aliPin,11) ; // + LED di servizio per monitor calibrazione
89 // Lettura Aileron channel: FAKE con un potenziometro 10K
90 //ailIn = analogRead(3);
91 //ail = constrain(aliIn * 2 , 0, 2000) ;
93 // Lettura ailerons channel
94 ailIn = pulseIn(ailPin, HIGH, 25000);
96 ail = constrain(ailIn, 1000, 2000);
98 // con un altra ricevente, fare una calibrazione nel caso.
105 if (ail > mid_point + deviation + deviation /3) {
110 else if (ail < mid_point - deviation - deviation / 3) {
123 if (millis() - pausa > now ) {
131 if (ail < mid_point + deviation) {
134 else if (ail < mid_point - deviation) {
144 if (millis() - pausa > now ) {
152 if (ail > mid_point - deviation) {
155 else if (ail > mid_point + deviation) {
162 Serial.print("ailIn: ");
164 Serial.print("\tail: ");
166 Serial.print("\t ailstate:");
167 Serial.println(ailstate);