Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2600 → Rev 2601

/trunk/fc.c
102,6 → 102,7
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0;
unsigned char Poti[9] = {0,0,0,0,0,0,0,0};
volatile unsigned char SenderOkay = 0;
unsigned char ReceiverOkay = 0; // either RC or ExternalControl
char MotorenEin = 0,StartTrigger = 0;
long HoehenWert = 0;
long SollHoehe = 0;
120,7 → 121,11
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_HoehenSchalter = 0; // Wert : 0-250
unsigned char Parameter_HoehenSchalter = 0; // Wert : 0-250
unsigned char Parameter_GPS_Switch = 0; // Wert : 0-250
unsigned char Parameter_CareFree_Switch = 0; // Wert : 0-250
unsigned char Parameter_Autoland_Switch = 0; // Wert : 0-250
 
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
209,7 → 214,7
DebugOut.Analog[6] = Aktuell_az;//AdWertAccHoch;//(Mess_Integral_Hoch / 512);
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[9] = UBat;
DebugOut.Analog[10] = SenderOkay;
DebugOut.Analog[10] = ReceiverOkay;
DebugOut.Analog[11] = ErsatzKompassInGrad;
DebugOut.Analog[12] = Motor[0].SetPoint;
DebugOut.Analog[13] = Motor[1].SetPoint;
429,7 → 434,7
FromNaviCtrl_Value.Kalman_MaxDrift = 0;
FromNaviCtrl_Value.Kalman_MaxFusion = 32;
SenderOkay = 100;
 
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal
else
{
712,7 → 717,7
tmp2 = PPM_in[tmp] + 127;
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0;
 
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter
if(tmp == WP_EVENT_PPM_IN) Poti[i] = tmp2; // WaypointEvent channel -> no filter
else
if(tmp2 != Poti[i])
{
735,7 → 740,6
else CHK_POTI_MM(Parameter_Servo4,EE_Parameter.Servo4, 24, 255);
 
CHK_POTI_MM(Parameter_Servo5,EE_Parameter.Servo5, 24, 255);
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel);
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung);
CHK_POTI(Parameter_Hoehe_TiltCompensation,EE_Parameter.Hoehe_TiltCompensation);
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung);
771,11 → 775,41
MAX_GAS = EE_Parameter.Gas_Max;
MIN_GAS = EE_Parameter.Gas_Min;
 
if(EE_Parameter.CareFreeChannel)
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel);
Parameter_GPS_Switch = GetChannelValue(EE_Parameter.NaviGpsModeChannel);
Parameter_CareFree_Switch = GetChannelValue(EE_Parameter.CareFreeChannel);
Parameter_Autoland_Switch = GetChannelValue(EE_Parameter.StartLandChannel);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(ExternalControl.Config & EC_VALID)
{
if(ExternalControl.Config & EC_IGNORE_RC_LOST) ReceiverOkay = 220;
if(ExternalControl.Config & EC_USE_SWITCH)
{
if(ExternalControl.Switches & EC2_AUTOLAND) Parameter_Autoland_Switch = 1;
else
if(ExternalControl.Switches & EC2_AUTOSTART) Parameter_Autoland_Switch = 250;
else Parameter_GPS_Switch = 128;
 
if(ExternalControl.Switches & EC2_PH) Parameter_GPS_Switch = 128;
else
if(ExternalControl.Switches & EC2_CH) Parameter_GPS_Switch = 250;
else Parameter_GPS_Switch = 0;
 
if(ExternalControl.Switches & EC2_CAREFREE) Parameter_CareFree_Switch = 250;
else Parameter_CareFree_Switch = 0;
if(ExternalControl.Switches & EC2_ALTITUDE) Parameter_HoehenSchalter = 250;
else Parameter_HoehenSchalter = 0;
}
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(EE_Parameter.CareFreeChannel || (ExternalControl.Config & EC_USE_SWITCH))
{
CareFree = 1;
if(PPM_in[EE_Parameter.CareFreeChannel] < -64) CareFree = 0;
// if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0;
if(Parameter_CareFree_Switch < 64) CareFree = 0;
if(carefree_old != CareFree)
{
if(carefree_old < 3)
830,16 → 864,26
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ Analoge Steuerung per Seriell
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if((ExternalControl.Config & EC_VALID) && (Parameter_ExternalControl > 128))
if(ExternalControl.Config & EC_VALID)
{
ChannelNick += ExternalControl.Nick;
ChannelRoll += ExternalControl.Roll;
ChannelYaw += ExternalControl.Gier;
if(ExternalControl.Config & EC_GAS_ADD) ChannelGas += ExternalControl.Gas;
if(ExternalControl.Config & EC_IGNORE_RC_STICK) // do not add
{
ChannelNick = ExternalControl.Nick;
ChannelRoll = ExternalControl.Roll;
ChannelYaw = ExternalControl.Gier;
ChannelGas = ExternalControl.Gas;
}
else
{
if(ExternalControl.Gas < ChannelGas) ChannelGas = ExternalControl.Gas; // the RC-Stick is the MAX value here
}
{
ChannelNick += ExternalControl.Nick;
ChannelRoll += ExternalControl.Roll;
ChannelYaw += ExternalControl.Gier;
if(ExternalControl.Config & EC_GAS_ADD) ChannelGas += ExternalControl.Gas;
else
{
if(ExternalControl.Gas < ChannelGas) ChannelGas = ExternalControl.Gas; // the RC-Stick is the MAX value here
}
}
}
sei();
if(ChannelNick > 127) ChannelNick = 127; else if(ChannelNick < -127) ChannelNick = -127;
888,7 → 932,7
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Empfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE))
if(ReceiverOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE))
{
ServoFailsafeActive = SERVO_FS_TIME;
if(RcLostTimer) RcLostTimer--;
913,14 → 957,14
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
if(ReceiverOkay > 140)// && 0)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
static unsigned int trigger = 1000;
static unsigned char old_switch = 100;
if(EE_Parameter.StartLandChannel && EE_Parameter.LandingSpeed)
if((EE_Parameter.StartLandChannel || (ExternalControl.Config & EC_USE_SWITCH)) && EE_Parameter.LandingSpeed)
{
if(PPM_in[EE_Parameter.StartLandChannel] > 50)
if(Parameter_Autoland_Switch > 180)
{
if(old_switch == 50) if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) { FC_StatusFlags2 |= FC_STATUS2_AUTO_STARTING; SpeakHoTT = SPEAK_RISING;}
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING;
927,13 → 971,13
old_switch = 150;
}
else
if(PPM_in[EE_Parameter.StartLandChannel] < -50)
if(Parameter_Autoland_Switch < 64)
{
if(old_switch == 150) { FC_StatusFlags2 |= FC_STATUS2_AUTO_LANDING; SpeakHoTT = SPEAK_SINKING;}
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_STARTING;
old_switch = 50;
}
else
else // mittenstellung
{
FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING);
}
1230,9 → 1274,9
{
static int stick_nick,stick_roll;
unsigned char stick_p;
NewPpmData = 15; // wait max 30ms or when a new PPM-Frame arrives
ParameterZuordnung();
ChannelAssingment();
 
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + ChannelNick * stick_p) / 4;
stick_roll = (stick_roll * 3 + ChannelRoll * stick_p) / 4;
2258,4 → 2302,4
}
#endif
}
//DebugOut.Analog[16]
//DebugOut.Analog[]
/trunk/fc.h
127,6 → 127,7
extern int DiffNick,DiffRoll;
//extern int Poti1, Poti2, Poti3, Poti4;
extern volatile unsigned char SenderOkay;
unsigned char ReceiverOkay;
extern int StickNick,StickRoll,StickGier;
extern char MotorenEin;
extern unsigned char CalibrationDone;
149,6 → 150,7
extern unsigned char Parameter_ServoRollComp;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsKopplung2;
extern unsigned char Parameter_ExternalControl;
//extern unsigned char Parameter_AchsGegenKopplung1;
extern unsigned char Parameter_J16Bitmask; // for the J16 Output
extern unsigned char Parameter_J16Timing; // for the J16 Output
163,6 → 165,11
extern unsigned char Parameter_MaximumAltitude;
extern char NeueKompassRichtungMerken;
extern unsigned char ServoFailsafeActive;
extern unsigned char Parameter_HoehenSchalter;
extern unsigned char Parameter_GPS_Switch;
extern unsigned char Parameter_CareFree_Switch;
extern unsigned char Parameter_Autoland_Switch;
 
 
#endif //_FC_H