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[] |