2017-06-08 18 views
0

私はアンドロイドでモバイルアプリケーションを開発しています。加速度計とジャイロスコープのデータを正確に同時に取得する必要があります。つまり、2つのセンサーを同期させて同時に読み取る必要があります。サービス(アクティビティではない)を使用する必要がありますが、2つのevent.timestampの値はまったく異なります。加速度計とジャイロスコープ/ Androidの同期

public void onSensorChanged(SensorEvent event) { 


    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     xa =event.values[0] ; 
     ya =event.values[1] ; 
     za =event.values[2] ; 
     ta= event.timestamp; 

    } 

    if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { 
     xg = event.values[0]; 
     yg = event.values[1]; 
     zg = event.values[2]; 
     tg = event.timestamp; 
    } 

ありがとうございます。

答えて

0

加速度計とジャイロスコープの2つのブール値フラグを使用します。両方が真の場合、両方から少なくとも1つの時間が得られることを意味し、そのうち3つ以上が3回以上あります。加速度センサーは非常に高速です。それらの両方が真である場合、それらを再度偽に設定して、再びデータを取得します。 SensorをSensor APIと同期させることはできません。

boolean isAccelData = false; 
boolean isGyroData = false; 

public void onSensorChanged(SensorEvent event) { 


    if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { 
     isAccelData = true; 
    } 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     isGyroData = true; 
    } 
    if (isAccelData & isGyroData) { 
     // DO something here 
     isAccelData = false; 
     isGyroData = false; 
    } 
} 
+0

まずはご返信ありがとうございます。最初は私が(ta == tg){データベースのデータを保存する}というテストを使用しましたが、5分後でもテーブルがほとんど空であることがわかりました。私がSensor apiを同期用に使用できない場合は、どのツールに助言してください。 – Lotus

+0

これは、新しいプロジェクトのセンサリスナーを作成し、1つのジャイロスコープで得られる加速度計出力の数を確認するだけです。 ログまたはSystem.printlnを使用し、別のいずれかを設定すると、両方ともフラグがtrueに設定されます。これは機能します。コンパスアプリケーションをチェックすると、加速度計と磁場センサーの両方からデータを取得した後に回転行列を設定するのに使用されていることがわかります。 – Thracian

+0

私は3つまたは4つの加速度計データと磁場センサーデータを参照して、フラグとトリガーアクションの両方を設定し、アクションの実行後に両方のフラグを再びfalseに設定します。 – Thracian

関連する問題