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 },
|
{ "motor_pwm_rate", VAR_UINT16, &mcfg.motor_pwm_rate, 50, 498 },
|
||||||
{ "servo_pwm_rate", VAR_UINT16, &mcfg.servo_pwm_rate, 50, 498 },
|
{ "servo_pwm_rate", VAR_UINT16, &mcfg.servo_pwm_rate, 50, 498 },
|
||||||
{ "retarded_arm", VAR_UINT8, &mcfg.retarded_arm, 0, 1 },
|
{ "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 },
|
{ "serial_baudrate", VAR_UINT32, &mcfg.serial_baudrate, 1200, 115200 },
|
||||||
{ "softserial_baudrate", VAR_UINT32, &mcfg.softserial_baudrate, 9600, 19200 },
|
{ "softserial_baudrate", VAR_UINT32, &mcfg.softserial_baudrate, 9600, 19200 },
|
||||||
{ "softserial_inverted", VAR_UINT8, &mcfg.softserial_inverted, 0, 1 },
|
{ "softserial_inverted", VAR_UINT8, &mcfg.softserial_inverted, 0, 1 },
|
||||||
|
|
|
@ -78,6 +78,7 @@ gpsData_t gpsData;
|
||||||
static void gpsNewData(uint16_t c);
|
static void gpsNewData(uint16_t c);
|
||||||
static bool gpsNewFrameNMEA(char c);
|
static bool gpsNewFrameNMEA(char c);
|
||||||
static bool gpsNewFrameUBLOX(uint8_t data);
|
static bool gpsNewFrameUBLOX(uint8_t data);
|
||||||
|
|
||||||
static void gpsSetState(uint8_t state)
|
static void gpsSetState(uint8_t state)
|
||||||
{
|
{
|
||||||
gpsData.state = state;
|
gpsData.state = state;
|
||||||
|
|
57
src/mixer.c
57
src/mixer.c
|
@ -321,19 +321,16 @@ void writeAllMotors(int16_t mc)
|
||||||
|
|
||||||
static void airplaneMixer(void)
|
static void airplaneMixer(void)
|
||||||
{
|
{
|
||||||
#if 0
|
int16_t flapperons[2] = { 0, 0 };
|
||||||
uint16_t servomid[8];
|
int i;
|
||||||
int16_t flaperons[2] = { 0, 0 };
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
|
||||||
servomid[i] = 1500 + cfg.servotrim[i]; // servo center is 1500?
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!f.ARMED)
|
if (!f.ARMED)
|
||||||
motor[0] = cfg.mincommand; // Kill throttle when disarmed
|
servo[7] = mcfg.mincommand; // Kill throttle when disarmed
|
||||||
else
|
else
|
||||||
motor[0] = rcData[THROTTLE];
|
servo[7] = constrain(rcCommand[THROTTLE], mcfg.minthrottle, mcfg.maxthrottle);
|
||||||
|
motor[0] = servo[7];
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (cfg.flaperons) {
|
if (cfg.flaperons) {
|
||||||
|
|
||||||
|
|
||||||
|
@ -354,19 +351,41 @@ static void airplaneMixer(void)
|
||||||
}
|
}
|
||||||
servo[2] = servomid[2] + (slowFlaps * cfg.servoreverse[2]);
|
servo[2] = servomid[2] + (slowFlaps * cfg.servoreverse[2]);
|
||||||
}
|
}
|
||||||
|
#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
|
if (f.PASSTHRU_MODE) { // Direct passthru from RX
|
||||||
servo[3] = servomid[3] + ((rcCommand[ROLL] + flapperons[0]) * cfg.servoreverse[3]); // Wing 1
|
servo[3] = rcCommand[ROLL] + flapperons[0]; // Wing 1
|
||||||
servo[4] = servomid[4] + ((rcCommand[ROLL] + flapperons[1]) * cfg.servoreverse[4]); // Wing 2
|
servo[4] = rcCommand[ROLL] + flapperons[1]; // Wing 2
|
||||||
servo[5] = servomid[5] + (rcCommand[YAW] * cfg.servoreverse[5]); // Rudder
|
servo[5] = rcCommand[YAW]; // Rudder
|
||||||
servo[6] = servomid[6] + (rcCommand[PITCH] * cfg.servoreverse[6]); // Elevator
|
servo[6] = rcCommand[PITCH]; // Elevator
|
||||||
} else { // Assisted modes (gyro only or gyro+acc according to AUX configuration in Gui
|
} else {
|
||||||
servo[3] = (servomid[3] + ((axisPID[ROLL] + flapperons[0]) * cfg.servoreverse[3])); // Wing 1
|
// Assisted modes (gyro only or gyro+acc according to AUX configuration in Gui
|
||||||
servo[4] = (servomid[4] + ((axisPID[ROLL] + flapperons[1]) * cfg.servoreverse[4])); // Wing 2
|
servo[3] = axisPID[ROLL] + flapperons[0]; // Wing 1
|
||||||
servo[5] = (servomid[5] + (axisPID[YAW] * cfg.servoreverse[5])); // Rudder
|
servo[4] = axisPID[ROLL] + flapperons[1]; // Wing 2
|
||||||
servo[6] = (servomid[6] + (axisPID[PITCH] * cfg.servoreverse[6])); // Elevator
|
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);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mixTable(void)
|
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 mincheck; // minimum rc end
|
||||||
uint16_t maxcheck; // maximum rc end
|
uint16_t maxcheck; // maximum rc end
|
||||||
uint8_t retarded_arm; // allow disarsm/arm on throttle down + roll left/right
|
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.
|
uint8_t rssi_aux_channel; // Read rssi from channel. 1+ = AUX1+, 0 to disable.
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#define MSP_VERSION 0
|
#define MSP_VERSION 0
|
||||||
#define CAP_PLATFORM_32BIT ((uint32_t)1 << 31)
|
#define CAP_PLATFORM_32BIT ((uint32_t)1 << 31)
|
||||||
#define CAP_DYNBALANCE ((uint32_t)1 << 2)
|
#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_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
|
#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(VERSION); // multiwii version
|
||||||
serialize8(mcfg.mixerConfiguration); // type of multicopter
|
serialize8(mcfg.mixerConfiguration); // type of multicopter
|
||||||
serialize8(MSP_VERSION); // MultiWii Serial Protocol Version
|
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;
|
break;
|
||||||
case MSP_STATUS:
|
case MSP_STATUS:
|
||||||
headSerialReply(11);
|
headSerialReply(11);
|
||||||
|
|
Loading…
Reference in New Issue