TODO
push.sh
-libraries/aero/
*.swp
*Makefile
*tags
/* Aereo di Daniele
+FSM: il throttle e' a posto
Prototipo: F8 Bearcat
Output:
2 interrupts per th e alettone
PIN 2: alettone
PIN 3: throttle
+ PIN A1: interruttore On/Off
+NOTE: aggiunta libreria aero per gestione interruttore,
+ da testare.
+
TODO
+* testare
* Vedere la calibrazione automatica
* Min e max a 1000 - 2000 per alettone
*/
#include <common.h>
-# define DEBUG
+#include <aero.h>
+# define dEBUG
// Instanziamo un LED fuori dal loop
Lampeggiatore left = 6;
Lampeggiatore codasx = 5;
Lampeggiatore codadx = 10;
-//Pwm pleft = 6;
-//Pwm pright = 9;
-//Pwm pcodasx = 5;
-//Pwm pcodadx = 10;
+Pwm pleft = 6;
+Pwm pright = 9;
+Pwm pcodasx = 5;
+Pwm pcodadx = 10;
// Variabili per interrupt 0 si PIN 2
volatile unsigned int chValue2 = 1500; // Valore computato
volatile unsigned int chValue3 = 1500; // Valore computato
volatile unsigned int chStart3 = 1500; // Inizio rilevamento
+const byte chPin = A1; // PIN interruttore generale
+
// Variabili per autocalibrazione 0
const byte chPin2 = 2; // PIN per la calibrazione alettone
int mid_point2 = 1500;
const byte chPin3 = 3; // PIN per la calibrazione
int mid_point3 = 1000;
+// Variabili
+int caso ;
+int thrBit;
void setup() {
- // I PINs vengono impostati dal constructor al momento
- // della dichiarazione dell'ogetto.
- right.Invert();
- codadx.Invert();
+ // I PINs vengono impostati dal constructor al momento
+ // della dichiarazione dell'ogetto.
+right.Invert();
+codadx.Invert();
- // HI -> LOW --> LOW -> HI
- // per avere 2 LED che lampeggiano alternativamente
+ // 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_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);
+#ifdef dEBUG
+Serial.begin(9600);
#endif
}
void loop() {
- left.Blink(300);
- right.Blink(300);
- codasx.Blink();
- codadx.Blink();
+if (toggleRead(A0)) { // Interruttore generale
+// Gestione throttle
+ if (chValue3 < 1050) {
+ // IDLE
+//pleft.Up(1000);
+//pright.Up(1000);
+pcodasx.UD(2000);
+pcodadx.UD(2000);
+pleft.lUp(1000);
+pright.lDown(1000);
+
+
+ }
+ else if (chValue3 > 1900) {
+ // Throttle al massimo: LED laterali lampeggiano a caso,
+ // Sotto luminosita' a caso
+ caso = random(30, 250) ;
+pleft.Set(caso);
+pright.Set(caso);
+pcodasx.Set(caso);
+pcodadx.Set(caso);
+ delay(caso);
+ }
+ else {
+ // Throttle medio
+ thrBit = map(chValue3,1050, 1900, 0, 255);
+ codasx.Blink(1220 - 4 * thrBit );
+ codadx.Blink(1220 - 4 * thrBit );
+left.Blink(map(chValue2,1000,2000,200,800 ));
+right.Blink(map(chValue2,1000,2000,800,200 ));
+ }
#ifdef DEBUG
Serial.print("PIN2: ");
Serial.println(mid_point3);
delay(200);
#endif
+} else { // Interruttore off
+pleft.Set(0);
+pright.Set(0);
+pcodasx.Set(0);
+pcodadx.Set(0);
+}
}
// Functions
void chRise2() {
2 interrupts per th e alettone
PIN 2: alettone
PIN 3: throttle
+ PIN A1: interruttore On/Off
TODO
volatile unsigned int chValue3 = 1500; // Valore computato
volatile unsigned int chStart3 = 1500; // Inizio rilevamento
+const byte chPin = A1; // PIN interruttore generale
+
// Variabili per autocalibrazione 0
const byte chPin2 = 2; // PIN per la calibrazione alettone
int mid_point2 = 1500;
// della dichiarazione dell'ogetto.
right.Invert();
codadx.Invert();
-
// 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
--- /dev/null
+/* Toggle con transizioni tra On | OFF con pulseIn
+
+
+Sketch di esempio per accensione spegnimento di tutto l'impianto luci
+tramite un interruttore a due posizioni della radio utilizzando pulseIn.
+
+Output esempio:
+ 1 Lampeggiatore in coda in PWM
+
+Input:
+ 1 interruttore su interrupt 0 per accensione / spegnimento luci
+
+
+ Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
+ quindi blocca per 1-2ms a ogni esecuzione. Con la variabile freq
+ si imposta ogni quanto fare una lettura.
+
+
+*/
+
+#define DEBUG
+#include <common.h>
+
+unsigned long currentMillis; // timestamp reference per millis per tutto il loop
+
+// Variabili Toggle
+const byte chToggle = A0; // PIN su cui e' collegato il canale
+long unsigned toggleTime = 0; // Timestamp per switch
+int toggleValue = 1500; // Valore catturato
+int toggleIn = 1500; // Valore filtrato
+const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
+const unsigned int freq = 200 ; // Ogni quanti millisecondi leggere il valore
+// Attenzione che pulsein e' blocking
+
+void setup() {
+
+#ifdef DEBUG
+Serial.begin(9600);
+#endif
+} ;
+
+void loop() {
+ currentMillis = millis(); // Timestamp per tutto il loop
+
+// Lettura ailerons channel ogni 200ms
+ if (currentMillis - toggleTime > freq) {
+
+ toggleIn = pulseIn(chToggle, HIGH, 25000);
+ if (toggleIn != 0 && toggleIn > 1000 && toggleIn <2000) {
+ // get only resonable values
+ toggleValue = toggleIn;
+ toggleTime = currentMillis ;
+ } ;
+ };
+
+if (toggleValue > soglia) {
+ // Luci accese
+#ifdef DEBUG
+ Serial.print("Luci On ");
+#endif
+
+} else {
+ // luci spente
+#ifdef DEBUG
+ Serial.print("Luci Off ");
+#endif
+} ;
+
+#ifdef DEBUG
+ Serial.print(toggleIn);
+ Serial.print(" - Filtrato: ");
+ Serial.println(toggleValue);
+ //delay(200);
+#endif
+
+}
--- /dev/null
+/* Toggle con transizioni tra On | OFF con pulseIn
+ Funzione
+
+
+Sketch di esempio per accensione spegnimento di tutto l'impianto luci
+tramite un interruttore a due posizioni della radio utilizzando pulseIn.
+
+Output esempio:
+ 1 Lampeggiatore in coda in PWM
+
+Input:
+ 1 interruttore su interrupt 0 per accensione / spegnimento luci
+
+
+ Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
+ quindi blocca per 1-2ms a ogni esecuzione. Con la variabile freq
+ si imposta ogni quanto fare una lettura.
+
+
+*/
+
+#define dEBUG
+#include <common.h>
+
+unsigned long currentMillis; // timestamp reference per millis per tutto il loop
+
+
+void setup() {
+ Serial.begin(9600);
+#ifdef DEBUG
+Serial.begin(9600);
+#endif
+} ;
+
+void loop() {
+currentMillis = millis(); // Timestamp per tutto il loop
+
+
+if (toggleRead(A0)) {
+ // Luci accese
+ Serial.println("Luci On ");
+} else {
+ // luci spente
+ Serial.println("Luci Off ");
+} ;
+
+
+}
+
+boolean toggleRead(byte togglePin) {
+// Variabili Toggle
+long static unsigned toggleTime ; // Timestamp per switch
+static int toggleValue = 0 ; // Valore catturato
+static int toggleIn = 0 ; // Valore filtrato
+const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
+const unsigned int freq = 400 ; // Ogni quanti millisecondi leggere il valore
+
+ if (currentMillis - toggleTime > freq) {
+
+ toggleIn = pulseIn(togglePin, HIGH, 25000);
+ if (toggleIn != 0 && toggleIn > 1000 && toggleIn <2000) {
+ // get only resonable values
+ toggleValue = toggleIn;
+ toggleTime = currentMillis ;
+ } ;
+ };
+#ifdef DEBUG
+ Serial.print(toggleIn);
+ Serial.print(" - Filtrato: ");
+ Serial.println(toggleValue);
+#endif
+
+if (toggleValue > soglia) {
+ return 1;
+} else {
+ return 0;
+} ;
+
+}
-/* Toggle con transizioni tra On | OFF
+/* Toggle con transizioni tra On | OFF con interrupt
+
+
+Sketch di esempio per accensione spegnimento di tutto l'impianto luci
+tramite un interruttore a due posizioni della radio.
Output esempio:
- 1 Lampeggiatore in coda.
+ 1 Lampeggiatore in coda in PWM
Input:
1 interruttore su interrupt 0 per accensione / spegnimento luci
Pwm codaPWM = 9;
void setup() {
- // I PINs vengono impostati dal constructor al momento
- // della dichiarazione dell'ogetto.
- right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da
- // HI -> LOW --> LOW -> HI
- // per avere 2 LED che lampeggiano alternativamente
}
void loop() {
--- /dev/null
+Subproject commit 5d8011da088d10d3baf1804159b19aead3c06f3a