From: eaman Date: Mon, 30 Jan 2017 17:32:09 +0000 (+0100) Subject: common update, reorder X-Git-Url: http://git.piffa.net/web?a=commitdiff_plain;h=ad6370083abcb50cbedafd46e5b6cd1a20a078d9;p=aerei common update, reorder --- diff --git a/aerei/zeta/zeta/zeta.ino b/aerei/zeta/zeta/zeta.ino new file mode 100644 index 0000000..45e1f2e --- /dev/null +++ b/aerei/zeta/zeta/zeta.ino @@ -0,0 +1,102 @@ +/* Zeta test + +Nota: rovedere i PWM per come calcolano le pause: +non possono schendere sotto a 1ms +*/ + +#include +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 ; + +RGBLed rgb(7,8,4,255); + +void setup() { + 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: + rgb.Red(); + rwhite.UD(2000); // Utilizza il coseno + lwhite.UD(2000); // Bisognerebbe evitare di calcolarlo 4 volte uguale + ltp.UD(2000); + rtp.UD(2000); + break; + + case normal: + rgb.Green(); + // 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: + rgb.Blue(); + pausa = random(30, 125); + // Due LED con lampeggio alternato: + right.Blink(1120 - 4 * thr ); + digitalWrite(ltail, !digitalRead(ltail)); + digitalWrite(3, !digitalRead(3)); + + + 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); + +} diff --git a/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino b/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino new file mode 100644 index 0000000..14f5d8c --- /dev/null +++ b/aerei/zeta/zeta_5_no_state/zeta_5_no_state.ino @@ -0,0 +1,94 @@ +/* Zeta test + * le funzioni finali sono da controllare + + +*/ + +#include + + +// Due LED con lampeggio alternato: +Lampeggiatore right = 3; +Lampeggiatore left = 5; +const byte rtail = 6; +const byte ltail = 9; +const byte thrPin = A3; +byte thr ; +int thrIn ; + +long previousMillisA = 0; +long previousMillisB = 0; + +unsigned long intervalA = 200; +unsigned long intervalB = 200; + +void setup() { + left.Invert() ; // Parte da stato invertito rispetto al default + pinMode(rtail, OUTPUT); + pinMode(ltail, OUTPUT); + pinMode(thrPin, INPUT); + // Serial.begin(9600); + + randomSeed(analogRead(0)); +} + +void loop() { + thrIn = pulseIn(thrPin, HIGH, 25000); + thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ; + + if (thr >0 && thr < 15) { + digitalWrite(rtail, 1); +digitalWrite(ltail, 1); + digitalWrite(3, 1); +digitalWrite(5, 1); + + } else if (thr < 245) { + // Due LED con lampeggio alternato: + right.Blink(1120 - 4 * thr ); + left.Blink(1120 - 4 * thr ); + analogWrite(rtail, thr); + analogWrite(ltail, thr); + } else { + digitalWrite(rtail, !digitalRead(rtail)); + digitalWrite(ltail, !digitalRead(ltail)); + delay(random(20, 100)); + + //lampA; + //lampB; + + } + Serial.println(thrIn); + Serial.print("\t thr:"); + Serial.println(thr); + +} + + +// Functions +// TODO: non funzionano :( + + +void lampA () { + // Illumina la coda r a un tempo random + if (millis() - previousMillisA > intervalA) { + previousMillisA = millis(); + intervalA = random(50, 255); + digitalWrite(rtail, !digitalRead(rtail)); + // Leggiamo direttamente il registro di ledB e scriviamo il suo opposto, + // questo ci permette di non dover avere una variabile per tracciare lo stato. + + } +} + +void lampB () { + // Illumina la coda l a un tempo random + + if (millis() - previousMillisB > intervalB) { + previousMillisB = millis(); + intervalB = random(50, 255); + digitalWrite(ltail, !digitalRead(ltail)); + // Leggiamo direttamente il registro di ledB e scriviamo il suo opposto, + // questo ci permette di non dover avere una variabile per tracciare lo stato. + + } +} diff --git a/aerei/zeta/zeta_5_state/zeta_5_state.ino b/aerei/zeta/zeta_5_state/zeta_5_state.ino new file mode 100644 index 0000000..cae5347 --- /dev/null +++ b/aerei/zeta/zeta_5_state/zeta_5_state.ino @@ -0,0 +1,88 @@ +/* Zeta test + * le funzioni finali sono da controllare + + +*/ + +#include +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 thr ; +int thrIn ; + +Pwm rwhite = 3; +Pwm lwhite = 5; +Pwm rtp = 6 ; +Pwm ltp = 9 ; + + +void setup() { + 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) ; + +// FMS dispatcher + if ( thr < 10 ) { + state = idle ; + } else if ( thr > 245 ) { + state = full ; + } else { + state = normal ; + } + + switch (state) { + case idle: +rwhite.Up(200); +lwhite.Up(200); +ltp.Up(200); +rtp.Up(200); + break; + + case normal: + // Due LED con lampeggio alternato: + right.Blink(1120 - 4 * thr ); + left.Blink(1120 - 4 * thr ); + analogWrite(rtail, thr); + analogWrite(ltail, thr); + break; + + case full: + // Due LED con lampeggio alternato: + right.Blink(1120 - 4 * thr ); + left.Blink(1120 - 4 * thr ); + digitalWrite(rtail, !digitalRead(rtail)); + digitalWrite(ltail, !digitalRead(ltail)); + delay(random(20, 100)); + break; + } + + + Serial.println(thrIn); + Serial.print("\t thr:"); + Serial.print(thr); + Serial.print("\t state:"); + Serial.println(state); + +} diff --git a/aerei/zeta/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino b/aerei/zeta/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino new file mode 100644 index 0000000..af87d04 --- /dev/null +++ b/aerei/zeta/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino @@ -0,0 +1,97 @@ +/* Zeta test + +Nota: rovedere i PWM per come calcolano le pause: +non possono schendere sotto a 1ms +*/ + +#include +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 ; + + +void setup() { + 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(2000); // Utilizza il coseno + lwhite.UD(2000); // Bisognerebbe evitare di calcolarlo 4 volte uguale + ltp.UD(2000); + rtp.UD(2000); + 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)); + + + 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); + +} diff --git a/aerei/zeta/zeta_full/zeta_full.ino b/aerei/zeta/zeta_full/zeta_full.ino new file mode 100644 index 0000000..9247a3d --- /dev/null +++ b/aerei/zeta/zeta_full/zeta_full.ino @@ -0,0 +1,28 @@ +/* Esempi Vari + +Vari esempi di utilizzo della libreria. +*/ + +#include + + +// Due LED con lampeggio alternato: +Lampeggiatore right = 3; +Lampeggiatore left = 5; +const byte rtail = 6; +const byte ltail = 9; + +void setup() { + left.Invert() ; // Parte da stato invertito rispetto al default + pinMode(rtail,OUTPUT); + pinMode(ltail,OUTPUT); + +} + +void loop() { + // Due LED con lampeggio alternato: + right.Blink(); + left.Blink(); + digitalWrite(rtail,HIGH); + digitalWrite(ltail,HIGH); +} diff --git a/aerei/zeta/zeta_prot/zeta_prot.ino b/aerei/zeta/zeta_prot/zeta_prot.ino new file mode 100644 index 0000000..600d69c --- /dev/null +++ b/aerei/zeta/zeta_prot/zeta_prot.ino @@ -0,0 +1,67 @@ +/* Zeta test + * le funzioni finali sono da controllare + + +*/ + +#include +enum { // Stati della FMS + idle, // Throttle a zero + normal, // Th normale + full, // Th massimo +} state ; + +// Due LED con lampeggio alternato: +Lampeggiatore right = 3; +Pwm rpwm = 3; +const byte thrPin = A3; +byte thr ; +int thrIn ; + + + +void setup() { + // Serial.begin(9600); + pinMode(A3, INPUT); + randomSeed(analogRead(0)); +} + +void loop() { + + thrIn = analogRead(3); + thr = constrain(thrIn / 4 , 0, 255) ; + + // FMS dispatcher + if ( thr < 10 ) { + state = idle ; + } else if ( thr > 245 ) { + state = full ; + } else { + state = normal ; + } + + switch (state) { + case idle: + // digitalWrite(3,LOW); +rpwm.Up(1000); + break; + + case normal: + // Due LED con lampeggio alternato: + right.Blink(1120 - 4 * thr ); + break; + + case full: + digitalWrite(3, HIGH); + + break; + } + + +// Serial.print(thrIn); +// Serial.print("\t thr:"); +// Serial.print(thr); +// Serial.print("\t state:"); +// Serial.println(state); +// delay(200); +} diff --git a/bussola/red_white/red_white.ino b/bussola/red_white/red_white.ino deleted file mode 100644 index 78065e5..0000000 --- a/bussola/red_white/red_white.ino +++ /dev/null @@ -1,96 +0,0 @@ -/* -An Arduino code example for interfacing with the HMC5883 - -by: Jordan McConnell - SparkFun Electronics - created on: 6/30/11 - license: OSHW 1.0, http://freedomdefined.org/OSHW - -Analog input 4 I2C SDA -Analog input 5 I2C SCL - -Link: https://www.sparkfun.com/tutorials/301 -Datasheet e registri: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Magneto/HMC5883L-FDS.pdf -*/ - -#include //I2C Arduino Library -#include //Libreria comune - -#define address 0x1E //0011110b, I2C 7bit address of HMC5883 - -const byte redPin = 11; // 2v a 20ma: che resistenza dovro usare? -const byte greenPin = 10; // 3.5v a 20ma: che resistenza dovro usare? -const byte bluePin = 9; // 3.5v a 20ma: che resistenza dovro usare? -byte xval ; -void setup() { - //Initialize Serial and I2C communications - Serial.begin(9600); - Wire.begin(); - - //Put the HMC5883 IC into the correct operating mode - Wire.beginTransmission(address); //open communication with HMC5883 - Wire.write(0x00); //select mode Measurement Configuration Bits - Wire.write(0x70); // 8 -average, 15 Hz default, normal measuremen - Wire.write(0x02); //select mode register - Wire.write(0x00); //continuous measurement mode - Wire.endTransmission(); - - // Cambiare la modalita' di lavoro in Single-Measurement Mode - // e farlo leggere ogni ~20ms / 3hz di lettura - // Default 15hz = 4ms ; 67ms consigliati - // Tra una lettura e l'altra va' in standby - - pinMode(redPin, OUTPUT); - pinMode(greenPin, OUTPUT); - pinMode(bluePin, OUTPUT); -} - -void loop() { - - int x, y, z ; //triple axis data - - //Tell the HMC5883 where to begin reading data - Wire.beginTransmission(address); - Wire.write(0x03); //select register 3, X MSB register - Wire.endTransmission(); - - - //Read data from each axis, 2 registers per axis - Wire.requestFrom(address, 6); - if (6 <= Wire.available()) { - x = Wire.read() << 8; //X msb - x |= Wire.read(); //X lsb - z = Wire.read() << 8; //Z msb - z |= Wire.read(); //Z lsb - y = Wire.read() << 8; //Y msb - y |= Wire.read(); //Y lsb - } - float radianti = atan2(x, y) ; - if (radianti < 0) {// Se y e'antiorario il segno e' inverso - radianti += 2 * PI ; // inverte il segno - } - - //float gradi = radianti * 180 / PI; // Conversione in gradi - // gradi += 2.56 ; // Correzione per la declinazione magnetica locale - // Modena dovrebbe essere a +2° 34' positivi EST - - // LED - //xval = cos(map(radianti, 0, 2 * PI, 0, 255)); - xval = lum(255 - (127 + 127 * (cos(radianti)))); - analogWrite(redPin, 0); // Common anodo - analogWrite(bluePin, 255 - xval); - analogWrite(greenPin, 255 - xval); - - - - //Print out values of each axis - Serial.print("x: "); - Serial.print(x); - Serial.print(" radianti: "); - Serial.print(cos(radianti)); - Serial.print(" redval: "); - Serial.println(xval); - - delay(100); - -} diff --git a/bussola/rgb_states/rgb_states.ino b/bussola/rgb_states/rgb_states.ino deleted file mode 100644 index fa03d76..0000000 --- a/bussola/rgb_states/rgb_states.ino +++ /dev/null @@ -1,96 +0,0 @@ -/* -An Arduino code example for interfacing with the HMC5883 - -by: Jordan McConnell - SparkFun Electronics - created on: 6/30/11 - license: OSHW 1.0, http://freedomdefined.org/OSHW - -Analog input 4 I2C SDA -Analog input 5 I2C SCL - -Link: https://www.sparkfun.com/tutorials/301 -Datasheet e registri: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Magneto/HMC5883L-FDS.pdf -*/ - -#include //I2C Arduino Library -#include //Libreria comune - -#define address 0x1E //0011110b, I2C 7bit address of HMC5883 - -const byte redPin = 11; // 2v a 20ma: che resistenza dovro usare? -const byte greenPin = 10; // 3.5v a 20ma: che resistenza dovro usare? -const byte bluePin = 9; // 3.5v a 20ma: che resistenza dovro usare? -byte xval ; -void setup() { - //Initialize Serial and I2C communications - Serial.begin(9600); - Wire.begin(); - - //Put the HMC5883 IC into the correct operating mode - Wire.beginTransmission(address); //open communication with HMC5883 - Wire.write(0x00); //select mode Measurement Configuration Bits - Wire.write(0x70); // 8 -average, 15 Hz default, normal measuremen - Wire.write(0x02); //select mode register - Wire.write(0x00); //continuous measurement mode - Wire.endTransmission(); - - // Cambiare la modalita' di lavoro in Single-Measurement Mode - // e farlo leggere ogni ~20ms / 3hz di lettura - // Default 15hz = 4ms ; 67ms consigliati - // Tra una lettura e l'altra va' in standby - - pinMode(redPin, OUTPUT); - pinMode(greenPin, OUTPUT); - pinMode(bluePin, OUTPUT); -} - -void loop() { - - int x, y, z ; //triple axis data - - //Tell the HMC5883 where to begin reading data - Wire.beginTransmission(address); - Wire.write(0x03); //select register 3, X MSB register - Wire.endTransmission(); - - - //Read data from each axis, 2 registers per axis - Wire.requestFrom(address, 6); - if (6 <= Wire.available()) { - x = Wire.read() << 8; //X msb - x |= Wire.read(); //X lsb - z = Wire.read() << 8; //Z msb - z |= Wire.read(); //Z lsb - y = Wire.read() << 8; //Y msb - y |= Wire.read(); //Y lsb - } - float radianti = atan2(x, y) ; - if (radianti < 0) {// Se y e'antiorario il segno e' inverso - radianti += 2 * PI ; // inverte il segno - } - - float gradi = radianti * 180 / PI; // Conversione in gradi - gradi += 2.56 ; // Correzione per la declinazione magnetica locale - // Modena dovrebbe essere a +2° 34' positivi EST - - // LED - //xval = cos(map(radianti, 0, 2 * PI, 0, 255)); - xval = 127 + 127*(cos(radianti)); - analogWrite(redPin, lum(255 - xval)); // Common anodo - analogWrite(bluePin, 255); - analogWrite(greenPin, 255); - - - - //Print out values of each axis - Serial.print("x: "); - Serial.print(x); - Serial.print(" radianti: "); - Serial.print(cos(radianti)); - Serial.print(" redval: "); - Serial.println(xval); - - delay(100); - -} diff --git a/esempi/bussola/red_white/red_white.ino b/esempi/bussola/red_white/red_white.ino new file mode 100644 index 0000000..78065e5 --- /dev/null +++ b/esempi/bussola/red_white/red_white.ino @@ -0,0 +1,96 @@ +/* +An Arduino code example for interfacing with the HMC5883 + +by: Jordan McConnell + SparkFun Electronics + created on: 6/30/11 + license: OSHW 1.0, http://freedomdefined.org/OSHW + +Analog input 4 I2C SDA +Analog input 5 I2C SCL + +Link: https://www.sparkfun.com/tutorials/301 +Datasheet e registri: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Magneto/HMC5883L-FDS.pdf +*/ + +#include //I2C Arduino Library +#include //Libreria comune + +#define address 0x1E //0011110b, I2C 7bit address of HMC5883 + +const byte redPin = 11; // 2v a 20ma: che resistenza dovro usare? +const byte greenPin = 10; // 3.5v a 20ma: che resistenza dovro usare? +const byte bluePin = 9; // 3.5v a 20ma: che resistenza dovro usare? +byte xval ; +void setup() { + //Initialize Serial and I2C communications + Serial.begin(9600); + Wire.begin(); + + //Put the HMC5883 IC into the correct operating mode + Wire.beginTransmission(address); //open communication with HMC5883 + Wire.write(0x00); //select mode Measurement Configuration Bits + Wire.write(0x70); // 8 -average, 15 Hz default, normal measuremen + Wire.write(0x02); //select mode register + Wire.write(0x00); //continuous measurement mode + Wire.endTransmission(); + + // Cambiare la modalita' di lavoro in Single-Measurement Mode + // e farlo leggere ogni ~20ms / 3hz di lettura + // Default 15hz = 4ms ; 67ms consigliati + // Tra una lettura e l'altra va' in standby + + pinMode(redPin, OUTPUT); + pinMode(greenPin, OUTPUT); + pinMode(bluePin, OUTPUT); +} + +void loop() { + + int x, y, z ; //triple axis data + + //Tell the HMC5883 where to begin reading data + Wire.beginTransmission(address); + Wire.write(0x03); //select register 3, X MSB register + Wire.endTransmission(); + + + //Read data from each axis, 2 registers per axis + Wire.requestFrom(address, 6); + if (6 <= Wire.available()) { + x = Wire.read() << 8; //X msb + x |= Wire.read(); //X lsb + z = Wire.read() << 8; //Z msb + z |= Wire.read(); //Z lsb + y = Wire.read() << 8; //Y msb + y |= Wire.read(); //Y lsb + } + float radianti = atan2(x, y) ; + if (radianti < 0) {// Se y e'antiorario il segno e' inverso + radianti += 2 * PI ; // inverte il segno + } + + //float gradi = radianti * 180 / PI; // Conversione in gradi + // gradi += 2.56 ; // Correzione per la declinazione magnetica locale + // Modena dovrebbe essere a +2° 34' positivi EST + + // LED + //xval = cos(map(radianti, 0, 2 * PI, 0, 255)); + xval = lum(255 - (127 + 127 * (cos(radianti)))); + analogWrite(redPin, 0); // Common anodo + analogWrite(bluePin, 255 - xval); + analogWrite(greenPin, 255 - xval); + + + + //Print out values of each axis + Serial.print("x: "); + Serial.print(x); + Serial.print(" radianti: "); + Serial.print(cos(radianti)); + Serial.print(" redval: "); + Serial.println(xval); + + delay(100); + +} diff --git a/esempi/bussola/rgb_states/rgb_states.ino b/esempi/bussola/rgb_states/rgb_states.ino new file mode 100644 index 0000000..fa03d76 --- /dev/null +++ b/esempi/bussola/rgb_states/rgb_states.ino @@ -0,0 +1,96 @@ +/* +An Arduino code example for interfacing with the HMC5883 + +by: Jordan McConnell + SparkFun Electronics + created on: 6/30/11 + license: OSHW 1.0, http://freedomdefined.org/OSHW + +Analog input 4 I2C SDA +Analog input 5 I2C SCL + +Link: https://www.sparkfun.com/tutorials/301 +Datasheet e registri: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Magneto/HMC5883L-FDS.pdf +*/ + +#include //I2C Arduino Library +#include //Libreria comune + +#define address 0x1E //0011110b, I2C 7bit address of HMC5883 + +const byte redPin = 11; // 2v a 20ma: che resistenza dovro usare? +const byte greenPin = 10; // 3.5v a 20ma: che resistenza dovro usare? +const byte bluePin = 9; // 3.5v a 20ma: che resistenza dovro usare? +byte xval ; +void setup() { + //Initialize Serial and I2C communications + Serial.begin(9600); + Wire.begin(); + + //Put the HMC5883 IC into the correct operating mode + Wire.beginTransmission(address); //open communication with HMC5883 + Wire.write(0x00); //select mode Measurement Configuration Bits + Wire.write(0x70); // 8 -average, 15 Hz default, normal measuremen + Wire.write(0x02); //select mode register + Wire.write(0x00); //continuous measurement mode + Wire.endTransmission(); + + // Cambiare la modalita' di lavoro in Single-Measurement Mode + // e farlo leggere ogni ~20ms / 3hz di lettura + // Default 15hz = 4ms ; 67ms consigliati + // Tra una lettura e l'altra va' in standby + + pinMode(redPin, OUTPUT); + pinMode(greenPin, OUTPUT); + pinMode(bluePin, OUTPUT); +} + +void loop() { + + int x, y, z ; //triple axis data + + //Tell the HMC5883 where to begin reading data + Wire.beginTransmission(address); + Wire.write(0x03); //select register 3, X MSB register + Wire.endTransmission(); + + + //Read data from each axis, 2 registers per axis + Wire.requestFrom(address, 6); + if (6 <= Wire.available()) { + x = Wire.read() << 8; //X msb + x |= Wire.read(); //X lsb + z = Wire.read() << 8; //Z msb + z |= Wire.read(); //Z lsb + y = Wire.read() << 8; //Y msb + y |= Wire.read(); //Y lsb + } + float radianti = atan2(x, y) ; + if (radianti < 0) {// Se y e'antiorario il segno e' inverso + radianti += 2 * PI ; // inverte il segno + } + + float gradi = radianti * 180 / PI; // Conversione in gradi + gradi += 2.56 ; // Correzione per la declinazione magnetica locale + // Modena dovrebbe essere a +2° 34' positivi EST + + // LED + //xval = cos(map(radianti, 0, 2 * PI, 0, 255)); + xval = 127 + 127*(cos(radianti)); + analogWrite(redPin, lum(255 - xval)); // Common anodo + analogWrite(bluePin, 255); + analogWrite(greenPin, 255); + + + + //Print out values of each axis + Serial.print("x: "); + Serial.print(x); + Serial.print(" radianti: "); + Serial.print(cos(radianti)); + Serial.print(" redval: "); + Serial.println(xval); + + delay(100); + +} diff --git a/esempi/state_throttle/state_throttle.ino b/esempi/state_throttle/state_throttle.ino new file mode 100644 index 0000000..c263642 --- /dev/null +++ b/esempi/state_throttle/state_throttle.ino @@ -0,0 +1,76 @@ +/* Throttle state machine + +Idle, throttle e averburner effect basati sono sul canale throttle. + + +*/ + +#include + +enum { // Stati della FMS + idle, // Throttle a zero + normal, // Th normale + full, // Th massimo +} state ; + +// Due LED con lampeggio alternato: +Lampeggiatore right = 3; +Lampeggiatore left = 5; +Pwm motor = 7; + +const byte thrPin = A3; +byte thr ; // Valore a 8bit per il throttle +int thrIn ; // Valore rilevato del 3 Ch della RX + + + +void setup() { + left.Invert() ; // Parte da stato invertito rispetto al default + randomSeed(analogRead(0)); +} + +void loop() { + + // Lettura Throttle channel: FAKE con un potenziometro + //thrIn = analogRead(3); + //thr = constrain(thrIn / 4 , 0, 255) ; + + // Lettura Throttle channel + thrIn = pulseIn(thrPin, HIGH, 25000); + thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ; // 983 potrebbe campbiare con + // con un altra ricevente, fare una calibrazione nel caso. + + // FMS dispatcher + if ( thr < 10 ) { + state = idle ; + } else if ( thr > 245 ) { + state = full ; + } else { + state = normal ; + } + + switch (state) { + case idle: + // Lampeggia i lati fissi e fa un PWD Up/Down col motore + right.Blink(); + left.Blink(); + motore.UD(1000); + break; + + case normal: + // right e left lampeggiano alternativamente in base al th, + // il motore e' acceso con correzione di luminosita' in proporzione al th + right.Blink(1120 - 4 * thr ); // lampeggio piu' rapido in base al Th + left.Blink(1120 - 4 * thr ); + motore.lSet(thr); + break; + + case full: + // lampeggi e PWM a caso + right.Swap(); + left.Swap(); + motore.lSet(random(0,255); + delay(random(20, 100)); + break; + } + diff --git a/libraries/common/TODO b/libraries/common/TODO index e78d265..bfd3808 100644 --- a/libraries/common/TODO +++ b/libraries/common/TODO @@ -1,8 +1,10 @@ -* inserire knight rider con millis + +* aggiungere un displace temporale ai blink / pwm +* Flasher con sequenza arbitraria di lampeggio +* oggetti che lavorino contemporaneamente su piu' PIN +* Link a Schemi / Schemi * esempio con state machine per flight modes -* battery voltage reader -> RGB -** Schemi -** descrizione componenti: transistor, array, stepdown +** battery voltage reader -> RGB ** digital compass e RGB ** barometer ** 6 axis diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index cbf8fdd..3598969 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -9,12 +9,27 @@ ////////////////////// // RGB LED -// Common anode +// Common anode / cat -RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) { +RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) { + // Per un common catodo, valore max / min invertiti redPin = pinR ; greenPin = pinG ; bluePin = pinB ; + common = 0 ; + + // Equvalente del Setup() per inizializzare i PIN + pinMode(redPin, OUTPUT); + pinMode(greenPin, OUTPUT); + pinMode(greenPin, OUTPUT); +}; + +RGBLed::RGBLed(byte pinR, byte pinG, byte pinB, byte com) { + // Per un common anode, valore max / min normali + redPin = pinR ; + greenPin = pinG ; + bluePin = pinB ; + common = com ; // Equvalente del Setup() per inizializzare i PIN pinMode(redPin, OUTPUT); @@ -24,9 +39,9 @@ RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) { void RGBLed::SetColor (byte r, byte g, byte b) { // Imposta il colore di un LED RGB - analogWrite(redPin, r); - analogWrite(greenPin, g); - analogWrite(bluePin, b); + analogWrite(redPin, common - r); + analogWrite(greenPin, common - g); + analogWrite(bluePin, common - b); }; void RGBLed::Red () { @@ -134,6 +149,24 @@ void Lampeggiatore::Blink(long up, long down) { digitalWrite(ledPin, ledState); }; +void Lampeggiatore::High() { + // Accende il LED + + digitalWrite(ledPin, HIGH); +} + +void Lampeggiatore::Low() { + // Spegne il LED + + digitalWrite(ledPin, LOW); +} + +void Lampeggiatore::Swap() { + // Inverte lo stato del LED + + digitalWrite(ledPin, !digitalRead(ledPin)); +} + ///////////////////////////////////// // Pwm // Constructor @@ -150,7 +183,7 @@ Pwm::Pwm(int pin) }; void Pwm::Up(long speed) { - // Aumenta progressivamente la luminosita' usanndo millis() + // Aumenta linearmente la luminosita' usanndo millis() // quindi senza bloccare il processore // Viene usato un float, in alternativa un coseno @@ -162,8 +195,21 @@ void Pwm::Up(long speed) { }; } +void Pwm::lUp(long speed) { + // Aumenta usanndo millis() con correzione luminosita' LED + // quindi senza bloccare il processore + // Viene usato un float, in alternativa un coseno + + if (millis() != previousMillis) { // si potrebbe togliere + brightness = 255.0 /(float)speed * millis() ; + analogWrite(ledPin, lum(brightness)); + + previousMillis = millis(); + }; +} + void Pwm::Down(long speed ) { - // Riduce progressivamente la luminosita' usanndo millis() + // Riduce linearmente la luminosita' usanndo millis() // quindi senza bloccare il processore if (millis() != previousMillis) { @@ -174,12 +220,35 @@ void Pwm::Down(long speed ) { }; } +void Pwm::lDown(long speed ) { + // Riduce usanndo millis() con correzione della luminosita' + // quindi senza bloccare il processore + + if (millis() != previousMillis) { + brightness = 255 - 255.0 /(float)speed * millis() ; + analogWrite(ledPin, lum(brightness)); + + previousMillis = millis(); + }; +} + void Pwm::UD(long speed ) { // Aumenta e riduce in sequenza la luminosita' usanndo millis() brightness = 128 + 127 * cos(2 * PI / speed * millis()); analogWrite(ledPin, brightness); } +void Pwm::Set(byte brightness) { + // Imposta il valore del PWM + analogWrite(ledPin, brightness); +} + + +void Pwm::lSet(byte brightness) { + // Imposta il valore del PWM + analogWrite(ledPin, lum(brightness)); +} + ///////////////////////////////////// // Sequenza diff --git a/libraries/common/common.h b/libraries/common/common.h index f5a763c..25b84dd 100644 --- a/libraries/common/common.h +++ b/libraries/common/common.h @@ -43,9 +43,11 @@ class RGBLed { byte redValue ; byte greenValue ; byte blueValue ; + byte common ; public: RGBLed (byte pinR, byte pinG, byte pinB) ; + RGBLed (byte pinR, byte pinG, byte pinB, byte com) ; void SetColor (byte r, byte g, byte b) ; void Red (); void Green (); @@ -71,9 +73,12 @@ class Lampeggiatore { public: Lampeggiatore(int pin); void Invert(); // Inverte il lampeggio - void Blink(); // Lampeggia ogni 500ms + void Blink(); // Lampeggia ogni 500ms void Blink(long interval); // Lampeggia inpostando l'intervallo void Blink(long on, long down); // Imposta il tempo acceso e il tempo spento + void High(); // Accende il LED + void Low(); // Spegne il LED + void Swap(); // Inverte lo stato del LED }; @@ -89,14 +94,18 @@ class Pwm { int ledPin ; // il numero del LED pin int speed ; // velocita' del ciclo in ms unsigned long previousMillis ; //precedente cambio di stato - byte increment ; // aumenta brighteness nel loop UD + byte increment ; // aumenta brighteness nel loop UD // Constructor: come viene instanziato un oggetto facente parte della classe public: Pwm(int pin); // numero di pin, velocita' di ciclo void Up(long speed); + void lUp(long speed); void Down(long speed); + void lDown(long speed); void UD(long speed); + void Set(byte brighteness); + void lSet(byte brighteness); byte brightness ; // luminostia' iniziale }; diff --git a/libraries/common/examples/blink/blink.ino b/libraries/common/examples/blink/blink.ino index b3f9b2b..b796020 100644 --- a/libraries/common/examples/blink/blink.ino +++ b/libraries/common/examples/blink/blink.ino @@ -19,7 +19,10 @@ led.Invert() ; // Opzionale: inverte l'ordine del lampeggio da } void loop() { - led.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW) - led.Blink(500); // Lampeggia ogni 500ms - led.Blink(500,200); // Imposta il tempo acceso e il tempo spento + led.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW) +// led.Blink(500); // Lampeggia ogni 500ms +// led.Blink(500,200); // Imposta il tempo acceso e il tempo spento +// led.High(); // Stato su HI +// led.Low(); // Stato su LOW +// led.Swap(); // Inverte lo Stato } diff --git a/libraries/common/examples/pwm/pwm.ino b/libraries/common/examples/pwm/pwm.ino index 2880dda..deeb8ea 100644 --- a/libraries/common/examples/pwm/pwm.ino +++ b/libraries/common/examples/pwm/pwm.ino @@ -11,12 +11,17 @@ Pwm led = 9; void setup() { -// I PINs vengono impostati dal constructor al momento -// della dichiarazione dell'ogetto. + // I PINs vengono impostati dal constructor al momento + // della dichiarazione dell'ogetto. } void loop() { - led.Up(2000); // Aumenta la luminosita' in 2 sec - led.Down(1000); // Diminuisce la luminosita' in 1 sec - led.UD(4000); // Aumenta e poi diminuisce la luminostia' in 4 sec. + led.Up(2000); // Aumenta la luminosita' linearmente in 2 sec + //led.lUp(2000); // Aumenta la luminosita' con correzione luminosita' per LED + // led.Down(1000); // Diminuisce la luminosita' in 1 sec + // led.lDown(1000); // Diminuisce la luminosita' con correzione luminosita' + // led.UD(4000); // Aumenta e poi diminuisce la luminostia' in 4 sec (coseno) + // led.set(100); // Imposta il valore del PWM da 0-255 + // led.lSet(100); // Imposta il valore del PWM con correzione luminosita + // analogWrite(lum100); // Equivalente a sopra } diff --git a/libraries/common/examples/rgb/rgb.ino b/libraries/common/examples/rgb/rgb.ino index 98c980b..0dd3863 100644 --- a/libraries/common/examples/rgb/rgb.ino +++ b/libraries/common/examples/rgb/rgb.ino @@ -11,15 +11,13 @@ void setup() { } // Instanziamo un LED -RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte - // della classe RGBLed +RGBLed led(11, 10,9); //Istanziamo un oggetto led (common catodo) +// facente parte della classe RGBLed +//RGBLed led(10,9,11,255); // Inizializzazione Common anodo, valori invertiti void loop() { - led.Red(); - delay(1000); - led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green - delay(1000); - led.Off(); + led.White(); + } /* Colori disponibili: diff --git a/libraries/common/keywords.txt b/libraries/common/keywords.txt index 3bbb239..1ef357b 100644 --- a/libraries/common/keywords.txt +++ b/libraries/common/keywords.txt @@ -1,4 +1,4 @@ -RGBLed KEYWORD1 +RGBLed KEYWORD1 Red KEYWORD2 Green KEYWORD2 Blue KEYWORD2 @@ -9,3 +9,22 @@ Yellow KEYWORD2 Off KEYWORD2 SetColor KEYWORD2 brilla KEYWORD2 +Lampeggiatore KEYWORD1 +Invert KEYWORD2 +Blink KEYWORD2 +Blink KEYWORD2 +Blink KEYWORD2 +High KEYWORD2 +Low KEYWORD2 +Swap KEYWORD2 +Pwm KEYWORD1 +Up KEYWORD2 +lUp KEYWORD2 +Down KEYWORD2 +lDown KEYWORD2 +UD KEYWORD2 +Set KEYWORD2 +lSet KEYWORD2 +lum KEYWORD2 +Sequenza KEYWORD1 +Update KEYWORD2 diff --git a/pragmatica.rst b/pragmatica.rst index 096b2d7..5664066 100644 --- a/pragmatica.rst +++ b/pragmatica.rst @@ -40,6 +40,7 @@ Sequenziali * il minimo per un sequenziale e' 3 segmenti + * questi possono essere messi in serie a 3 canali RGB * I segmenti posso essere ripetuti * I segmenti posso essere messi in mirror (es. dal centro all'esterno per le ali) * si puo' variare il rapporto tra accesi / spenti @@ -92,3 +93,16 @@ Sensori * per rilevare lo stato della carica delle batterie bastano le entrate A. 5v di un Arduino * il throttle e' in genere l'unico che non prevede trim, per gli altri bisognerebbe compensare i trim con una autocalibrazione iniziale per fissare lo 0 + +Hardware +======== + +* SMD 2835: 40-60mAh, 25lm, ~1e/m + * consigliato per il rosso, 120' di diffusione, ottimo dissipatore +* SMD3528: 20mA, 6lm, 0.e/m + * Il bianco e' adeguato, 90' di diffusione, ottimo con alta densita' +* SMD 5050: triplo chip, adatto per RGB, molto calore. + +Links: + +* https://www.flexfireleds.com/pages/Comparison-between-3528-LEDs-and-5050-LEDs.html diff --git a/zeta/zeta.ino b/zeta/zeta.ino deleted file mode 100644 index af87d04..0000000 --- a/zeta/zeta.ino +++ /dev/null @@ -1,97 +0,0 @@ -/* Zeta test - -Nota: rovedere i PWM per come calcolano le pause: -non possono schendere sotto a 1ms -*/ - -#include -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 ; - - -void setup() { - 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(2000); // Utilizza il coseno - lwhite.UD(2000); // Bisognerebbe evitare di calcolarlo 4 volte uguale - ltp.UD(2000); - rtp.UD(2000); - 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)); - - - 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); - -} diff --git a/zeta_5_no_state/zeta_5_no_state.ino b/zeta_5_no_state/zeta_5_no_state.ino deleted file mode 100644 index 14f5d8c..0000000 --- a/zeta_5_no_state/zeta_5_no_state.ino +++ /dev/null @@ -1,94 +0,0 @@ -/* Zeta test - * le funzioni finali sono da controllare - - -*/ - -#include - - -// Due LED con lampeggio alternato: -Lampeggiatore right = 3; -Lampeggiatore left = 5; -const byte rtail = 6; -const byte ltail = 9; -const byte thrPin = A3; -byte thr ; -int thrIn ; - -long previousMillisA = 0; -long previousMillisB = 0; - -unsigned long intervalA = 200; -unsigned long intervalB = 200; - -void setup() { - left.Invert() ; // Parte da stato invertito rispetto al default - pinMode(rtail, OUTPUT); - pinMode(ltail, OUTPUT); - pinMode(thrPin, INPUT); - // Serial.begin(9600); - - randomSeed(analogRead(0)); -} - -void loop() { - thrIn = pulseIn(thrPin, HIGH, 25000); - thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ; - - if (thr >0 && thr < 15) { - digitalWrite(rtail, 1); -digitalWrite(ltail, 1); - digitalWrite(3, 1); -digitalWrite(5, 1); - - } else if (thr < 245) { - // Due LED con lampeggio alternato: - right.Blink(1120 - 4 * thr ); - left.Blink(1120 - 4 * thr ); - analogWrite(rtail, thr); - analogWrite(ltail, thr); - } else { - digitalWrite(rtail, !digitalRead(rtail)); - digitalWrite(ltail, !digitalRead(ltail)); - delay(random(20, 100)); - - //lampA; - //lampB; - - } - Serial.println(thrIn); - Serial.print("\t thr:"); - Serial.println(thr); - -} - - -// Functions -// TODO: non funzionano :( - - -void lampA () { - // Illumina la coda r a un tempo random - if (millis() - previousMillisA > intervalA) { - previousMillisA = millis(); - intervalA = random(50, 255); - digitalWrite(rtail, !digitalRead(rtail)); - // Leggiamo direttamente il registro di ledB e scriviamo il suo opposto, - // questo ci permette di non dover avere una variabile per tracciare lo stato. - - } -} - -void lampB () { - // Illumina la coda l a un tempo random - - if (millis() - previousMillisB > intervalB) { - previousMillisB = millis(); - intervalB = random(50, 255); - digitalWrite(ltail, !digitalRead(ltail)); - // Leggiamo direttamente il registro di ledB e scriviamo il suo opposto, - // questo ci permette di non dover avere una variabile per tracciare lo stato. - - } -} diff --git a/zeta_5_state/zeta_5_state.ino b/zeta_5_state/zeta_5_state.ino deleted file mode 100644 index cae5347..0000000 --- a/zeta_5_state/zeta_5_state.ino +++ /dev/null @@ -1,88 +0,0 @@ -/* Zeta test - * le funzioni finali sono da controllare - - -*/ - -#include -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 thr ; -int thrIn ; - -Pwm rwhite = 3; -Pwm lwhite = 5; -Pwm rtp = 6 ; -Pwm ltp = 9 ; - - -void setup() { - 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) ; - -// FMS dispatcher - if ( thr < 10 ) { - state = idle ; - } else if ( thr > 245 ) { - state = full ; - } else { - state = normal ; - } - - switch (state) { - case idle: -rwhite.Up(200); -lwhite.Up(200); -ltp.Up(200); -rtp.Up(200); - break; - - case normal: - // Due LED con lampeggio alternato: - right.Blink(1120 - 4 * thr ); - left.Blink(1120 - 4 * thr ); - analogWrite(rtail, thr); - analogWrite(ltail, thr); - break; - - case full: - // Due LED con lampeggio alternato: - right.Blink(1120 - 4 * thr ); - left.Blink(1120 - 4 * thr ); - digitalWrite(rtail, !digitalRead(rtail)); - digitalWrite(ltail, !digitalRead(ltail)); - delay(random(20, 100)); - break; - } - - - Serial.println(thrIn); - Serial.print("\t thr:"); - Serial.print(thr); - Serial.print("\t state:"); - Serial.println(state); - -} 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 deleted file mode 100644 index af87d04..0000000 --- a/zeta_5_state_no_aserial/zeta_5_state_no_aserial.ino +++ /dev/null @@ -1,97 +0,0 @@ -/* Zeta test - -Nota: rovedere i PWM per come calcolano le pause: -non possono schendere sotto a 1ms -*/ - -#include -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 ; - - -void setup() { - 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(2000); // Utilizza il coseno - lwhite.UD(2000); // Bisognerebbe evitare di calcolarlo 4 volte uguale - ltp.UD(2000); - rtp.UD(2000); - 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)); - - - 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); - -} diff --git a/zeta_full/zeta_full.ino b/zeta_full/zeta_full.ino deleted file mode 100644 index 9247a3d..0000000 --- a/zeta_full/zeta_full.ino +++ /dev/null @@ -1,28 +0,0 @@ -/* Esempi Vari - -Vari esempi di utilizzo della libreria. -*/ - -#include - - -// Due LED con lampeggio alternato: -Lampeggiatore right = 3; -Lampeggiatore left = 5; -const byte rtail = 6; -const byte ltail = 9; - -void setup() { - left.Invert() ; // Parte da stato invertito rispetto al default - pinMode(rtail,OUTPUT); - pinMode(ltail,OUTPUT); - -} - -void loop() { - // Due LED con lampeggio alternato: - right.Blink(); - left.Blink(); - digitalWrite(rtail,HIGH); - digitalWrite(ltail,HIGH); -} diff --git a/zeta_prot/zeta_prot.ino b/zeta_prot/zeta_prot.ino deleted file mode 100644 index 600d69c..0000000 --- a/zeta_prot/zeta_prot.ino +++ /dev/null @@ -1,67 +0,0 @@ -/* Zeta test - * le funzioni finali sono da controllare - - -*/ - -#include -enum { // Stati della FMS - idle, // Throttle a zero - normal, // Th normale - full, // Th massimo -} state ; - -// Due LED con lampeggio alternato: -Lampeggiatore right = 3; -Pwm rpwm = 3; -const byte thrPin = A3; -byte thr ; -int thrIn ; - - - -void setup() { - // Serial.begin(9600); - pinMode(A3, INPUT); - randomSeed(analogRead(0)); -} - -void loop() { - - thrIn = analogRead(3); - thr = constrain(thrIn / 4 , 0, 255) ; - - // FMS dispatcher - if ( thr < 10 ) { - state = idle ; - } else if ( thr > 245 ) { - state = full ; - } else { - state = normal ; - } - - switch (state) { - case idle: - // digitalWrite(3,LOW); -rpwm.Up(1000); - break; - - case normal: - // Due LED con lampeggio alternato: - right.Blink(1120 - 4 * thr ); - break; - - case full: - digitalWrite(3, HIGH); - - break; - } - - -// Serial.print(thrIn); -// Serial.print("\t thr:"); -// Serial.print(thr); -// Serial.print("\t state:"); -// Serial.println(state); -// delay(200); -}