23,18 → 23,25 |
#define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
|
|
int stickValue = 0; // Aktueller Stick-Wert |
int lastStickValue = 0; // Vorheriger Stick-Wert |
int actualPitchCount; // Soll-Pitch-Wert |
int targetPitchCount; // Ist-Pitch-Wert |
int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
char state; // Zustand |
int timer; |
int delay = 0; |
int delayCounter = 0; |
int temp; // Temporäre Werte; wird mehrfach verwendet |
static int stickValue = 0; // Aktueller Stick-Wert |
static int lastStickValue = 0; // Vorheriger Stick-Wert |
static int actualPitchCount = 0; // Soll-Pitch-Wert |
static int targetPitchCount = 0; // Ist-Pitch-Wert |
static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
static char state; // Zustand |
static int timer; |
static int delay = 0; |
static int delayCounter = 0; |
static int temp; // Temporäre Werte; wird mehrfach verwendet |
|
unsigned char pitchHover = 0; // Standgaswert |
|
|
void pitch_md_init( void ) { |
pitchHover = eeprom_read_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ] ); |
} |
|
|
/* |
* Berechnet den aktuellen Pitch-Wert für die Regelung |
* |
80,7 → 87,7 |
} |
|
stickValue = temp; |
|
|
/* Aktuellen Pitch-Wert berechnen. Der Wert ergibt sich aus dem Pitch-Offset |
* zuzüglich dem Stick-Wert. */ |
targetPitchCount = stickValue + pitchOffset; |
122,17 → 129,19 |
|
/* Die Verweilzeit ist abgelaufen und der aktuelle Pitch-Wert |
* entspricht nicht dem bereits gespeicherten Wert. */ |
if( !timer && ( PARAM_PITCH_MD_HOVER != actualPitchCount ) ) { |
if( !timer && ( pitchHover != actualPitchCount ) ) { |
|
// Aktuellen Pitch-Wert in Konfiguration übernehmen |
PARAM_PITCH_MD_HOVER = actualPitchCount; |
|
pitchHover = actualPitchCount; |
|
// Konfiguration dauerhaft speichern |
eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ], pitchHover ); |
/* |
WriteParameterSet( |
GetActiveParamSetNumber(), |
(unsigned char *) &EE_Parameter.Kanalbelegung[0], |
STRUCT_PARAM_LAENGE ); |
|
*/ |
// Signalisieren |
beeptime = 500; |
} |
148,8 → 157,8 |
delay = PARAM_PITCH_MD_DELAY0; |
|
if( rawStickValue > PARAM_PITCH_STICK_THRESHOLD ) { |
pitchOffset = PARAM_PITCH_MD_HOVER; |
} else if( pitchOffset == PARAM_PITCH_MD_HOVER ) { |
pitchOffset = pitchHover; |
} else if( pitchOffset == pitchHover ) { |
state = STATE_BEGIN1; |
} |
break; |
273,9 → 282,6 |
state = STATE_INITIALIZE; |
} |
|
if( pitchOffset < 0 ) |
pitchOffset = 0; |
|
if( !delayCounter ) { |
|
/* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
294,11 → 300,9 |
|
delayCounter--; |
|
// Pitch-Wert darf nicht < 0 sein |
if( actualPitchCount < 0 ) { |
if( actualPitchCount < 0 ) |
actualPitchCount = 0; |
} |
|
|
// pitchCount als Debug-Wert rausschreiben |
DebugOut.Analog[26] = stickValue; |
DebugOut.Analog[28] = actualPitchCount; |