Déjà, tu utilises PI partout sauf dans cette ligne ou tu mets M_PI :
float headingDegrees = heading * 180.0/M_PI;Conserve PI ici aussi.
Ensuite, le programme fait ce que tu lui demandes :
float X = (x-523.0)*1.0 ;
float Y = (y+190.0)*1.0 ;
// Calculate heading
float heading = atan2(Y,X);
Les 2 arguments de atan2 peuvent varier entre -1 et 1 et quand tu fais un tour complet avec ton capteur, ces deux arguments devraient en effet passer par les valeurs -1 et 1, ce qui te donnerait des angles variant entre 0 et 360°.
Mais tu fais une compensation avant le atan2, donc il n'est plus sûr que les arguments varient dans cet intervalle. Si tu veux en savoir plus, il te faut afficher les valeurs de X et Y : remplace
Serial.print(" Degress = ");
Serial.print(headingDegrees);
Serial.println("--------");
par
Serial.print(" X = ");
Serial.print(X);
Serial.print(" Y = ");
Serial.print(Y);
Serial.print(" Degrees = ");
Serial.println(headingDegrees);
et regarde ce que ça donne sur la console.