I am currently trying to develop a 3D compass myself. I have been trying for almost a week now, and still no luck. So please help me out. This is the code I use for my orientation handler:
public void onSensorChanged(int sensor, float[] values) { // azimuth pitch roll
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
direction = values[2];
} else if (sensor == SensorManager.SENSOR_ORIENTATION) {
if (direction < 0) {
angleX = values[1];
angleY = -values[2];
angleZ = values[0];
} else {
angleX = -values[1];
angleY = -values[2];
angleZ = values[0];
}
// angleX = values[0];
// angleY = values[1];
// angleZ = values[2];
}
angleX, Y and Z are the degrees I rotate my 3D object with. At first I tried the commented code, but the object doesn't rotate around the correct axis. But now the problem is that at a certain point the object "jumps" from one position to another. This particularly happens when the pitch becomes lower than -90 and thus begins to increase while on the other hand the yaw is increased with a 180 degrees and so is the roll.
Please tell why my code isn't working correctly and how can I fix it.