1 /* Ailerons state machine
3 Pilotare un LED RGB in base al canale degli alettoni:
5 = 3 stati + 2 transizioni:
11 * clean up magic numbers
18 unsigned long currentMillis; // timestamp reference per millis per tutto il loop
21 RGBLed ailerons(11,10,9,255); // Common Cat
24 Pwm sxLamp(10); // Lampeggiatore
25 Pwm dxLamp(9); // Lampeggiatore
28 // Variabili per lettura canale servo
29 const byte ailPin = A4;
30 int ail ; // Valore a 8bit per ailerons
31 int ailIn ; // Valore rilevato del 4 Ch della RX
32 unsigned long ailTimer ; // millis per ail
35 // FSM gestione alettoni
36 enum { // Stati della FMS
38 sxin, // transizione a sx
40 dxin, // transizione a dx
45 unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni
46 unsigned long pausa = 1000; // Pausa per la transizione durante gli stati 2, 4 della FSM
49 int mid_point = 1560 ; // centro del segnale, trimmato nel setup
50 const int deviation = 50 ; // deviazione dal punto medio
51 //per entrare nello stato successivo dal centro
53 ///////////////////////////////////////////////////////////
62 // Funzione relativa a calibrazione:
63 mid_point = calibraTrim(ailPin) ; // + LED di servizio per monitor calibrazione
67 currentMillis = millis(); // Timestamp per tutto il loop
69 // Lettura ailerons channel ogni 200ms
70 if (currentMillis - ailTimer>= 200) {
72 ailIn = pulseIn(ailPin, HIGH, 25000);
73 if (ailIn > 960 && ailIn <2000) {
74 // get only resonable values
76 ailTimer = currentMillis ;
86 if (ail > mid_point + deviation + deviation /3) {
87 // extra margine per avere un po' di gioco
89 FSM_lastMillis = currentMillis;
91 else if (ail < mid_point - deviation - deviation / 3) {
93 FSM_lastMillis = currentMillis ;
100 if (currentMillis - pausa > FSM_lastMillis ) {
108 if (ail < mid_point + deviation) {
111 else if (ail < mid_point - deviation) {
112 FSM_lastMillis = currentMillis;
120 if (currentMillis - pausa > FSM_lastMillis ) {
128 if (ail > mid_point - deviation) {
131 else if (ail > mid_point + deviation) {
132 FSM_lastMillis = currentMillis;
138 Serial.print("ailIn: ");
140 Serial.print("\tail: ");
142 Serial.print("\t ailstate:");
143 Serial.println(ailstate);