From: eaman Date: Mon, 16 Jan 2017 01:53:45 +0000 (+0100) Subject: correzione lum X-Git-Url: http://git.piffa.net/web?a=commitdiff_plain;h=2e034bfc75989dc3c9f23dacf6e15e025b3f6bba;p=aerei correzione lum --- diff --git a/TODO b/TODO index 43ed742..0c98bc8 100644 --- a/TODO +++ b/TODO @@ -1,2 +1,2 @@ -Cambiata la libreria common per i PWM con float, -controllare lo stato idle. +Creare un PWM con correzione di luminosita' su look table da 32 / 256 valori, +eventualmente uno con coseno. diff --git a/zeta/zeta.ino b/zeta/zeta.ino index 60cd895..41bdfa3 100644 --- a/zeta/zeta.ino +++ b/zeta/zeta.ino @@ -1,24 +1,97 @@ -/* Esempio +/* Zeta test -Setup per la Zeta +Nota: rovedere i PWM per come calcolano le pause: +non possono schendere sotto a 1ms */ #include -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); } diff --git a/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino b/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino index 9a9b23e..41bdfa3 100644 --- a/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino +++ b/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino @@ -1,5 +1,5 @@ /* Zeta test - + Nota: rovedere i PWM per come calcolano le pause: non possono schendere sotto a 1ms */ @@ -18,6 +18,7 @@ Lampeggiatore left = 5; const byte rtail = 6; const byte ltail = 9; const byte thrPin = A3; +byte pausa ; byte thr ; int thrIn ; @@ -40,11 +41,11 @@ void setup() { 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 ) { @@ -57,8 +58,8 @@ delay(10); // Se si abilita il serial debug 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; @@ -67,17 +68,22 @@ delay(10); // Se si abilita il serial debug // 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; }