4 2 LED / Strisce laterali che lampeggiano alternativamente
5 1 LED in PWM per il motore
6 1 Striscia RGB sotto per tutta la lunghezza delle ali
9 Lettura del canale Throttle (3) con la funzione Pulsein
10 Lettura alettoni con interrupt 0 (PIN2)
13 * Cambiare il PIN del throttle su A5 da A3
14 * attaccare il canale degli alettoni al pin2
15 * guardare che tipo di RGB e', anodo o cat
16 * a full throttle RGB fa un Rand, vedere che non vada in conflitto con la sec FSM
24 Lampeggiatore left = 7;
25 Lampeggiatore right = 8;
29 RGBLed ailerons(6,5,9,255);
30 // Transizione: lampeggiatori sui PIN RGB
31 Lampeggiatore sxLamp(5); // Lampeggiatore
32 Lampeggiatore dxLamp(9); // Lampeggiatore
39 //////////////// !!!! cambiare thrIn
40 const byte thrPin = A2; // PIN collegato al CH3
41 byte thr ; // Throttle a 8bit
42 int thrIn ; // Valore del th in ingresso dal servo
44 // Variabili per interrupt 0 su PIN 2
45 volatile unsigned int ail = 1500; // Valore computato
46 volatile unsigned int chStart2 = 1500; // Inizio rilevamento
50 const byte chPin2 = 2; // PIN per la calibrazione
51 int mid_point = 1450 ; // centro del segnale, trimmato nel setup
52 const int deviation = 40 ; // deviazione dal punto medio
53 //per entrare nello stato successivo dal centro
56 // FSM gestione alettoni
57 enum { // Stati della FMS
59 sxin, // transizione a sx
61 dxin, // transizione a dx
66 unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni
67 unsigned long pausa = 600; // Pausa per la transizione durante gli stati 2, 4 della FSM
70 unsigned long currentMillis; // timestamp reference per millis per tutto il loop
71 byte caso ; // Valore random
75 // I PINs vengono impostati dal constructor al momento
76 // della dichiarazione dell'ogetto.
77 pinMode(thrPin,INPUT);
78 right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da
80 attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
82 randomSeed(analogRead(0));
84 // Test iniziale dei LED per verifica contatti:
92 mid_point = calibraTrim(chPin2) + 8 ; // + LED di servizio per monitor calibrazione
99 currentMillis = millis(); // Timestamp per tutto il loop
102 thrIn = pulseIn(thrPin, HIGH, 25000);
103 // Hint: thrIn andrebbe calibrato son un Serial.write
105 thr = map(thrIn, 870, 2000, 0, 255);
110 if (thr >= 0 && thr < 15) {
122 } else if (thr < 245) {
125 right.Blink(1120 - 4 * thr );
126 left.Blink(1120 - 4 * thr );
127 motore.lSet(thr); // Luminosita' proporzionale al throttle
137 if (ail > mid_point + deviation + deviation /3) {
138 // extra margine per avere un po' di gioco
141 FSM_lastMillis = currentMillis;
143 else if (ail < mid_point - deviation - deviation / 3) {
146 FSM_lastMillis = currentMillis ;
153 if (currentMillis - pausa > FSM_lastMillis ) {
160 if (ail < mid_point + deviation) {
163 else if (ail < mid_point - deviation) {
164 FSM_lastMillis = currentMillis;
172 if (currentMillis - pausa > FSM_lastMillis ) {
179 if (ail > mid_point - deviation) {
182 else if (ail > mid_point + deviation) {
183 FSM_lastMillis = currentMillis;
190 // Throttle al massimo: LED laterali lampeggiano a caso,
191 // Sotto luminosita' a caso
193 caso = random(20, 240) ;
207 Serial.print("\tthr: ");
209 Serial.print("\tail: ");
211 Serial.print("\t ailstate:");
212 Serial.println(ailstate);
213 //Serial.print("\t mid_point:");
214 //Serial.print(mid_point);
219 attachInterrupt(0, chFall2, FALLING);
224 attachInterrupt(0, chRise2, RISING);
225 ail = micros() - chStart2;