Bluetooth経由でNEXUX 5に接続されたセンサーとしてSensortag cc2541を使用しています。onSensorChanged
したがって、電話自体のセンサーを使用していないため、以下のコードには典型的なものはありません。代わりに、センサータグ cc2541 のメソッドを使用します。
私は簡単なコンパスを作りたいと思い、いくつかの調査を行い、次のことを思いつきました。
私がインターネットで読んだことから、方位角はコンパスの方向 (Z 周り) である必要があります。しかし、正しい読みが得られません。
センサーの向きaccelerometer
を示す写真も含めました。magnetometer
加速度計の向き
磁力計の向き
コード
public class ManagerListener extends SensorTagLoggerListener implements SensorTagListener {
private float[] gravityData = new float[3];
private float[] geomagneticData = new float[3];
private double azimuth,pitch,roll;
@Override
public void onUpdateAccelerometer(SensorTagManager mgr, Point3D acc) {
super.onUpdateAccelerometer(mgr, acc);
gravityData[0] = (float)acc.x;
gravityData[1] = (float)acc.y;
gravityData[2] = (float)acc.z;
}
@Override
public void onUpdateMagnetometer(SensorTagManager mgr, Point3D b) {
super.onUpdateMagnetometer(mgr, b);
geomagneticData[0] = (float) -b.y;
geomagneticData[1] = (float) b.x;
geomagneticData[2] = (float) -b.z;
float I[] = new float[9];
float R[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, gravityData, geomagneticData);
if (success)
{
float orientationMatrix[] = new float[3];
SensorManager.getOrientation(R, orientationMatrix);
azimuth = Math.toDegrees(orientationMatrix[0]);
pitch = Math.toDegrees(orientationMatrix[1]);
roll = Math.toDegrees(orientationMatrix[2]);
}
final float rotation = (float) azimuth;
final String xyz = "Azimuth:\t" + String.valueOf(Math.round(azimuth)) +
"\nPitch:\t" + String.valueOf(Math.round(pitch)) +
"\nRoll:\t" + String.valueOf(Math.round(roll));
runOnUiThread(new Runnable() {
@Override
public void run() {
degree.setText(xyz);
pointer.setRotation(rotation);
}
});
}
}
関数onUpdateAccelerometer
とonUpdateMagnetometer
は、センサー タグ ライブラリのオーバーライドです。それは問題ではありません。問題の中身です。
また、磁力計と加速度計の両方が 100 ミリ秒ごとに値を取得します。
私は単純なコンパスをやろうとしています。私のアプリと通常のコンパスの唯一の違いは、SensorTag とそのライブラリを使用する必要があることです。コードを載せました。onUpdateAccelerometer などのメソッドがあります...これらのメソッドは一目瞭然です。Point3D には、フィールドとして x、y、z があります。度とポインターは、表示するテキストと回転するコンパス画像です。インターネットで見つけたこのシンプルで短いアプリを見てください https://www.sendspace.com/file/62ubk7これに似たものが欲しいのですが、センサータグのライブラリが必要です。私はこれまでに行ったことをまとめ、多くの調査を行いました。誰かが私の間違いを見つけるのを手伝ってくれたら、喜んで報奨金をあげます。