Das verwenden von atan2 hat mich auch einiges an Kopfbrecher bezorgt ! wichtig ist das alle Variabele die du brauch in deine Berechnungen von die richtige Type sind !! Dan naturlich auch noch die math.h lib nicht vergessen. Auch nicht vergessen das immer in radialen wird gerechnet. Zum umrechnen einfach multiplizieren mit 57.
Hier meine code
Code:
void task_compass(void) //opgelet, gebruik stopwatch5() in deze functie
{						//langzaam omwille van atan !!
	double  headingA ;
    double  heading0 ;
	double  heading1 ;
	int16_t  heading ;
	static int16_t oldheading;
	static int16_t headingX=0;
	startStopwatch5();
	if(getStopwatch5() > 250)
	{	heading0 =adc0;
		heading1 =adc1;
		headingA = atan2(((heading0-470)*1.1),(heading1-470));
		heading=headingA*57,3;
		if ((heading-oldheading)>180) headingX = headingX-360;
		if ((oldheading-heading)>180) headingX = headingX+360;
		oldheading = heading;
		M32heading = heading+headingX;
		setStopwatch5(0);
		
		writeString_P("ADC0:  ");
		writeInteger(adc0, DEC);
		writeChar(' ');
		writeString_P("ADC01:  ");
		writeInteger(adc1, DEC);
		writeString_P(" heading:  ");
		writeInteger(heading, DEC);
		writeChar(' ');
		writeString_P(" ADCLSL:  ");
		writeInteger(adcLSL, DEC);
		writeChar(' ');
		writeString_P(" ADCLSR:  ");
		writeInteger(adcLSR, DEC);
		writeChar(' ');
		writeChar('\n');
	}
}
Problem das sich stelt : bei jeden Durchgang von 0°, bekommt man eine Sprung !! (von -pi RAD nach +pi RAD). Aber dazu kann man einfach mit eine If Schleife dan mal 2pi bei oder abziehen.