From e376d92c377aac699f4001ba71ac5bd4abba115a Mon Sep 17 00:00:00 2001
From: Andrea Manni
Date: Fri, 17 Feb 2017 23:14:41 +0100
Subject: [PATCH] Yak
---
README.html | 20 +++-
README.rst | 13 +--
README.txt | 53 +++++++----
aerei/yak/interrupts/interrupts.ino | 92 +++++++++++++++++++
aerei/yak/prototipo/prototipo.ino | 39 ++++++++
.../ailerons_state_rgb/ailerons_state_rgb.ino | 7 +-
.../calibrazione_servo/calibrazione_servo.ino | 6 +-
.../lettura_servo_ch_pulse.ino | 20 ++--
.../lettura_servo_ch_pulse_millis.ino | 10 +-
.../lettura_servo_interrupt.ino | 11 ++-
.../lettura_servo_interrupt_doppio.ino | 8 +-
libraries/common/common.cpp | 2 +-
12 files changed, 226 insertions(+), 55 deletions(-)
create mode 100644 aerei/yak/interrupts/interrupts.ino
create mode 100644 aerei/yak/prototipo/prototipo.ino
diff --git a/README.html b/README.html
index bf2269d..936a310 100644
--- a/README.html
+++ b/README.html
@@ -374,8 +374,8 @@ IDE l'intero repo aerei_arduino come cartella
copiare la cartella libraries/common dentro libraries dello sketchbook
attuale.
-
-
Aggiornamenti
+
+
Download
- Download tramite git:
- git clone git://git.andreamanni.com/aerei
@@ -391,12 +391,26 @@ git pull
Interfaccia git Web
Foum di Discussione
+
+
Libreria
+
La sola libreria Common contenete gli oggetti base puo' essere scaricata direttamente nella vostra cartella libraries da:
+
+git clone git://git.andreamanni.com/common
+
+
+
Links
Risorse utili per utilizzare Arduino:
diff --git a/README.rst b/README.rst
index 881a593..88e033b 100644
--- a/README.rst
+++ b/README.rst
@@ -34,12 +34,13 @@ Per aggiornare all'ultima versione::
Libreria
------------
-La sola libreria Common contenete gli oggetti base puo' essere scaricata direttamente nella vostra cartella libraries da:
+La sola libreria Common contenete gli oggetti base puo' essere scaricata direttamente nella vostra cartella libraries da::
+
git clone git://git.andreamanni.com/common
-* `Download manuale archivio `_
-* `Browse on line `_
-* `Interfaccia git Web `_
+* `Download manuale archivio `__
+* `Browse on line `__
+* `Interfaccia git Web `__
Links
@@ -47,8 +48,8 @@ Links
Risorse utili per utilizzare Arduino:
* Per poter programmare le schede Arduino: `Arduino IDE `_
+* Testi consigliati: https://lab.piffa.net/testi.html
+* Risorse online: http://wiki.piffa.net/index.php/Guide
* Risorse di Andrea: https://lab.piffa.net/
* Wiki: http://wiki.piffa.net/
* Forum: https://forum.piffa.net/
-* Testi consigliati: https://lab.piffa.net/testi.html
-* Risorse online: http://wiki.piffa.net/index.php/Guide
diff --git a/README.txt b/README.txt
index 564ce41..a4155db 100644
--- a/README.txt
+++ b/README.txt
@@ -12,37 +12,52 @@ Setup
sketchbook, oppure copiare la cartella libraries/common dentro
libraries dello sketchbook attuale.
-Aggiornamenti
+Download
Download tramite git:
git clone git://git.andreamanni.com/aerei
Per aggiornare all'ultima versione:
- cd ~/aerei
- git pull
+cd ~/aerei
+git pull
- Download manuale archivio:
- [1]https://git.andreamanni.com/web?p=aerei;a=snapshot;h=HEAD;sf=
- tgz
+ * [1]Download manuale archivio
+ * [2]Browse on line
+ * [3]Interfaccia git Web
+ * [4]Foum di Discussione
- Browse on line:
- [2]https://aerei.piffa.net/repo/
+Libreria
- Interfaccia git Web:
- [3]https://git.andreamanni.com/web?p=aerei
+ La sola libreria Common contenete gli oggetti base puo' essere
+ scaricata direttamente nella vostra cartella libraries da:
+git clone git://git.andreamanni.com/common
- Discussioni:
- [4]https://forum.piffa.net/viewforum.php?f=4&sid=aef380599d890d6
- e7b9f92743fab9d7e
+ * [5]Download manuale archivio
+ * [6]Browse on line
+ * [7]Interfaccia git Web
Links
Risorse utili per utilizzare Arduino:
- * Per poter programmare le schede Arduino: Arduino IDE:
- [5]https://www.arduino.cc/en/Main/Software#
- * Risorse di Andrea: [6]https://lab.piffa.net/
- - Wiki: [7]http://wiki.piffa.net/
- - Forum: [8]https://forum.piffa.net/
+ * Per poter programmare le schede Arduino: [8]Arduino IDE
* Testi consigliati: [9]https://lab.piffa.net/testi.html
* Risorse online: [10]http://wiki.piffa.net/index.php/Guide
-
+ * Risorse di Andrea: [11]https://lab.piffa.net/
+ o Wiki: [12]http://wiki.piffa.net/
+ o Forum: [13]https://forum.piffa.net/
+
+References
+
+ 1. https://git.andreamanni.com/web?p=aerei;a=snapshot;h=HEAD;sf=tgz
+ 2. https://aerei.piffa.net/repo/
+ 3. https://git.andreamanni.com/web?p=aerei
+ 4. https://forum.piffa.net/viewforum.php?f=4&sid=aef380599d890d6e7b9f92743fab9d7e
+ 5. https://git.andreamanni.com/web?p=common;a=snapshot;h=HEAD;sf=tgz
+ 6. https://aerei.piffa.net/repo/libraries/common/
+ 7. https://git.andreamanni.com/web?p=common
+ 8. https://www.arduino.cc/en/Main/Software
+ 9. https://lab.piffa.net/testi.html
+ 10. http://wiki.piffa.net/index.php/Guide
+ 11. https://lab.piffa.net/
+ 12. http://wiki.piffa.net/
+ 13. https://forum.piffa.net/
diff --git a/aerei/yak/interrupts/interrupts.ino b/aerei/yak/interrupts/interrupts.ino
new file mode 100644
index 0000000..7e1feb1
--- /dev/null
+++ b/aerei/yak/interrupts/interrupts.ino
@@ -0,0 +1,92 @@
+/* Yak 980 di A.
+
+ Prototipo:
+
+OUTPUT:
+ 1 PWM motore: 10
+ 2 LED ai lati con lampeggio alternato
+ 1 LED in coda lampeggio a freq doppia
+
+INPUT:
+
+ * Thtottle: PIN 2
+ * Ailerons: PIN 3
+
+Notes: abbondante usi di map().
+NO FSM.
+
+*/
+
+#include
+#define dEBUG
+
+// 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
+int mid_point2 = 980;
+
+// Variabili per autocalibrazione 1
+const byte chPin3 = 3; // PIN per la calibrazione
+int mid_point3 = 1500;
+
+// Instanziamo un LED fuori dal loop
+Lampeggiatore left = 4;
+Lampeggiatore right = 11;
+Lampeggiatore coda = 6;
+Pwm motore = 10;
+Lampeggiatore stato = 13;
+byte pins[] = { // PIN dei LED che compongono la sequenza
+ 7,8,9
+};
+Sequenza seq = Sequenza(pins,3);
+
+void setup() {
+left.Invert();
+ // Funzione relativa a calibrazione con pulsein:
+ mid_point3 = calibraTrim(chPin3) + 8; // La calibrazione in genere non serve
+ // su throttle, il valore minimo e' costante e non c'e' TRIM
+
+ attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
+ attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168
+
+} ;
+
+
+void loop() {
+stato.Blink(); // Onboard LED per vedere se la scheda e' accesa
+
+ right.Blink(map(chValue3,980,2020,800,200));
+ left.Blink(map(chValue3,980,2020,200,800));
+ coda.Blink(chValue2 /4);
+ motore.lSet((chValue2 -980) / 4);
+ seq.Update(map(chValue2,980,2000,300,40));
+
+}
+
+// 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;
+}
diff --git a/aerei/yak/prototipo/prototipo.ino b/aerei/yak/prototipo/prototipo.ino
new file mode 100644
index 0000000..486ec88
--- /dev/null
+++ b/aerei/yak/prototipo/prototipo.ino
@@ -0,0 +1,39 @@
+/* Yak 980 di A.
+
+ Prototipo base:
+OUTPUT:
+ 1 PWM motore: 10
+ 2 LED ai lati con lampeggio alternato
+ 1 LED in coda lampeggio a freq doppia
+*/
+
+#include
+
+// Instanziamo un LED fuori dal loop
+Pwm pLeft = 11;
+Lampeggiatore right = 4;
+Lampeggiatore coda = 6;
+Pwm motore = 10;
+byte pins[] = { // PIN dei LED che compongono la sequenza
+ 7,8,9
+};
+
+Sequenza seq = Sequenza(pins,3);
+
+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() {
+// left.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW)
+ right.Blink();
+ pLeft.UD(2000);
+ coda.Blink();
+ motore.UD(2000);
+ seq.Update(200);
+}
diff --git a/esempi/ailerons_state_rgb/ailerons_state_rgb.ino b/esempi/ailerons_state_rgb/ailerons_state_rgb.ino
index 3ffa994..bde402b 100644
--- a/esempi/ailerons_state_rgb/ailerons_state_rgb.ino
+++ b/esempi/ailerons_state_rgb/ailerons_state_rgb.ino
@@ -7,10 +7,7 @@ Pilotare un LED RGB in base al canale degli alettoni:
- roll a sx
- roll a dx
-NOTE: uso di goto all'interno dell FSM.
-
TODO:
-
* clean up magic numbers
*/
@@ -62,8 +59,8 @@ void setup() {
Serial.begin(9600);
#endif
- // Funzione relativa a calibrazione:
- mid_point = calibraTrim(ailPin) ; // + LED di servizio per monitor calibrazione
+// Funzione relativa a calibrazione:
+mid_point = calibraTrim(ailPin) ; // + LED di servizio per monitor calibrazione
}
void loop() {
diff --git a/esempi/snippets/calibrazione_servo/calibrazione_servo.ino b/esempi/snippets/calibrazione_servo/calibrazione_servo.ino
index fdea338..f636fd5 100644
--- a/esempi/snippets/calibrazione_servo/calibrazione_servo.ino
+++ b/esempi/snippets/calibrazione_servo/calibrazione_servo.ino
@@ -10,6 +10,10 @@ Nota: questa funzione usa PULSEIN in modo da poter lavorare su
qualunque PIN, considerando che in genere viene eseguita
una sola volta nel SETUP.
+Si noti che se il canale viene poi letto con un interrupt e non con pulseIn
+statisticamente bisogna incrementare (almeno sulle mie RX) il valore ottenuto
+di circa 10.
+
Se si vuole qualcosa non blocking sostituire PULSEIN con
un interrupt.
@@ -25,7 +29,7 @@ void setup() {
Serial.begin(9600); // Se abilitato la calibrazione viene tracciata su seriale
// Abilitando anche DEBUG nella libreria
- mid_point = calibraTrim(ailPin) ; // Pin a cui e' collegato il canale
+ mid_point = calibraTrim(ailPin) + 8; // Pin a cui e' collegato il canale
//mid_point = calibraTrim(ailPin,11) ; // + LED di servizio per calibrazione
Serial.print("Valore calibrato: ");
diff --git a/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino b/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino
index ccd6c68..269db74 100644
--- a/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino
+++ b/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino
@@ -16,7 +16,7 @@
// Variabili
-const byte chPin = A4; // PIN su cui e' collegato il canale
+const byte chPin = 2; // PIN su cui e' collegato il canale
unsigned int chIn = 1500; // Valore catturato
unsigned int chValue = 1500; // Valore computato
// Attenzione che pulsein e' blocking
@@ -26,22 +26,24 @@ int mid_point = 1500;
void setup() {
// Funzione relativa a calibrazione:
- mid_point = calibraTrim(chPin) - 10; // Con pulse in si toglie 10
-Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
+ mid_point = calibraTrim(chPin) ;
-} ;
+Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
+};
void loop() {
-
-// Lettura ailerons channel ogni 200ms
+// Lettura canale
chIn = pulseIn(chPin, HIGH, 25000);
- if (chIn != 0 && chIn > 1000 && chIn <2000) {
- // get only resonable values
+ if (chIn > 1000 && chIn <2000) {
+ // Scartiamo valori fuori range, talvolta pero' alcune RX
+ // hanno il minimo un po' sotto a 1000
chValue = chIn;
};
-
// do something with chValue
+
+ Serial.print(chIn);
+ Serial.print(" > chValue= ");
Serial.print(chValue);
Serial.print(" - base: ");
Serial.println(mid_point);
diff --git a/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino b/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino
index 81cdd77..b25af09 100644
--- a/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino
+++ b/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino
@@ -17,20 +17,22 @@
unsigned long currentMillis; // timestamp reference per millis per tutto il loop
// Variabili
-const byte chPin = A4; // PIN su cui e' collegato il canale
+const byte chPin = 2; // PIN su cui e' collegato il canale
long unsigned chStamp = 0; // Timestamp per
unsigned int chIn = 1500; // Valore catturato
unsigned int chValue = 1500; // Valore computato
unsigned int freq = 200 ; // Ogni quanti millisecondi leggere il valore
+int mid_point = 1500; // Punto medio per calibrazione
// Attenzione che pulsein e' blocking
void setup() {
- // Funzione relativa a calibrazione:
-// mid_point = calibraTrim(chPin) +10 ; // Con pulse in c'e' una traslazione ~10
+// Funzione relativa a calibrazione: per il throttle si puo' evitare
+ mid_point = calibraTrim(chPin) ;
+
#ifdef DEBUG
Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
-} ;
#endif
+} ;
void loop() {
currentMillis = millis(); // Timestamp per tutto il loop
diff --git a/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino b/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino
index 829095a..59d2a74 100644
--- a/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino
+++ b/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino
@@ -18,13 +18,16 @@ const byte chPin = 2; // PIN per la calibrazione
int mid_point = 1500;
void setup() {
- // Funzione relativa a calibrazione con pulsein:
-// mid_point = calibraTrim(chPin) ; // Calibrazione del TRIM attivo sul canale
- attachInterrupt(0, chRise, RISING); // PIN 2 su 328p / 168
+// Funzione relativa a calibrazione con pulsein:
+ mid_point = calibraTrim(chPin) + 8; // Calibrazione del TRIM con pulseIn:
+ // se si usa poi un interrupt si aggiunge ~10
+
+attachInterrupt(0, chRise, RISING); // PIN 2 su 328p / 168
+
#ifdef DEBUG
Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
-} ;
#endif
+} ;
void loop() {
#ifdef DEBUG
diff --git a/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino b/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino
index 9ea67fe..2cf33a8 100644
--- a/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino
+++ b/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino
@@ -28,12 +28,16 @@ int mid_point3 = 1500;
void setup() {
// 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
+ mid_point2 = calibraTrim(chPin2) + 8 ; // Calibrazione del TRIM attivo sul canale
+ mid_point3 = calibraTrim(chPin3) + 8; // La calibrazione in genere non serve
+ // su throttle, il valore minimo e' costante e non c'e' TRIM
+
attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168
+
#ifdef DEBUG
Serial.begin(9600);
+Serial.flush();
#endif
} ;
diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp
index e696ff4..e99f202 100644
--- a/libraries/common/common.cpp
+++ b/libraries/common/common.cpp
@@ -417,7 +417,7 @@ int calibraTrim(int pin, const byte ledPin) {
Serial.println(middle / 10 + 10);
Serial.flush() ;
#endif
- return(middle / 10 + 10) ;
+ return(middle / 10 ) ;
// END calibrazione
};
--
2.39.2