From 3d1902abac815b32e56a74c71939eada586ccb1f Mon Sep 17 00:00:00 2001 From: Amilcar Lucas Date: Sun, 2 Oct 2011 14:16:31 +0200 Subject: [PATCH 1/5] Use the new AP_Relay library --- ArduCopter/ArduCopter.pde | 5 +++-- ArduCopter/commands_logic.pde | 6 +++--- ArduCopter/events.pde | 17 +---------------- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde index ba70d3791a..0897b12997 100644 --- a/ArduCopter/ArduCopter.pde +++ b/ArduCopter/ArduCopter.pde @@ -65,6 +65,7 @@ And much more so PLEASE PM me on DIYDRONES to add your contribution to the List #include // Range finder library #include // Optical Flow library #include +#include // APM relay #include // MAVLink GCS definitions #include @@ -1313,8 +1314,8 @@ static void tuning(){ case CH6_RELAY: g.rc_6.set_range(0,1000); - if (g.rc_6.control_in > 525) relay_on(); - if (g.rc_6.control_in < 475) relay_off(); + if (g.rc_6.control_in > 525) relay.on(); + if (g.rc_6.control_in < 475) relay.off(); break; case CH6_TRAVERSE_SPEED: diff --git a/ArduCopter/commands_logic.pde b/ArduCopter/commands_logic.pde index 49c6bb941c..34fd62f695 100644 --- a/ArduCopter/commands_logic.pde +++ b/ArduCopter/commands_logic.pde @@ -693,11 +693,11 @@ static void do_set_servo() static void do_set_relay() { if (next_command.p1 == 1) { - relay_on(); + relay.on(); } else if (next_command.p1 == 0) { - relay_off(); + relay.off(); }else{ - relay_toggle(); + relay.toggle(); } } diff --git a/ArduCopter/events.pde b/ArduCopter/events.pde index 08357e60ad..d6ae523c54 100644 --- a/ArduCopter/events.pde +++ b/ArduCopter/events.pde @@ -75,26 +75,11 @@ static void update_events() // Used for MAV_CMD_DO_REPEAT_SERVO and MAV_CMD_DO_R } if (event_id == RELAY_TOGGLE) { - relay_toggle(); + relay.toggle(); } } } -static void relay_on() -{ - PORTL |= B00000100; -} - -static void relay_off() -{ - PORTL &= ~B00000100; -} - -static void relay_toggle() -{ - PORTL ^= B00000100; -} - #if PIEZO == ENABLED void piezo_on() { From d814f11a0558c79820cada0be79c42199022d93c Mon Sep 17 00:00:00 2001 From: Amilcar Lucas Date: Sun, 2 Oct 2011 14:28:49 +0200 Subject: [PATCH 2/5] Added eclipse project files for ArduBoat and ArduRover --- ArduBoat/.cproject | 46 ++++++++++++++++++++++++++ ArduBoat/.project | 79 +++++++++++++++++++++++++++++++++++++++++++++ ArduRover/.cproject | 46 ++++++++++++++++++++++++++ ArduRover/.project | 79 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 250 insertions(+) create mode 100644 ArduBoat/.cproject create mode 100644 ArduBoat/.project create mode 100644 ArduRover/.cproject create mode 100644 ArduRover/.project diff --git a/ArduBoat/.cproject b/ArduBoat/.cproject new file mode 100644 index 0000000000..adf5adc365 --- /dev/null +++ b/ArduBoat/.cproject @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ArduBoat/.project b/ArduBoat/.project new file mode 100644 index 0000000000..969ff0d90c --- /dev/null +++ b/ArduBoat/.project @@ -0,0 +1,79 @@ + + + ArduBoat + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/ArduRover/.cproject b/ArduRover/.cproject new file mode 100644 index 0000000000..7a4dd5232b --- /dev/null +++ b/ArduRover/.cproject @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ArduRover/.project b/ArduRover/.project new file mode 100644 index 0000000000..4494bc9869 --- /dev/null +++ b/ArduRover/.project @@ -0,0 +1,79 @@ + + + ArduRover + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + From ee4251baefc9c39c69f1ec6e15f9aebaa7c86adc Mon Sep 17 00:00:00 2001 From: Amilcar Lucas Date: Sun, 2 Oct 2011 14:52:02 +0200 Subject: [PATCH 3/5] Fix compilation --- ArduCopter/ArduCopter.pde | 2 ++ ArduCopter/test.pde | 4 ++-- ArduPlane/test.pde | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde index 0897b12997..0e142d73c6 100644 --- a/ArduCopter/ArduCopter.pde +++ b/ArduCopter/ArduCopter.pde @@ -499,6 +499,8 @@ static byte counter_one_herz; static bool GPS_enabled = false; static bool new_radio_frame; +AP_Relay relay; + //////////////////////////////////////////////////////////////////////////////// // Top-level logic //////////////////////////////////////////////////////////////////////////////// diff --git a/ArduCopter/test.pde b/ArduCopter/test.pde index f396bfe74f..dea98d381e 100644 --- a/ArduCopter/test.pde +++ b/ArduCopter/test.pde @@ -712,14 +712,14 @@ test_relay(uint8_t argc, const Menu::arg *argv) while(1){ Serial.printf_P(PSTR("Relay on\n")); - relay_on(); + relay.on(); delay(3000); if(Serial.available() > 0){ return (0); } Serial.printf_P(PSTR("Relay off\n")); - relay_off(); + relay.off(); delay(3000); if(Serial.available() > 0){ return (0); diff --git a/ArduPlane/test.pde b/ArduPlane/test.pde index 3b95d9c6c0..9c0adbd26d 100644 --- a/ArduPlane/test.pde +++ b/ArduPlane/test.pde @@ -279,14 +279,14 @@ test_relay(uint8_t argc, const Menu::arg *argv) while(1){ Serial.printf_P(PSTR("Relay on\n")); - relay_on(); + relay.on(); delay(3000); if(Serial.available() > 0){ return (0); } Serial.printf_P(PSTR("Relay off\n")); - relay_off(); + relay.off(); delay(3000); if(Serial.available() > 0){ return (0); From eb83070275b038d0771936f2a85bcded77cd2502 Mon Sep 17 00:00:00 2001 From: Amilcar Lucas Date: Sun, 2 Oct 2011 14:53:55 +0200 Subject: [PATCH 4/5] Added APO eclipse project file --- apo/.cproject | 46 ++++++++++++++++++++++++++++++ apo/.project | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 apo/.cproject create mode 100644 apo/.project diff --git a/apo/.cproject b/apo/.cproject new file mode 100644 index 0000000000..00f2f875be --- /dev/null +++ b/apo/.cproject @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apo/.project b/apo/.project new file mode 100644 index 0000000000..4152e256c1 --- /dev/null +++ b/apo/.project @@ -0,0 +1,79 @@ + + + apo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + From a621f5821fd1fb48804de2bef67abdd6603e270c Mon Sep 17 00:00:00 2001 From: John Arne Birkeland Date: Sun, 2 Oct 2011 18:05:00 +0200 Subject: [PATCH 5/5] APM_RC: Cosmetic changes to increase readability and some minor optimizations --- libraries/APM_RC/APM_RC.cpp | 70 +++++++++++++++++++++---------------- libraries/APM_RC/APM_RC.h | 6 ++-- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/libraries/APM_RC/APM_RC.cpp b/libraries/APM_RC/APM_RC.cpp index 27de25875d..db81cd1852 100644 --- a/libraries/APM_RC/APM_RC.cpp +++ b/libraries/APM_RC/APM_RC.cpp @@ -28,34 +28,42 @@ #else // Variable definition for Input Capture interrupt -volatile unsigned int ICR4_old; -volatile unsigned char PPM_Counter=0; -volatile uint16_t PWM_RAW[8] = {2400,2400,2400,2400,2400,2400,2400,2400}; -volatile unsigned char radio_status=0; +//volatile uint16_t ICR4_old; +//volatile uint8_t PPM_Counter=0; +volatile uint16_t PWM_RAW[NUM_CHANNELS] = {2400,2400,2400,2400,2400,2400,2400,2400}; +volatile uint8_t radio_status=0; /**************************************************** Input Capture Interrupt ICP4 => PPM signal read ****************************************************/ ISR(TIMER4_CAPT_vect) { - unsigned int Pulse; - unsigned int Pulse_Width; + static uint16_t ICR4_old; + static uint8_t PPM_Counter=0; + uint16_t Pulse; + uint16_t Pulse_Width; + Pulse=ICR4; - if (Pulse8000) // SYNC pulse? + if (Pulse8000) { // SYNC pulse? PPM_Counter=0; - else - { - if (PPM_Counter < (sizeof(PWM_RAW) / sizeof(PWM_RAW[0]))) { - PWM_RAW[PPM_Counter++]=Pulse_Width; //Saving pulse. - if (PPM_Counter >= NUM_CHANNELS) - radio_status = 1; + } + else { + if (PPM_Counter < NUM_CHANNELS) { // Valid pulse channel? + PWM_RAW[PPM_Counter++]=Pulse_Width; // Saving pulse. + + if (PPM_Counter >= NUM_CHANNELS) { + radio_status = 1; } } + } ICR4_old = Pulse; } @@ -124,7 +132,7 @@ void APM_RC_Class::Init(void) TIMSK4 |= (1<>1; // Because timer runs at 0.5us we need to do value/2 - result2 = PWM_RAW[ch]>>1; - if (result != result2) - result = PWM_RAW[ch]>>1; // if the results are different we make a third reading (this should be fine) - + result = PWM_RAW[ch]; + if (result != PWM_RAW[ch]) { + result = PWM_RAW[ch]; // if the results are different we make a third reading (this should be fine) + } + result >>= 1; // Because timer runs at 0.5us we need to do value/2 + // Limit values to a valid range result = constrain(result,MIN_PULSEWIDTH,MAX_PULSEWIDTH); radio_status=0; // Radio channel read return(result); } -unsigned char APM_RC_Class::GetState(void) +uint8_t APM_RC_Class::GetState(void) { return(radio_status); } @@ -198,7 +206,7 @@ void APM_RC_Class::Force_Out6_Out7(void) bool APM_RC_Class::setHIL(int16_t v[NUM_CHANNELS]) { uint8_t sum = 0; - for (unsigned char i=0; i