2016-03-19 7 views
1

У меня возникают некоторые проблемы с получением данных с акселерометра и гироскопа одновременно. Мне нужно использовать эти датчики для ускорения и ориентации, чтобы рассчитать относительное положение для проекта, над которым я работаю. Когда оба датчика используются одновременно, это приводит к некоторому очень странному выводу данных, в котором данные изменяются только раз в секунду. Когда запускается только акселерометр, данные не намного лучше, потому что они изменяются примерно на 10 раз в секунду при самой быстрой настройке. Эти данные распечатываются в файл с меткой времени для каждого считывания датчика.Android: получение данных одновременно с акселерометра и гироскопа

У меня возникли проблемы с поиском учебных пособий в Интернете, в частности, с одновременным использованием нескольких датчиков. Нужно ли устанавливать каждый датчик на другой поток? У меня нет большого опыта использования потоков, как я могу это сделать.

+0

Не могли бы вы показать свой подход, пожалуйста (код). –

+0

Вот некоторые дополнительные ссылки: https://source.android.com/devices/sensors/sensor-types.html https://source.android.com/devices/sensors/index.html http: // developer.android.com/guide/topics/sensors/sensors_overview.html –

ответ

3

Вам не нужно устанавливать каждый датчик на другую резьбу. Yo можно использовать класс SensorManager для регистрации и отмены регистрации различных датчиков, которые вам нужны

public class SensorActivity extends Activity, implements SensorEventListener { 
private final SensorManager mSensorManager; 
private final Sensor mAccelerometer; 
private final Sensor mGyroscope; 

public SensorActivity() { 
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mGyroscope = mSensorManager.getDefaultSensor(TYPE_GYROSCOPE); 
} 

protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
    mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_NORMAL); 
} 

protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(this); 
} 

Реализует обработчик sensorEventList (специально метод onSensorChanged) и проверить, кто принадлежит получил данные:

public void onSensorChanged(SensorEvent sensorEvent) { 
    sensorName = sensorEvent.sensor.getName(); 
    Log.d(sensorName + ": X: " + sensorEvent.values[0] + "; Y: " + sensorEvent.values[1] + "; Z: " + sensorEvent.values[2] + ";"); 

}

+0

Да, это то, что я сделал. –

Смежные вопросы