Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1138 → Rev 1139

/branches/thjac/V1_11/pitch_md.c
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;