-/* Esempio
+/* Zeta test
-Setup per la Zeta
+Nota: rovedere i PWM per come calcolano le pause:
+non possono schendere sotto a 1ms
*/
#include <common.h>
-Lampeggiatore status = 13;
+enum states_available { // Stati della FMS
+ idle, // Throttle a zero
+ normal, // Th normale
+ full, // Th massimo
+};
+states_available state ;
+
+// Due LED con lampeggio alternato:
+Lampeggiatore right = 3;
+Lampeggiatore left = 5;
+const byte rtail = 6;
+const byte ltail = 9;
+const byte thrPin = A3;
+byte pausa ;
+byte thr ;
+int thrIn ;
+
+Pwm rwhite = 3;
+Pwm lwhite = 5;
+Pwm rtp = 6 ;
+Pwm ltp = 9 ;
-// Attorno al canopy:
-Lampeggiatore rtop = 3;
-Lampeggiatore ltop = 5;
void setup() {
- // I PINs vengono impostati dalla dichiarazione dell'ogetto.
- ltop.Invert();
+ left.Invert() ; // Parte da stato invertito rispetto al default
+ pinMode(rtail, OUTPUT);
+ pinMode(ltail, OUTPUT);
+ pinMode(thrPin, INPUT);
+ // Warning: serial breaks PWM
+ // Serial.begin(9600);
+
+ randomSeed(analogRead(0));
}
void loop() {
+ thrIn = pulseIn(thrPin, HIGH, 25000);
+ thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ;
+ // Inserire necro delay
+ delay(10); // Se si abilita il serial debug
+ // togliere il delay
+
+ // FMS dispatcher
+ if ( thr < 10 ) {
+ state = idle ;
+ } else if ( thr > 245 ) {
+ state = full ;
+ } else {
+ state = normal ;
+ }
+
+ switch (state) {
+ case idle:
+ rwhite.UD(2); // Utilizza il coseno
+ lwhite.UD(2); // Bisognerebbe evitare di calcolarlo 4 volte uguale
+ ltp.UD(2);
+ rtp.UD(2);
+ break;
+
+ case normal:
+ // Due LED con lampeggio alternato:
+ right.Blink(1120 - 4 * thr );
+ left.Blink(1120 - 4 * thr );
+ analogWrite(rtail, lum(thr));
+ analogWrite(ltail, lum(thr));
+ break;
+
+ case full:
+ pausa = random(30, 125);
+ // Due LED con lampeggio alternato:
+ right.Blink(1120 - 4 * thr );
+ digitalWrite(ltail, !digitalRead(ltail));
+ digitalWrite(3, !digitalRead(3));
+ delay(pausa);
+
+ left.Blink(1120 - 4 * thr );
+ digitalWrite(rtail, !digitalRead(rtail));
+ digitalWrite(5, !digitalRead(5));
+ delay(pausa);
+ break;
+ }
+
+
+ // Serial.println(thrIn);
+ // Serial.print("\t thr:");
+ // Serial.print(thr);
+ // Serial.print("\t state:");
+ // Serial.println(state);
- rtop.Blink(300);
- ltop.Blink(300);
- status.Blink(500);
}
/* Zeta test
-
+
Nota: rovedere i PWM per come calcolano le pause:
non possono schendere sotto a 1ms
*/
const byte rtail = 6;
const byte ltail = 9;
const byte thrPin = A3;
+byte pausa ;
byte thr ;
int thrIn ;
void loop() {
-thrIn = pulseIn(thrPin, HIGH, 25000);
-thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ;
-// Inserire necro delay
-delay(10); // Se si abilita il serial debug
- // togliere il delay
+ thrIn = pulseIn(thrPin, HIGH, 25000);
+ thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ;
+ // Inserire necro delay
+ delay(10); // Se si abilita il serial debug
+ // togliere il delay
// FMS dispatcher
if ( thr < 10 ) {
switch (state) {
case idle:
- rwhite.UD(2);
- lwhite.UD(2);
+ rwhite.UD(2); // Utilizza il coseno
+ lwhite.UD(2); // Bisognerebbe evitare di calcolarlo 4 volte uguale
ltp.UD(2);
rtp.UD(2);
break;
// Due LED con lampeggio alternato:
right.Blink(1120 - 4 * thr );
left.Blink(1120 - 4 * thr );
- analogWrite(rtail, thr);
- analogWrite(ltail, thr);
+ analogWrite(rtail, lum(thr));
+ analogWrite(ltail, lum(thr));
break;
case full:
+ pausa = random(30, 125);
// Due LED con lampeggio alternato:
right.Blink(1120 - 4 * thr );
+ digitalWrite(ltail, !digitalRead(ltail));
+ digitalWrite(3, !digitalRead(3));
+ delay(pausa);
+
left.Blink(1120 - 4 * thr );
digitalWrite(rtail, !digitalRead(rtail));
- digitalWrite(ltail, !digitalRead(ltail));
- delay(random(20, 100));
+ digitalWrite(5, !digitalRead(5));
+ delay(pausa);
break;
}