From 06bd11db5eaf0cdd01829044812358a63cdb9d83 Mon Sep 17 00:00:00 2001 From: eaman Date: Mon, 13 Feb 2017 23:51:53 +0100 Subject: [PATCH] Commid di Cirso e Daniele --- aerei/cirso/trigger_on/trigger_on.ino | 3 +- .../trigger_transition/trigger_transition.ino | 14 ++- aerei/daniele/prototipo/prototipo.ino | 96 +++++++++++++++++++ .../lettura_servo_interrupt.ino | 3 +- .../lettura_servo_interrupt_doppio.ino | 2 +- 5 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 aerei/daniele/prototipo/prototipo.ino diff --git a/aerei/cirso/trigger_on/trigger_on.ino b/aerei/cirso/trigger_on/trigger_on.ino index 32c7052..732d03d 100644 --- a/aerei/cirso/trigger_on/trigger_on.ino +++ b/aerei/cirso/trigger_on/trigger_on.ino @@ -23,6 +23,7 @@ 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 @@ -30,7 +31,7 @@ void setup() { 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 diff --git a/aerei/cirso/trigger_transition/trigger_transition.ino b/aerei/cirso/trigger_transition/trigger_transition.ino index 5a6c8b1..344160f 100644 --- a/aerei/cirso/trigger_transition/trigger_transition.ino +++ b/aerei/cirso/trigger_transition/trigger_transition.ino @@ -24,11 +24,12 @@ enum { // Stati della FMS // 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; @@ -37,19 +38,21 @@ Lampeggiatore coda = 9; // 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: @@ -73,10 +76,13 @@ switch (toggle) { 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); @@ -89,7 +95,7 @@ switch (toggle) { } break; - case ToOff: + case toOff: // Trans on -> off leftPWM.lDown(pausa); rightPWM.lDown(pausa); diff --git a/aerei/daniele/prototipo/prototipo.ino b/aerei/daniele/prototipo/prototipo.ino new file mode 100644 index 0000000..7e4b294 --- /dev/null +++ b/aerei/daniele/prototipo/prototipo.ino @@ -0,0 +1,96 @@ +/* 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 +# 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; +} diff --git a/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino b/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino index e52cade..829095a 100644 --- a/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino +++ b/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino @@ -19,13 +19,12 @@ int mid_point = 1500; void setup() { // Funzione relativa a calibrazione con pulsein: - mid_point = calibraTrim(chPin) ; // Calibrazione del TRIM attivo sul canale +// mid_point = calibraTrim(chPin) ; // Calibrazione del TRIM attivo sul canale 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 9add4e9..9ea67fe 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 @@ -34,8 +34,8 @@ void setup() { attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168 #ifdef DEBUG Serial.begin(9600); -} ; #endif +} ; void loop() { // Il loop fa solo debug -- 2.39.2