adding untested (and probably non-working) airplane mixer from mwc 2.3
flaperons not implemented (too hacky) flaps should work
This commit is contained in:
parent
f4eea64805
commit
29a9507c15
|
@ -121,6 +121,7 @@ const clivalue_t valueTable[] = {
|
|||
{ "motor_pwm_rate", VAR_UINT16, &mcfg.motor_pwm_rate, 50, 498 },
|
||||
{ "servo_pwm_rate", VAR_UINT16, &mcfg.servo_pwm_rate, 50, 498 },
|
||||
{ "retarded_arm", VAR_UINT8, &mcfg.retarded_arm, 0, 1 },
|
||||
{ "flaps_speed", VAR_UINT8, &mcfg.flaps_speed, 0, 100 },
|
||||
{ "serial_baudrate", VAR_UINT32, &mcfg.serial_baudrate, 1200, 115200 },
|
||||
{ "softserial_baudrate", VAR_UINT32, &mcfg.softserial_baudrate, 9600, 19200 },
|
||||
{ "softserial_inverted", VAR_UINT8, &mcfg.softserial_inverted, 0, 1 },
|
||||
|
|
|
@ -78,6 +78,7 @@ gpsData_t gpsData;
|
|||
static void gpsNewData(uint16_t c);
|
||||
static bool gpsNewFrameNMEA(char c);
|
||||
static bool gpsNewFrameUBLOX(uint8_t data);
|
||||
|
||||
static void gpsSetState(uint8_t state)
|
||||
{
|
||||
gpsData.state = state;
|
||||
|
|
61
src/mixer.c
61
src/mixer.c
|
@ -321,19 +321,16 @@ void writeAllMotors(int16_t mc)
|
|||
|
||||
static void airplaneMixer(void)
|
||||
{
|
||||
#if 0
|
||||
uint16_t servomid[8];
|
||||
int16_t flaperons[2] = { 0, 0 };
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
servomid[i] = 1500 + cfg.servotrim[i]; // servo center is 1500?
|
||||
}
|
||||
int16_t flapperons[2] = { 0, 0 };
|
||||
int i;
|
||||
|
||||
if (!f.ARMED)
|
||||
motor[0] = cfg.mincommand; // Kill throttle when disarmed
|
||||
servo[7] = mcfg.mincommand; // Kill throttle when disarmed
|
||||
else
|
||||
motor[0] = rcData[THROTTLE];
|
||||
servo[7] = constrain(rcCommand[THROTTLE], mcfg.minthrottle, mcfg.maxthrottle);
|
||||
motor[0] = servo[7];
|
||||
|
||||
#if 0
|
||||
if (cfg.flaperons) {
|
||||
|
||||
|
||||
|
@ -354,19 +351,41 @@ static void airplaneMixer(void)
|
|||
}
|
||||
servo[2] = servomid[2] + (slowFlaps * cfg.servoreverse[2]);
|
||||
}
|
||||
|
||||
if (f.PASSTHRU_MODE) { // Direct passthru from RX
|
||||
servo[3] = servomid[3] + ((rcCommand[ROLL] + flapperons[0]) * cfg.servoreverse[3]); // Wing 1
|
||||
servo[4] = servomid[4] + ((rcCommand[ROLL] + flapperons[1]) * cfg.servoreverse[4]); // Wing 2
|
||||
servo[5] = servomid[5] + (rcCommand[YAW] * cfg.servoreverse[5]); // Rudder
|
||||
servo[6] = servomid[6] + (rcCommand[PITCH] * cfg.servoreverse[6]); // Elevator
|
||||
} else { // Assisted modes (gyro only or gyro+acc according to AUX configuration in Gui
|
||||
servo[3] = (servomid[3] + ((axisPID[ROLL] + flapperons[0]) * cfg.servoreverse[3])); // Wing 1
|
||||
servo[4] = (servomid[4] + ((axisPID[ROLL] + flapperons[1]) * cfg.servoreverse[4])); // Wing 2
|
||||
servo[5] = (servomid[5] + (axisPID[YAW] * cfg.servoreverse[5])); // Rudder
|
||||
servo[6] = (servomid[6] + (axisPID[PITCH] * cfg.servoreverse[6])); // Elevator
|
||||
}
|
||||
#endif
|
||||
|
||||
if (mcfg.flaps_speed) {
|
||||
// configure SERVO3 middle point in GUI to using an AUX channel for FLAPS control
|
||||
// use servo min, servo max and servo rate for proper endpoints adjust
|
||||
static int16_t slow_LFlaps;
|
||||
int16_t lFlap = servoMiddle(2);
|
||||
|
||||
lFlap = constrain(lFlap, cfg.servoConf[2].min, cfg.servoConf[2].max);
|
||||
lFlap = mcfg.midrc - lFlap; // shouldn't this be servoConf[2].middle?
|
||||
if (slow_LFlaps < lFlap)
|
||||
slow_LFlaps += mcfg.flaps_speed;
|
||||
else if (slow_LFlaps > lFlap)
|
||||
slow_LFlaps -= mcfg.flaps_speed;
|
||||
|
||||
servo[2] = ((int32_t)cfg.servoConf[2].rate * slow_LFlaps) / 100L;
|
||||
servo[2] += mcfg.midrc;
|
||||
}
|
||||
|
||||
if (f.PASSTHRU_MODE) { // Direct passthru from RX
|
||||
servo[3] = rcCommand[ROLL] + flapperons[0]; // Wing 1
|
||||
servo[4] = rcCommand[ROLL] + flapperons[1]; // Wing 2
|
||||
servo[5] = rcCommand[YAW]; // Rudder
|
||||
servo[6] = rcCommand[PITCH]; // Elevator
|
||||
} else {
|
||||
// Assisted modes (gyro only or gyro+acc according to AUX configuration in Gui
|
||||
servo[3] = axisPID[ROLL] + flapperons[0]; // Wing 1
|
||||
servo[4] = axisPID[ROLL] + flapperons[1]; // Wing 2
|
||||
servo[5] = axisPID[YAW]; // Rudder
|
||||
servo[6] = axisPID[PITCH]; // Elevator
|
||||
}
|
||||
for (i = 3; i < 7; i++) {
|
||||
servo[i] = ((int32_t)cfg.servoConf[i].rate * servo[i]) / 100L; // servo rates
|
||||
servo[i] += servoMiddle(i);
|
||||
}
|
||||
}
|
||||
|
||||
void mixTable(void)
|
||||
|
|
1
src/mw.h
1
src/mw.h
|
@ -264,6 +264,7 @@ typedef struct master_t {
|
|||
uint16_t mincheck; // minimum rc end
|
||||
uint16_t maxcheck; // maximum rc end
|
||||
uint8_t retarded_arm; // allow disarsm/arm on throttle down + roll left/right
|
||||
uint8_t flaps_speed; // airplane mode flaps, 0 = no flaps, > 0 = flap speed, larger = faster
|
||||
|
||||
uint8_t rssi_aux_channel; // Read rssi from channel. 1+ = AUX1+, 0 to disable.
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#define MSP_VERSION 0
|
||||
#define CAP_PLATFORM_32BIT ((uint32_t)1 << 31)
|
||||
#define CAP_DYNBALANCE ((uint32_t)1 << 2)
|
||||
#define CAP_FLAPS ((uint32_t)1 << 3)
|
||||
|
||||
#define MSP_IDENT 100 //out message multitype + multiwii version + protocol version + capability variable
|
||||
#define MSP_STATUS 101 //out message cycletime & errors_count & sensor present & box activation & current setting number
|
||||
|
@ -354,7 +355,7 @@ static void evaluateCommand(void)
|
|||
serialize8(VERSION); // multiwii version
|
||||
serialize8(mcfg.mixerConfiguration); // type of multicopter
|
||||
serialize8(MSP_VERSION); // MultiWii Serial Protocol Version
|
||||
serialize32(CAP_PLATFORM_32BIT | CAP_DYNBALANCE); // "capability"
|
||||
serialize32(CAP_PLATFORM_32BIT | CAP_DYNBALANCE | (mcfg.flaps_speed ? CAP_FLAPS : 0)); // "capability"
|
||||
break;
|
||||
case MSP_STATUS:
|
||||
headSerialReply(11);
|
||||
|
|
Loading…
Reference in New Issue