--- /dev/null
+/* Zeta test
+
+Nota: rovedere i PWM per come calcolano le pause:
+non possono schendere sotto a 1ms
+*/
+
+#include <common.h>
+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);
+
+}
--- /dev/null
+/* Zeta test
+ * le funzioni finali sono da controllare
+
+
+*/
+
+#include <common.h>
+
+
+// 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.
+
+ }
+}
--- /dev/null
+/* Zeta test
+ * le funzioni finali sono da controllare
+
+
+*/
+
+#include <common.h>
+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);
+
+}
--- /dev/null
+/* Zeta test
+
+Nota: rovedere i PWM per come calcolano le pause:
+non possono schendere sotto a 1ms
+*/
+
+#include <common.h>
+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);
+
+}
--- /dev/null
+/* Esempi Vari
+
+Vari esempi di utilizzo della libreria.
+*/
+
+#include <common.h>
+
+
+// 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);
+}
--- /dev/null
+/* Zeta test
+ * le funzioni finali sono da controllare
+
+
+*/
+
+#include <common.h>
+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);
+}
+++ /dev/null
-/*
-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 <Wire.h> //I2C Arduino Library
-#include <common.h> //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);
-
-}
+++ /dev/null
-/*
-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 <Wire.h> //I2C Arduino Library
-#include <common.h> //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);
-
-}
--- /dev/null
+/*
+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 <Wire.h> //I2C Arduino Library
+#include <common.h> //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);
+
+}
--- /dev/null
+/*
+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 <Wire.h> //I2C Arduino Library
+#include <common.h> //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);
+
+}
--- /dev/null
+/* Throttle state machine
+
+Idle, throttle e averburner effect basati sono sul canale throttle.
+
+
+*/
+
+#include <common.h>
+
+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;
+ }
+
-* 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
//////////////////////
// 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);
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 () {
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
};
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
};
}
+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) {
};
}
+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
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 ();
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
};
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
};
}
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
}
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
}
}
// 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:
-RGBLed KEYWORD1
+RGBLed KEYWORD1
Red KEYWORD2
Green KEYWORD2
Blue 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
* 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
* 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
+++ /dev/null
-/* Zeta test
-
-Nota: rovedere i PWM per come calcolano le pause:
-non possono schendere sotto a 1ms
-*/
-
-#include <common.h>
-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);
-
-}
+++ /dev/null
-/* Zeta test
- * le funzioni finali sono da controllare
-
-
-*/
-
-#include <common.h>
-
-
-// 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.
-
- }
-}
+++ /dev/null
-/* Zeta test
- * le funzioni finali sono da controllare
-
-
-*/
-
-#include <common.h>
-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);
-
-}
+++ /dev/null
-/* Zeta test
-
-Nota: rovedere i PWM per come calcolano le pause:
-non possono schendere sotto a 1ms
-*/
-
-#include <common.h>
-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);
-
-}
+++ /dev/null
-/* Esempi Vari
-
-Vari esempi di utilizzo della libreria.
-*/
-
-#include <common.h>
-
-
-// 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);
-}
+++ /dev/null
-/* Zeta test
- * le funzioni finali sono da controllare
-
-
-*/
-
-#include <common.h>
-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);
-}