Code:
static inline void Kompass()
{
unsigned short h,l;
short x,y,xx,yy,kompass_x;//,offset_x,offset_y;
double temp;
//offset_x=-125;offset_y=15;
if(!(i2c_start(Adresse_Kompass)))
{
i2c_write(2); // register
i2c_rep_start(Adresse_Kompass+I2C_READ); // restart
h=i2c_readAck();
l=i2c_readAck();
kompass_akt=uniq(l,h);
l=i2c_readAck();//4
l=i2c_readAck();//5
l=i2c_readAck();//6
l=i2c_readAck();//7
l=i2c_readAck();//8
l=i2c_readAck();//9
h=i2c_readAck();//10
l=i2c_readAck();//11
xx=uniq(l,h);
h=i2c_readAck();//12
l=i2c_readNak();//13
yy=uniq(l,h);
i2c_stop();
x=xx-(-125); // Offset Test
y=yy-15; // Offset Test
temp=1000*atan2(y,x); // für Kompasswinkel
kompass_x=(short)temp;
if (kompass_x<0) kompass_x=kompass_x+6282;
richtung_kom=(kompass_akt/10); // Umrechnen rad*1000
richtung_kom=(richtung_kom*35)/2;// für Testauswertung
debug_eins=richtung_kom;
debug_zwei=kompass_x;
debug_fuenf=xx;
debug_sechs=yy;
}
else richtung_kom= (-9999); // verwerfen wenn keine neuen Daten vorhanden
}