3 changed files with 124 additions and 47 deletions
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* AP_ArmingMechanism.cpp |
||||
* |
||||
*/ |
||||
|
||||
|
||||
#include "AP_ArmingMechanism.h" |
||||
#include "AP_RcChannel.h" |
||||
#include "../FastSerial/FastSerial.h" |
||||
#include "AP_HardwareAbstractionLayer.h" |
||||
#include "AP_CommLink.h" |
||||
|
||||
namespace apo { |
||||
|
||||
void AP_ArmingMechanism::update(const float dt) { |
||||
|
||||
// arming
|
||||
if ( (_hal->getState() != MAV_STATE_ACTIVE) & |
||||
(_hal->rc[_ch1]->getRadioPosition() < _ch1Min) && |
||||
(_hal->rc[_ch2]->getRadioPosition() < _ch2Min) ) { |
||||
|
||||
// always start clock at 0
|
||||
if (_armingClock<0) _armingClock = 0; |
||||
|
||||
if (_armingClock++ >= 100) { |
||||
_hal->gcs->sendText(SEVERITY_HIGH, PSTR("armed")); |
||||
_hal->setState(MAV_STATE_ACTIVE); |
||||
} else { |
||||
_hal->gcs->sendText(SEVERITY_HIGH, PSTR("arming")); |
||||
} |
||||
} |
||||
// disarming
|
||||
else if ( (_hal->getState() == MAV_STATE_ACTIVE) & |
||||
(_hal->rc[_ch1]->getRadioPosition() < _ch1Min) && |
||||
(_hal->rc[_ch2]->getRadioPosition() > _ch2Max) ) { |
||||
|
||||
// always start clock at 0
|
||||
if (_armingClock>0) _armingClock = 0; |
||||
|
||||
if (_armingClock-- <= -100) { |
||||
_hal->gcs->sendText(SEVERITY_HIGH, PSTR("disarmed")); |
||||
_hal->setState(MAV_STATE_STANDBY); |
||||
} else { |
||||
_hal->gcs->sendText(SEVERITY_HIGH, PSTR("disarming")); |
||||
} |
||||
} |
||||
// reset arming clock and report status
|
||||
else if (_armingClock != 0) { |
||||
_armingClock = 0; |
||||
if (_hal->getState()==MAV_STATE_ACTIVE) _hal->gcs->sendText(SEVERITY_HIGH, PSTR("armed")); |
||||
else if (_hal->getState()!=MAV_STATE_ACTIVE) _hal->gcs->sendText(SEVERITY_HIGH, PSTR("disarmed")); |
||||
} |
||||
} |
||||
|
||||
} // apo
|
@ -0,0 +1,65 @@
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* AP_ArmingMechanism.h |
||||
* |
||||
*/ |
||||
|
||||
#ifndef AP_ARMINGMECHANISM_H_ |
||||
#define AP_ARMINGMECHANISM_H_ |
||||
|
||||
#include <inttypes.h> |
||||
#include <wiring.h> |
||||
|
||||
namespace apo { |
||||
|
||||
class AP_HardwareAbstractionLayer; |
||||
|
||||
class AP_ArmingMechanism { |
||||
|
||||
public: |
||||
/**
|
||||
* Constructor |
||||
* |
||||
* @param ch1: typically throttle channel |
||||
* @param ch2: typically yaw channel |
||||
* @param ch1Min: disarms/arms belows this |
||||
* @param ch2Min: disarms below this |
||||
* @param ch2Max: arms above this |
||||
*/ |
||||
AP_ArmingMechanism(AP_HardwareAbstractionLayer * hal, |
||||
uint8_t ch1, uint8_t ch2, float ch1Min, float ch2Min, |
||||
float ch2Max) : _armingClock(0), _hal(hal), _ch1(ch1), _ch2(ch2), |
||||
_ch1Min(ch1Min), _ch2Min(ch2Min) { |
||||
} |
||||
|
||||
/**
|
||||
* update |
||||
* |
||||
* arming: |
||||
*
|
||||
* to arm: put stick to bottom right for 100 controller cycles |
||||
* (max yaw, min throttle) |
||||
* |
||||
* didn't use clock here in case of millis() roll over |
||||
* for long runs |
||||
* |
||||
* disarming: |
||||
* |
||||
* to disarm: put stick to bottom left for 100 controller cycles |
||||
* (min yaw, min throttle) |
||||
*/ |
||||
void update(const float dt); |
||||
|
||||
private: |
||||
|
||||
AP_HardwareAbstractionLayer * _hal; |
||||
uint8_t _armingClock; |
||||
uint8_t _ch1; /// typically throttle channel
|
||||
uint8_t _ch2; /// typically yaw channel
|
||||
float _ch1Min; /// arms/disarms below this on ch1
|
||||
float _ch2Min; /// disarms below this on ch2
|
||||
float _ch2Max; /// arms above this on ch2
|
||||
}; |
||||
|
||||
} // namespace apo
|
||||
|
||||
#endif /* AP_ARMINGMECHANISM */ |
Loading…
Reference in new issue