Rev 1134 | Rev 1141 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1134 | Rev 1139 | ||
---|---|---|---|
Line 21... | Line 21... | ||
21 | #define STATE_WAIT 0x06 // Warten auf Einschalten der Höhenregelung |
21 | #define STATE_WAIT 0x06 // Warten auf Einschalten der Höhenregelung |
22 | #define STATE_ACTIVATING 0x07 // Aktivierung der Höhenregelung |
22 | #define STATE_ACTIVATING 0x07 // Aktivierung der Höhenregelung |
23 | #define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
23 | #define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
Line 24... | Line 24... | ||
24 | 24 | ||
25 | 25 | ||
26 | int stickValue = 0; // Aktueller Stick-Wert |
26 | static int stickValue = 0; // Aktueller Stick-Wert |
27 | int lastStickValue = 0; // Vorheriger Stick-Wert |
27 | static int lastStickValue = 0; // Vorheriger Stick-Wert |
28 | int actualPitchCount; // Soll-Pitch-Wert |
28 | static int actualPitchCount = 0; // Soll-Pitch-Wert |
29 | int targetPitchCount; // Ist-Pitch-Wert |
29 | static int targetPitchCount = 0; // Ist-Pitch-Wert |
30 | int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
30 | static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
31 | char state; // Zustand |
31 | static char state; // Zustand |
32 | int timer; |
32 | static int timer; |
33 | int delay = 0; |
33 | static int delay = 0; |
- | 34 | static int delayCounter = 0; |
|
- | 35 | static int temp; // Temporäre Werte; wird mehrfach verwendet |
|
- | 36 | ||
- | 37 | unsigned char pitchHover = 0; // Standgaswert |
|
- | 38 | ||
- | 39 | ||
- | 40 | void pitch_md_init( void ) { |
|
Line 34... | Line 41... | ||
34 | int delayCounter = 0; |
41 | pitchHover = eeprom_read_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ] ); |
35 | int temp; // Temporäre Werte; wird mehrfach verwendet |
42 | } |
36 | 43 | ||
Line 78... | Line 85... | ||
78 | } else { |
85 | } else { |
79 | temp = temp - ( ( temp * temp ) / 150 ); |
86 | temp = temp - ( ( temp * temp ) / 150 ); |
80 | } |
87 | } |
Line 81... | Line 88... | ||
81 | 88 | ||
82 | stickValue = temp; |
89 | stickValue = temp; |
83 | 90 | ||
84 | /* Aktuellen Pitch-Wert berechnen. Der Wert ergibt sich aus dem Pitch-Offset |
91 | /* Aktuellen Pitch-Wert berechnen. Der Wert ergibt sich aus dem Pitch-Offset |
85 | * zuzüglich dem Stick-Wert. */ |
92 | * zuzüglich dem Stick-Wert. */ |
Line 86... | Line 93... | ||
86 | targetPitchCount = stickValue + pitchOffset; |
93 | targetPitchCount = stickValue + pitchOffset; |
Line 120... | Line 127... | ||
120 | else { |
127 | else { |
121 | timer--; |
128 | timer--; |
Line 122... | Line 129... | ||
122 | 129 | ||
123 | /* Die Verweilzeit ist abgelaufen und der aktuelle Pitch-Wert |
130 | /* Die Verweilzeit ist abgelaufen und der aktuelle Pitch-Wert |
124 | * entspricht nicht dem bereits gespeicherten Wert. */ |
131 | * entspricht nicht dem bereits gespeicherten Wert. */ |
Line 125... | Line 132... | ||
125 | if( !timer && ( PARAM_PITCH_MD_HOVER != actualPitchCount ) ) { |
132 | if( !timer && ( pitchHover != actualPitchCount ) ) { |
126 | 133 | ||
127 | // Aktuellen Pitch-Wert in Konfiguration übernehmen |
134 | // Aktuellen Pitch-Wert in Konfiguration übernehmen |
128 | PARAM_PITCH_MD_HOVER = actualPitchCount; |
135 | pitchHover = actualPitchCount; |
- | 136 | ||
- | 137 | // Konfiguration dauerhaft speichern |
|
129 | 138 | eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ], pitchHover ); |
|
130 | // Konfiguration dauerhaft speichern |
139 | /* |
131 | WriteParameterSet( |
140 | WriteParameterSet( |
132 | GetActiveParamSetNumber(), |
141 | GetActiveParamSetNumber(), |
133 | (unsigned char *) &EE_Parameter.Kanalbelegung[0], |
142 | (unsigned char *) &EE_Parameter.Kanalbelegung[0], |
134 | STRUCT_PARAM_LAENGE ); |
143 | STRUCT_PARAM_LAENGE ); |
135 | 144 | */ |
|
136 | // Signalisieren |
145 | // Signalisieren |
137 | beeptime = 500; |
146 | beeptime = 500; |
138 | } |
147 | } |
Line 146... | Line 155... | ||
146 | 155 | ||
147 | // Begrenzung der Pitch-Beschleunigung am Boden |
156 | // Begrenzung der Pitch-Beschleunigung am Boden |
Line 148... | Line 157... | ||
148 | delay = PARAM_PITCH_MD_DELAY0; |
157 | delay = PARAM_PITCH_MD_DELAY0; |
149 | 158 | ||
150 | if( rawStickValue > PARAM_PITCH_STICK_THRESHOLD ) { |
159 | if( rawStickValue > PARAM_PITCH_STICK_THRESHOLD ) { |
151 | pitchOffset = PARAM_PITCH_MD_HOVER; |
160 | pitchOffset = pitchHover; |
152 | } else if( pitchOffset == PARAM_PITCH_MD_HOVER ) { |
161 | } else if( pitchOffset == pitchHover ) { |
153 | state = STATE_BEGIN1; |
162 | state = STATE_BEGIN1; |
Line 154... | Line 163... | ||
154 | } |
163 | } |
Line 271... | Line 280... | ||
271 | pitchOffset = 0; |
280 | pitchOffset = 0; |
272 | stickValue = 0; |
281 | stickValue = 0; |
273 | state = STATE_INITIALIZE; |
282 | state = STATE_INITIALIZE; |
274 | } |
283 | } |
Line 275... | Line -... | ||
275 | - | ||
276 | if( pitchOffset < 0 ) |
- | |
277 | pitchOffset = 0; |
- | |
278 | 284 | ||
Line 279... | Line 285... | ||
279 | if( !delayCounter ) { |
285 | if( !delayCounter ) { |
280 | 286 | ||
281 | /* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
287 | /* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
Line 292... | Line 298... | ||
292 | delayCounter = delay + 1; |
298 | delayCounter = delay + 1; |
293 | } |
299 | } |
Line 294... | Line 300... | ||
294 | 300 | ||
Line 295... | Line -... | ||
295 | delayCounter--; |
- | |
296 | 301 | delayCounter--; |
|
297 | // Pitch-Wert darf nicht < 0 sein |
302 | |
298 | if( actualPitchCount < 0 ) { |
- | |
299 | actualPitchCount = 0; |
303 | if( actualPitchCount < 0 ) |
300 | } |
304 | actualPitchCount = 0; |
301 | 305 | ||
302 | // pitchCount als Debug-Wert rausschreiben |
306 | // pitchCount als Debug-Wert rausschreiben |
303 | DebugOut.Analog[26] = stickValue; |
307 | DebugOut.Analog[26] = stickValue; |