]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_aerodeflections.cpp
Updated to match changes in radiostack.[ch]xx
[flightgear.git] / src / FDM / UIUCModel / uiuc_aerodeflections.cpp
index 1050f9538d354993d2e11092e92fb5b54ec8ec33..d87f608b82812ad9991f00ac37dd123240706843 100644 (file)
 
  HISTORY:      01/30/2000   initial release
                04/05/2000   (JS) added zero_Long_trim command
+              07/05/2001   (RD) removed elevator_tab addidtion to
+                           elevator calculation
+              11/12/2001   (RD) added new flap routine.  Needed for
+                           Twin Otter non-linear model
 
 ----------------------------------------------------------------------
 
  AUTHOR(S):    Jeff Scott         <jscott@mail.com>
+               Robert Deters      <rdeters@uiuc.edu>
                Michael Selig      <m-selig@uiuc.edu>
 
 ----------------------------------------------------------------------
 
 **********************************************************************/
 
+#include <math.h>
+
 #include "uiuc_aerodeflections.h"
 
 void uiuc_aerodeflections( double dt )
 {
-  double prevFlapHandle, flap_transit_rate;
-  bool flaps_in_transit;
+  double prevFlapHandle = 0.0f;
+  double flap_transit_rate;
+  bool flaps_in_transit = false;
 
   if (zero_Long_trim)
     {
@@ -87,16 +95,42 @@ void uiuc_aerodeflections( double dt )
     aileron = - Lat_control * damax * DEG_TO_RAD;
 
   if ((Long_control+Long_trim) <= 0)
-    elevator = (Long_control + Long_trim) * demax * DEG_TO_RAD + elevator_tab;
+    elevator = (Long_control + Long_trim) * demax * DEG_TO_RAD;
   else
-    elevator = (Long_control + Long_trim) * demin * DEG_TO_RAD + elevator_tab;
+    elevator = (Long_control + Long_trim) * demin * DEG_TO_RAD;
 
   if (Rudder_pedal <= 0)
     rudder = - Rudder_pedal * drmin * DEG_TO_RAD;
   else
     rudder = - Rudder_pedal * drmax * DEG_TO_RAD;
 
-  // flap routine
+
+  // new flap routine
+  // designed for the twin otter non-linear model
+  flap_percent     = Flap_handle / 30.0;       // percent of flaps desired
+  if (flap_percent>=0.31 && flap_percent<=0.35)
+    flap_percent = 1.0 / 3.0;
+  if (flap_percent>=0.65 && flap_percent<=0.69)
+    flap_percent = 2.0 / 3.0;
+  flap_goal        = flap_percent * flap_max;  // angle of flaps desired
+  flap_moving_rate = flap_rate * dt;           // amount flaps move per time step
+  
+  // determine flap position with respect to the flap goal
+  if (flap_pos < flap_goal)
+    {
+      flap_pos += flap_moving_rate;
+      if (flap_pos > flap_goal)
+       flap_pos = flap_goal;
+    }
+  else if (flap_pos > flap_goal)
+    {
+      flap_pos -= flap_moving_rate;
+      if (flap_pos < flap_goal)
+       flap_pos = flap_goal;
+    }
+
+
+  // old flap routine
   // check for lowest flap setting
   if (Flap_handle < dfArray[1])
     {