]> git.piffa.net Git - aerei/blob - aerei/zeta/zeta/zeta.ino
Clean Up
[aerei] / aerei / zeta / zeta / zeta.ino
1 /* Zeta
2
3 Versione con solo il throttle come input via pulseIn.
4
5 Aggiunta striscia RGB sotto.
6
7
8 */
9
10 #include <common.h>
11 enum states_available { // Stati della FMS
12   idle,    // Throttle a zero
13   normal,  // Th normale
14   full,    // Th massimo
15 };
16 states_available state  ;
17
18 // Due LED con lampeggio alternato:
19 Lampeggiatore right = 3; // Lampeggiatori superiori a lato fusoliera
20 Lampeggiatore left = 5;
21 const byte rtail = 6; // Luci del motore posteriore
22 const byte ltail = 9;
23 const byte thrPin = A3; 
24 byte pausa ;
25 byte thr ;
26 int thrIn ;
27
28 Pwm rwhite = 3; // PWM sui lampeggiatori
29 Pwm lwhite = 5; 
30 Pwm rtp = 6 ;   // PWM sulla coda
31 Pwm ltp = 9 ;
32
33 RGBLed rgb(7,8,4,255);
34
35 void setup() {
36   left.Invert() ; // Parte da stato invertito rispetto al default
37   pinMode(rtail, OUTPUT);
38   pinMode(ltail, OUTPUT);
39   pinMode(thrPin, INPUT);
40   // Warning: serial breaks PWM
41   // Serial.begin(9600);
42
43   randomSeed(analogRead(0));
44     // Test iniziale dei LED per verifica contatti:
45   left.High();
46   right.High();
47   rgb.White();
48   rtp.Set(255);
49   ltp.Set(255);
50   delay(4000);
51 }
52
53 void loop() {
54
55
56   thrIn = pulseIn(thrPin, HIGH, 25000);
57   thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ;
58   delay(10); // Se si abilita il serial debug
59   // togliere il delay
60
61   // FMS dispatcher
62   if ( thr < 10 ) {
63     state = idle ;
64   } else if ( thr > 245 ) {
65     state = full ;
66   } else {
67     state = normal ;
68   }
69
70   switch (state) {
71     case idle:
72     rgb.Green();
73     
74       rwhite.UD(2000);  // Utilizza il coseno
75       lwhite.UD(2000);  // Bisognerebbe evitare di calcolarli 4 volte uguale
76       ltp.shift = 500;
77       ltp.lUp(1000);
78       rtp.lUp(1000);
79       break;
80
81     case normal:
82     rgb.Blue();
83       // Due LED con lampeggio alternato:
84       right.Blink(1120 - 4 * thr );
85       left.Blink(1120 - 4 * thr );
86       analogWrite(rtail, lum(thr));
87       analogWrite(ltail, lum(thr));
88       break;
89
90     case full:
91     rgb.Red();
92       pausa = random(30, 125);
93       // Due LED con lampeggio alternato:
94       right.Blink(1120 - 4 * thr );
95       digitalWrite(ltail, !digitalRead(ltail));
96       digitalWrite(3, !digitalRead(3));
97   
98
99       left.Blink(1120 - 4 * thr );
100       digitalWrite(rtail, !digitalRead(rtail));
101       digitalWrite(5, !digitalRead(5));
102       delay(pausa);
103       break;
104   }
105
106
107   //  Serial.println(thrIn);
108   //  Serial.print("\t thr:");
109   //  Serial.print(thr);
110   //  Serial.print("\t state:");
111   //  Serial.println(state);
112
113 }