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)
18 Lampeggiatore left = 7;
19 Lampeggiatore right = 8;
23 RGBLed ailerons(11,10,9,255); // Common Cat
24 // Transizione: lampeggiatori sui PIN RGB
25 Lampeggiatore sxLamp(10); // Lampeggiatore
26 Lampeggiatore dxLamp(9); // Lampeggiatore
33 //////////////// !!!! cambiare thrIn
34 const byte thrPin = A5; // PIN collegato al CH3
35 byte thr ; // Throttle a 8bit
36 int thrIn ; // Valore del th in ingresso dal servo
38 // Variabili per interrupt 0 su PIN 2
39 volatile unsigned int ail = 1500; // Valore computato
40 volatile unsigned int chStart2 = 1500; // Inizio rilevamento
42 // Variabili per autocalibrazione 0
43 const byte chPin2 = 2; // PIN per la calibrazione
44 int mid_point2 = 1500;
47 int mid_point = 1560 ; // centro del segnale, trimmato nel setup
48 const int deviation = 50 ; // deviazione dal punto medio
49 //per entrare nello stato successivo dal centro
52 // FSM gestione alettoni
53 enum { // Stati della FMS
55 sxin, // transizione a sx
57 dxin, // transizione a dx
62 unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni
63 unsigned long pausa = 600; // Pausa per la transizione durante gli stati 2, 4 della FSM
66 unsigned long currentMillis; // timestamp reference per millis per tutto il loop
67 byte caso ; // Valore random
71 // I PINs vengono impostati dal constructor al momento
72 // della dichiarazione dell'ogetto.
73 pinMode(thrPin,INPUT);
74 right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da
76 attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
78 randomSeed(analogRead(0));
80 // Test iniziale dei LED per verifica contatti:
94 currentMillis = millis(); // Timestamp per tutto il loop
97 thrIn = pulseIn(thrPin, HIGH, 25000);
98 // Hint: thrIn andrebbe calibrato son un Serial.write
100 thr = map(thrIn, 960, 2000, 0, 255);
104 if (thr >= 0 && thr < 15) {
110 } else if (thr < 245) {
113 right.Blink(1120 - 4 * thr );
114 left.Blink(1120 - 4 * thr );
115 motore.lSet(thr); // Luminosita' proporzionale al throttle
117 // Throttle al massimo: LED laterali lampeggiano a caso,
118 // Sotto luminosita' a caso
120 caso = random(20, 240) ;
134 if (ail > mid_point + deviation + deviation /3) {
135 // extra margine per avere un po' di gioco
138 FSM_lastMillis = currentMillis;
140 else if (ail < mid_point - deviation - deviation / 3) {
143 FSM_lastMillis = currentMillis ;
150 if (currentMillis - pausa > FSM_lastMillis ) {
157 if (ail < mid_point + deviation) {
160 else if (ail < mid_point - deviation) {
161 FSM_lastMillis = currentMillis;
169 if (currentMillis - pausa > FSM_lastMillis ) {
176 if (ail > mid_point - deviation) {
179 else if (ail > mid_point + deviation) {
180 FSM_lastMillis = currentMillis;
188 Serial.print("\tthr: ");
190 Serial.print("\tail: ");
192 Serial.print("\t ailstate:");
193 Serial.println(ailstate);
198 attachInterrupt(0, chFall2, FALLING);
203 attachInterrupt(0, chRise2, RISING);
204 ail = micros() - chStart2;