使用加速度计和磁传感器检测方向

时间:2014-11-27 06:07:24

标签: android accelerometer android-sensors direction magnetometer

我正在开发一个Android项目,我需要在用户转动时检测确切的方向(即左或右或底部或顶部)。我已经通过使用带有磁传感器的加速度计找到了方向,但我无法确定要转动的最大值。

我面临的问题是: 我无法检测到中心点/位置。

当用户从中心位置向左转动手机时,它会将其检测为左转。

然而,当我将位置返回到中央位置时,手机会将其检测为两个动作:两个动作都离开了。我的理解是:如果传感器正确固定了中心位置(原点),则可以正确检测到运动。但是,由于中心位置不固定,因此不会发生这种情况。

请指导我解决它。如果您需要进一步澄清,请告诉我。

我的代码如下

public void onSensorChanged(SensorEvent event) {

            azimuth = event.values[0];  // azimuth
            pitch = event.values[1];    // pitch
            roll = event.values[2];     // roll

            if (pitch < -45 && pitch > -135) {
                // top 
                currentSide = Side.TOP;
            } else if (pitch > 45 && pitch < 135) {
                // bottom
                currentSide = Side.BOTTOM;
            } else if (roll > 45) {
                // right
                currentSide = Side.RIGHT;
            } else if (roll < -45) {
                // left
                currentSide = Side.LEFT;
            }

            if (currentSide != null && !currentSide.equals(oldSide)) {
                switch (currentSide) {
                    case TOP : 
                        listener.onTopUp();
                        break;
                    case BOTTOM : 
                        listener.onBottomUp();
                        break;
                    case LEFT: 
                        listener.onLeftUp();
                        break;
                    case RIGHT: 
                        listener.onRightUp();
                        break;
                }
                oldSide = currentSide;
            }

            // forwards orientation to the OrientationListener
            listener.onOrientationChanged(azimuth, pitch, roll);
        }

感谢您的帮助!

0 个答案:

没有答案