簡體   English   中英

如何在3秒鍾的時間內存儲和使用來自加速度計的數據?

[英]How to store and use data from accelerometer for 3 seconds of time?

首先,對這個愚蠢的問題感到抱歉。

我想做的是在三秒鍾內每秒捕獲一次加速度計數據,並添加這些數據,但是由於缺乏經驗,我發現很難做到這一點。

到目前為止,我已經完成的工作是:

實時獲取X,Y,X軸的加速度數據,並計算出最終的加速度,即result_acceleration = Math.sqrt(X ^ 2 + y ^ 2 + z ^ 2)也是實時的 ,並且會隨着時間不斷變化。

我想做的是:

第一,第二和第三第二端查找resultant_acceleration,A1,A2,A3回報(A1 + A2 + A3)我經歷艱難的時刻在Java中,做任務寫一個方法。

        public void onSensorChanged(SensorEvent event) {

   final ArrayList<Double> accln = new ArrayList<>();

    //enter your code here
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
    if (!mInitialized) {
        mLastX = x;
        mLastY = y;
        mLastZ = z;

        mInitialized = true;
    } else {
        float deltaX = Math.abs(mLastX - x);
        float deltaY = Math.abs(mLastY - y);
        float deltaZ = Math.abs(mLastZ - z);
        if (deltaX < NOISE) deltaX = (float) 0.0;
        if (deltaY < NOISE) deltaY = (float) 0.0;
        if (deltaZ < NOISE) deltaZ = (float) 0.0;
        mLastX = x;
        mLastY = y;
        mLastZ = z;

       final double a =Math.sqrt((deltaX*deltaX)+(deltaY*deltaY)+(deltaZ*deltaZ));
        accln.add(a); //what i am trying to do here is collect the sample data of acceleration in an array list for 3 seconds,// so later i can calculate average acceleration

    }
    }

我建議啟動一個計時器,然后在達到1000毫秒時進行測量,然后在2000和3000進行測量。這可能會有所幫助: Android計時器? 如何?

解決了問題

只需使用Timer類方法每1秒執行一次

new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {

                                     // Just calculate your accleration here

                              }
                                                 }, 0, 1000);

您從未提及您要以何種速率獲取加速度數據,所以我只是想知道它將達到〜5hz( SENSOR_DELAY_NORMAL )。 請記住,這只是一個提示。 如果另一個應用程序以更快的速率注冊加速傳感器數據,則可能以更快的速率獲得事件。 至於代碼:

// SOMEWHERE IN YOUR APP

final ArrayList<Double> accln = new ArrayList<>(); //THIS SHOULD BE OUTSIDE YOUR CALLBACK!

final SensorEventListener eventListener = new SensorEventListener() {
                @Override
                public void onSensorChanged(SensorEvent event) {
                    //enter your code here
                    float x = event.values[0];
                    float y = event.values[1];
                    float z = event.values[2];
                    if (!mInitialized) {
                        mLastX = x;
                        mLastY = y;
                        mLastZ = z;

                        mInitialized = true;
                    } else {
                        float deltaX = Math.abs(mLastX - x);
                        float deltaY = Math.abs(mLastY - y);
                        float deltaZ = Math.abs(mLastZ - z);
                        if (deltaX < NOISE) deltaX = (float) 0.0;
                        if (deltaY < NOISE) deltaY = (float) 0.0;
                        if (deltaZ < NOISE) deltaZ = (float) 0.0;
                        mLastX = x;
                        mLastY = y;
                        mLastZ = z;

                        final double a = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY) + (deltaZ * deltaZ));
                        accln.add(a); //what i am trying to do here is collect the sample data of acceleration in an array list for 3 seconds,// so later i can calculate average acceleration

                    }
                }

                @Override
                public void onAccuracyChanged(Sensor sensor, int accuracy) {
                }
            };

SensorManager sensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);
Handler handler = new Handler();
Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(eventListener, accel, SensorManager.SENSOR_DELAY_NORMAL);  //~5hz of data
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        sensorManager.unregisterListener(eventListener);
    }
}, 5000);

這將注冊您的偵聽器,並在5秒鍾后從可運行的處理程序中注銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM