Gast
#349061
Hallo Leute,
ich habe folgendes Problem:
Ich habe folgende Funktion
float GetGravitationValueX()
{
float fCountsX;
char cCommandX;// local 8 Bit variable
switch(bSelfTestVTI)
{
case 0:
cCommandX = READ_X_CHANNEL_VTI;
break;
case 1:
cCommandX = SELFTEST_X_CHANNEL;
break;
case 2:
cCommandX = MEAS; //After selftest first set to zero
break;
}
fCountsX = (float)readsca (cCommandX);
//calculate a gravitation value
fCountsX = (fCountsX - 1024.0)/819.0;
if(fCountsX>1)
{
fCountsX = 1;
}else if(fCountsX<-1){
fCountsX = -1;
}
return fCountsX;
}
Ich lese einen Wert dieser wird anschließend umgewandelt als
Gravitations Wert und zurück gegeben.
Anschließend wird dieser Wert in folgender Funktion verarbeitet:
void mainVTI()
{
fGraValueX = GetGravitationValueX();
//calculates angle of x-axis inclination
fDecimValueX = asin(fGraValueX) * 57.29582790;// 180 / 3.14159;
fDecimValueX = fDecimValueX * 100;
}
Hier wird ein Winkel berechnet und fDecimValueX übergeben. Anschließend
soll diese Variable über das CANopen Protokoll weiter verarbeitet
werden.
Hier mein Problem:
Der asin() wird nicht korrekt berechnet obwohl ich einen korrekten Wert
fGraValueX über die Funktion GetGravitationValueX() geliefert bekomme.
Ich bekomme einen sehr kleinen Wert ca. 10E-28.
Das merkwürdige ist das wenn ich den code in einer funktion habe als
etwa so:
void mainVTI()
{
float fCountsX;
char cCommandX;// local 8 Bit variable
switch(bSelfTestVTI)
{
case 0:
cCommandX = READ_X_CHANNEL_VTI;
break;
case 1:
cCommandX = SELFTEST_X_CHANNEL;
break;
case 2:
cCommandX = MEAS; //After selftest first set to zero
break;
}
fCountsX = (float)readsca (cCommandX);
//calculate a gravitation value
fGraValueX = (fCountsX - 1024.0)/819.0;
if(fGraValueX>1)
{
fGraValueX = 1;
}else if(fGraValueX<-1){
fGraValueX = -1;
}
fDecimValueX = asin(fGraValueX) * 57.29582790;// 180 / 3.14159; //
calculates angle of x-axis inclination
fDecimValueX = fDecimValueX * 100;
}
funktioniert es.
Hat da jemand eine Idee woran das liegen könnte?