// I PINs vengono impostati dal constructor al momento
// della dichiarazione dell'ogetto.
+ attachInterrupt(0, chRise, RISING); // PIN 2 su 328p / 168
right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da
// HI -> LOW --> LOW -> HI
// per avere 2 LED che lampeggiano alternativamente
void loop() {
- if (chValue > 1400) {
+ if (chValue > 1500) {
left.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW)
right.Blink();
coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo
// Variabili per interrupt 0
volatile unsigned int chValue = 1500; // Valore computato
volatile unsigned int chStart = 1500; // Inizio rilevamento
-const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
+const int soglia = 1500; // soglia per scatto toggle a 2 posizioni
// Var FSM
unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni
unsigned long pausa = 2000; // Pausa per la transizione durante gli stati 2, 4 della FSM
+unsigned long currentMillis = 0;
// Instanziamo gli oggetti per gli stati On / Off
Lampeggiatore left = 5;
// Instanziamo gli oggetti per gli stati di transizione
Pwm leftPWM = 5;
-Pwm righatPWM = 6;
+Pwm rightPWM = 6;
Pwm codaPWM = 9;
void setup() {
// I PINs vengono impostati dal constructor al momento
// della dichiarazione dell'ogetto.
+attachInterrupt(0, chRise, RISING); // PIN 2 su 328p / 168
right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da
// HI -> LOW --> LOW -> HI
// per avere 2 LED che lampeggiano alternativamente
}
void loop() {
+ currentMillis = millis();
switch (toggle) {
case Off:
if (chValue <= soglia) {
FSM_lastMillis = millis();
toggle = toOff ;
+ leftPWM.Set(255);
+ rightPWM.Set(255);
+ codaPWM.Set(255);
}
break;
- case ToOn:
+ case toOn:
// Trans off -> on
leftPWM.lUp(pausa);
rightPWM.lUp(pausa);
}
break;
- case ToOff:
+ case toOff:
// Trans on -> off
leftPWM.lDown(pausa);
rightPWM.lDown(pausa);
--- /dev/null
+/* Aereo di Daniele
+
+Prototipo:
+
+Output:
+ 2 LED ai lati con lampeggio alternato
+ 1 LED PWM per motore
+
+Input:
+ 2 interrupts per th e alettone
+ PIN 2: alettone
+ PIN 3: throttle
+
+
+ TODO
+* Vedere la calibrazione automatica
+* Min e max a 1000 - 2000 per alettone
+
+*/
+
+#include <common.h>
+# define DEBUG
+
+// Instanziamo un LED fuori dal loop
+Lampeggiatore left = 5;
+Lampeggiatore right = 6;
+Lampeggiatore coda = 9;
+
+// Variabili per interrupt 0 si PIN 2
+volatile unsigned int chValue2 = 1500; // Valore computato
+volatile unsigned int chStart2 = 1500; // Inizio rilevamento
+
+// Variabili per interrupt 1 su PIN 3
+volatile unsigned int chValue3 = 1500; // Valore computato
+volatile unsigned int chStart3 = 1500; // Inizio rilevamento
+
+// Variabili per autocalibrazione 0
+const byte chPin2 = 2; // PIN per la calibrazione alettone
+int mid_point2 = 1500;
+
+// Variabili per autocalibrazione 1
+const byte chPin3 = 3; // PIN per la calibrazione
+int mid_point3 = 1000;
+
+
+void setup() {
+ // I PINs vengono impostati dal constructor al momento
+ // della dichiarazione dell'ogetto.
+
+ // HI -> LOW --> LOW -> HI
+ // per avere 2 LED che lampeggiano alternativamente
+ // Funzione relativa a calibrazione con pulsein:
+ //mid_point2 = calibraTrim(chPin2) ; // Calibrazione del TRIM attivo sul canale
+ //mid_point3 = calibraTrim(chPin3) ; // Calibrazione del TRIM attivo sul canale
+ attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
+ attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168
+#ifdef DEBUG
+Serial.begin(9600);
+#endif
+}
+
+void loop() {
+
+#ifdef DEBUG
+ Serial.print("PIN2: ");
+ Serial.print(chValue2);
+ Serial.print(" -base: ");
+ Serial.print(mid_point2);
+
+ Serial.print(" |-| PIN3:");
+ Serial.print(chValue3);
+ Serial.print(" -base: ");
+ Serial.println(mid_point3);
+ delay(200);
+#endif
+}
+// Functions
+void chRise2() {
+ attachInterrupt(0, chFall2, FALLING);
+ chStart2 = micros();
+}
+
+void chFall2() {
+ attachInterrupt(0, chRise2, RISING);
+ chValue2 = micros() - chStart2;
+}
+// Seconod iterrupt
+void chRise3() {
+ attachInterrupt(1, chFall3, FALLING);
+ chStart3 = micros();
+}
+
+void chFall3() {
+ attachInterrupt(1, chRise3, RISING);
+ chValue3 = micros() - chStart3;
+}