/trunk/GPS.h |
---|
17,6 → 17,8 |
#define CAM_UPDATE_AZIMUTH 0x01 |
#define CAM_UPDATE_ELEVATION 0x02 |
#define FORCE_AZIMUTH_ROTATION 0x04 |
typedef struct |
{ |
s16 Azimuth; // angle in 1 deg measured clockwise from north |
/trunk/main.h |
---|
14,7 → 14,7 |
#define VERSION_MAJOR 2 |
#define VERSION_MINOR 9 |
#define VERSION_PATCH 1 |
#define VERSION_PATCH 2 |
// 0 = A |
// 1 = B |
// 2 = C |
36,7 → 36,7 |
// 18 = S |
#ifndef FOLLOW_ME |
#define FC_SPI_COMPATIBLE 72 // <------------------ |
#define FC_SPI_COMPATIBLE 73 // <------------------ |
#else |
#define FC_SPI_COMPATIBLE 0xFF |
#endif |
121,6 → 121,12 |
#define CFG_TEACHABLE_CAREFREE 0x40 |
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80 |
// Parameter.HomeYawMode |
#define NO_CHANGE 0 |
#define FRONT_TO_HOME 1 |
#define REAR_TO_HOME 2 |
#define LIKE_AT_START 3 |
// Parameter.ReceiverType defines for the receiver selection |
#define RECEIVER_PPM 0 |
#define RECEIVER_SPEKTRUM 1 |
201,6 → 207,7 |
u8 MaximumAltitude; // in m |
u8 Driftkomp; |
u8 ReceiverType; |
u8 HomeYawMode; |
} __attribute__((packed)) Param_t; |
typedef struct |
/trunk/menu.c |
---|
286,7 → 286,14 |
else sign = '+'; |
i1 = abs(NaviData.HomePosition.Altitude)/1000L; |
i2 = abs(NaviData.HomePosition.Altitude)%1000L; |
LCD_printfxy(0,3,"Alt:%c%04ld.%03ld m",sign, i1, i2); |
LCD_printfxy(0,3,"Alt:%c%04ld.%03ldm",sign, i1, i2); |
switch(Parameter.HomeYawMode) |
{ |
case NO_CHANGE: LCD_printfxy(17,3,"(-)"); break; |
case FRONT_TO_HOME: LCD_printfxy(17,3,"(F)"); break; |
case REAR_TO_HOME: LCD_printfxy(17,3,"(R)"); break; |
case LIKE_AT_START: LCD_printfxy(17,3,"(S)"); break; |
} |
} |
break; |
case 9: |
313,7 → 320,7 |
else sign = '+'; |
i1 = abs(NaviData.TargetPosition.Altitude)/1000L; |
i2 = abs(NaviData.TargetPosition.Altitude)%1000L; |
LCD_printfxy(0,3,"Alt:%c%04ld.%03ld m",sign, i1, i2); |
LCD_printfxy(0,3,"Alt:%c%04ld.%03ldm",sign, i1, i2); |
} |
break; |
case 10: // RC stick controls from FC |
/trunk/params.c |
---|
26,15 → 26,17 |
switch(id) |
{ |
case NCPARAMS_FORCE_NEW_COMPASS_DIRECTION: |
CAM_Orientation.UpdateMask |= FORCE_AZIMUTH_ROTATION; |
// Break fehlt hier absichtlich |
case NCPARAMS_NEW_COMPASS_DIRECTION_SETPOINT: |
if(NULL == PointList_GetPOI()) |
{ |
CAM_Orientation.Azimuth = *pvalue; |
CAM_Orientation.Elevation = 0; |
CAM_Orientation.UpdateMask = CAM_UPDATE_AZIMUTH; |
CAM_Orientation.UpdateMask |= CAM_UPDATE_AZIMUTH; |
} |
break; |
default: |
break; |
} |
/trunk/params.h |
---|
10,6 → 10,7 |
#define NCPARAMS_SHOW_TARGET 5 |
#define NCPARAMS_WP_EVENT_ONCE 6 |
#define NCPARAMS_WP_EVENT_FOREVER 7 |
#define NCPARAMS_FORCE_NEW_COMPASS_DIRECTION 8 |
#define NCPARAM_STATE_UNDEFINED 0 |
#define NCRARAM_STATE_VALID 1 |
/trunk/spi_slave.c |
---|
352,7 → 352,7 |
ToFlightCtrl.Param.sByte[1] = (s8) Kalman_MaxFusion; |
ToFlightCtrl.Param.sByte[2] = (s8) Kalman_MaxDrift; |
ToFlightCtrl.Param.Byte[3] = (u8) Kalman_Kompass; |
ToFlightCtrl.Param.sByte[4] = (s8) ToFcGpsZ; |
ToFlightCtrl.Param.Byte[4] = 0; // siehe bitcodiert unten |
ToFlightCtrl.Param.Byte[5] = (s8) ToFC_Rotate_C; |
ToFlightCtrl.Param.Byte[6] = (s8) ToFC_Rotate_S; |
ToFlightCtrl.Param.Byte[7] = GPS_Aid_StickMultiplikator; |
361,7 → 361,8 |
// if(CAM_Orientation.Azimuth != -1) ToFlightCtrl.Param.sInt[4] = (CAM_Orientation.Azimuth + (3*360) - (FC.FromFC_CompassOffset / 10 + GeoMagDec/10 + Parameter.OrientationAngle * 15)) % 360; // the FC uses the uncorrected comnpass value |
if(CAM_Orientation.Azimuth != -1) ToFlightCtrl.Param.sInt[4] = (CAM_Orientation.Azimuth + (3*360) - (FC.FromFC_CompassOffset / 10 + GeoMagDec/10 + Parameter.CamOrientation * 15)) % 360; // the FC uses the uncorrected comnpass value |
else CAM_Orientation.Azimuth = -1; |
CAM_Orientation.UpdateMask &= ~CAM_UPDATE_AZIMUTH; |
if(CAM_Orientation.UpdateMask & FORCE_AZIMUTH_ROTATION) ToFlightCtrl.Param.sByte[4] = 0x01; // allows Yawing without CareFree (Yawing at Coming Home) |
CAM_Orientation.UpdateMask &= ~(CAM_UPDATE_AZIMUTH | FORCE_AZIMUTH_ROTATION); |
} |
else |
{ |
819,7 → 820,8 |
ServoParams.RollControl = FromFlightCtrl.Param.Byte[1]; |
Parameter.DescendRange = FromFlightCtrl.Param.Byte[2]; |
Parameter.MaximumAltitude = FromFlightCtrl.Param.Byte[3]; |
// 4 |
ServoParams.CompInvert = FromFlightCtrl.Param.Byte[4]; |
Parameter.HomeYawMode = ((ServoParams.CompInvert & 0x18) >> 3); |
// 5 |
// 6 |
// 7 |
837,9 → 839,6 |
DebugOut.Analog[2] = FromFlightCtrl.AccNick; |
DebugOut.Analog[3] = FromFlightCtrl.AccRoll; |
DebugOut.Analog[11] = FromFlightCtrl.GyroHeading/10;// in deg |
Data3D.AngleNick = FromFlightCtrl.AngleNick; // in 0.1 deg |
Data3D.AngleRoll = FromFlightCtrl.AngleRoll; // in 0.1 deg |
Data3D.Heading = FromFlightCtrl.GyroHeading; // in 0.1 deg |
// every time we got new data from the FC via SPI call the navigation routine |
// and update GPSStick that are returned to FC |
SPI_RxBuffer_Request = 0; |
/trunk/timer2.h |
---|
4,7 → 4,7 |
typedef struct |
{ |
// u8 Refresh; |
// u8 CompInvert; |
u8 CompInvert; |
u8 NickControl; |
// u8 NickComp; |
// u8 NickMin; |
15,7 → 15,20 |
// u8 RollMax; |
} __attribute__((packed)) ServoParams_t; |
// bitcoding for ServoParams.ServoCompInvert |
#define SERVO_NICK_INV 0x01 |
#define SERVO_ROLL_INV 0x02 |
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value |
#define CH_DIRECTION_1 0x08 |
#define CH_DIRECTION_2 0x10 |
//CH Orientation ServoBits 0x08 0x10 |
// --> no change 0 0 |
// --> front to starting point 0 1 |
// --> rear to to starting point 1 0 |
//-> start orientation 1 1 |
extern volatile ServoParams_t ServoParams; |
void TIMER2_Init(void); |
/trunk/uart1.c |
---|
561,7 → 561,6 |
UART1_Request_WPLStore = TRUE; |
break; |
case 'j':// Set/Get NC-Parameter |
switch(SerialMsg.pData[0]) |
{ |
1044,6 → 1043,10 |
Data3D.StickRoll = FC.StickRoll; |
Data3D.StickYaw = FC.StickYaw; |
Data3D.StickGas = FC.StickGas; |
Data3D.AngleNick = FromFlightCtrl.AngleNick; // in 0.1 deg |
Data3D.AngleRoll = FromFlightCtrl.AngleRoll; // in 0.1 deg |
Data3D.Heading = FromFlightCtrl.GyroHeading; // in 0.1 deg |
Data3D.Altimeter = FC.Altimeter; // in 5cm -> 20 = 1m |
MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'C', NC_ADDRESS, 1,(u8 *)&Data3D, sizeof(Data3D)); |
UART1_Data3D_Timer = SetDelay(UART1_Data3D_Interval); |
UART1_Request_Data3D = FALSE; |
/trunk/uart1.h |
---|
43,7 → 43,8 |
u8 StickRoll; |
u8 StickYaw; |
u8 StickGas; |
u8 reserve[4]; |
s16 Altimeter; // in 5cm |
u8 reserve[2]; |
} __attribute__((packed)) Data3D_t; |
extern Data3D_t Data3D; |