60,9 → 60,10 |
#include "commands.h" |
#include "output.h" |
|
uint16_t maxControl[2] = { 0, 0 }; |
int16_t control[2] = { 0, 0 }; |
int16_t controlYaw = 0, controlThrottle = 0; |
// uint16_t maxControl[2] = { 0, 0 }; |
uint16_t controlActivity = 0; |
int16_t controls[4] = { 0, 0, 0, 0 }; |
//int16_t controlYaw = 0, controlThrottle = 0; |
uint8_t looping = 0; |
|
// Internal variables for reading commands made with an R/C stick. |
136,6 → 137,26 |
return rcQ > ecQ ? rcQ : ecQ; |
} |
|
void updateControlAndMeasureControlActivity(uint8_t index, int16_t newValue) { |
int16_t tmp = controls[index]; |
controls[index] = newValue; |
tmp -= newValue; |
tmp /= 2; |
tmp = tmp * tmp; |
// tmp += (newValue >= 0) ? newValue : -newValue; |
if (controlActivity + (uint16_t)tmp >= controlActivity) |
controlActivity += tmp; |
else controlActivity = 0xffff; |
} |
|
#define CADAMPING 10 |
void dampenControlActivity(void) { |
uint32_t tmp = controlActivity; |
tmp *= ((1<<CADAMPING)-1); |
tmp >>= CADAMPING; |
controlActivity = tmp; |
} |
|
/* |
* Update the variables indicating stick position from the sum of R/C, GPS and external control. |
*/ |
142,7 → 163,6 |
void controlMixer_update(void) { |
// calculate Stick inputs by rc channels (P) and changing of rc channels (D) |
// TODO: If no signal --> zero. |
uint8_t axis; |
int16_t tempThrottle; |
|
// takes almost no time... |
154,20 → 174,21 |
// takes about 80 usec. |
HC_update(); |
|
int16_t* RC_PRTY = RC_getPRTY(); |
int16_t* EC_PRTY = EC_getPRTY(); |
int16_t* RC_PRTY = RC_getPRTY(); |
int16_t* EC_PRTY = EC_getPRTY(); |
|
control[PITCH] = RC_PRTY[CONTROL_PITCH] + EC_PRTY[CONTROL_PITCH]; |
control[ROLL] = RC_PRTY[CONTROL_ROLL] + EC_PRTY[CONTROL_ROLL]; |
updateControlAndMeasureControlActivity(CONTROL_PITCH, RC_PRTY[CONTROL_PITCH] + EC_PRTY[CONTROL_PITCH]); |
updateControlAndMeasureControlActivity(CONTROL_ROLL, RC_PRTY[CONTROL_ROLL] + EC_PRTY[CONTROL_ROLL]); |
updateControlAndMeasureControlActivity(CONTROL_YAW, RC_PRTY[CONTROL_YAW] + EC_PRTY[CONTROL_YAW]); |
dampenControlActivity(); |
|
DebugOut.Analog[14] = controlActivity/10; |
|
tempThrottle = HC_getThrottle(RC_PRTY[CONTROL_THROTTLE] + EC_PRTY[CONTROL_THROTTLE]); |
controlThrottle = AC_getThrottle(tempThrottle); |
controls[CONTROL_THROTTLE] = AC_getThrottle(tempThrottle); |
|
controlYaw = RC_PRTY[CONTROL_YAW] + EC_PRTY[CONTROL_YAW]; |
// controlYaw = RC_PRTY[CONTROL_YAW] + EC_PRTY[CONTROL_YAW]; |
|
DebugOut.Analog[12] = control[PITCH]; |
DebugOut.Analog[13] = control[ROLL]; |
|
if (controlMixer_getSignalQuality() >= SIGNAL_GOOD) { |
controlMixer_updateVariables(); |
configuration_applyVariablesToParams(); |
190,7 → 211,6 |
|
/* |
* Record maxima |
*/ |
for (axis = PITCH; axis <= ROLL; axis++) { |
if (abs(control[axis] / CONTROL_SCALING) > maxControl[axis]) { |
maxControl[axis] = abs(control[axis]) / CONTROL_SCALING; |
199,6 → 219,7 |
} else if (maxControl[axis]) |
maxControl[axis]--; |
} |
*/ |
|
uint8_t rcCommand = (RC_getSignalQuality() >= SIGNAL_OK) ? RC_getCommand() |
: COMMAND_NONE; |