Subversion Repositories FlightCtrl

Rev

Rev 36 | Blame | Last modification | View Log | RSS feed

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 08.2007 by Christopher Hartmann / Daniel Schmitz
// +
// + Bitte die read_me Datei beachten! Es handelt sich hierbei um eine erste Probeversion!
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
#include "math.h"

// GPS feste Variablen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//volatile int loop = 0;
//long gps_northing = 0, gps_easting = 0, gps_altitude = 0;

long target_x = 0, target_y = 0, target_z = 0;

volatile int  alpha = 0;

long zwn = 0, zwe = 0, zwn1 = 0, zwe1 = 0, zwn2 = 0, zwe2 = 0;
volatile int  gps_getpos = 5;
long gps_home_x = 0;
long gps_home_y = 0;

// GPS Einstellungen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
volatile int komp_dreh = 0;             // verdrehten Kompasseinbau kompensieren (+/-Grad)
volatile int gpsmax = 35;                       //maximal zulässiger "GPS-Steuerausschlag"

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
 
void gps_main(void)
{
/*
if (MotorenEin = 1 && gps_gethome == 0 && actualPos.state != 0){                //speichert GPS-Home-Position
gps_home_x = actualPos.x;
gps_home_y = actualPos.y;
beeptime = 80;
gps_gethome  = 1;
}*/



if (Poti1>0 && actualPos.state != 0){                           //Beginn GPS-Position-Hold

if (gps_getpos != 0){                                                           //Postion mit Schalter loggen
target_x = actualPos.x;
target_y = actualPos.y;
target_z = actualPos.z;
beeptime = 50;
gps_getpos = 0;}

//Regler ##########################################################################################################################
//P-Regler
zwn = ((sqrt(target_x^2+target_z^2)-sqrt(actualPos.x^2+actualPos.z^2))*gps_p)/10; //8
zwe = ((target_y-actualPos.y)*gps_p)/10;

//D-Regler
zwn2= (gps_d*actualPos.vx)/-3; //-2
zwe2= (gps_d*actualPos.vy)/-3; 

GPS_Nick = (zwn+zwn2); // skal;
GPS_Roll = (zwe+zwe2); // skal;

//GPS-Mixer########################################################################################################################
if (GPS_Nick>gpsmax){GPS_Nick=gpsmax;} else if (GPS_Nick<(-1*gpsmax)){GPS_Nick=(-1*gpsmax);} //min-max Wert überprüfen
if (GPS_Roll>gpsmax){GPS_Roll=gpsmax;} else if (GPS_Roll<(-1*gpsmax)){GPS_Roll=(-1*gpsmax);}

/*
//Rotationsmatrix##################################################################################################################
//Kompass ++++++++++++++++++++++++++++
alpha=0;
alpha = komp_dreh+KompassValue;                
if (KompassValue>300) {beeptime=50;}
if (alpha>359) {alpha=alpha-360;}


GPS_Nick=(sin(alpha)*GPS_Roll+cos(alpha)*GPS_Nick);
GPS_Roll=(cos(alpha)*GPS_Roll-sin(alpha)*GPS_Nick);
*/


}else {
gps_getpos=5;
GPS_Nick=0;
GPS_Roll=0;
}
}