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
    +
    + +
    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