2012-01-05 3 views
3

Я использую диспетчер датчиков андроидов, чтобы получить показания акселерометра. Чтения, которые я получаю, являются m/s2 и почти точны. Но максимальное чтение, которое я получаю, на любой оси в любом направлении - | 19.xx | , что составляет приблизительно 2 Гс. Является ли это особой проблемой для смартфонов или есть некоторые настройки, которые мне нужно изменить для получения больших значений?Максимальное значение показаний акселерометра на Android

это код, который я использую, чтобы получить датчик для акселерометра:

sensorManager = (SensorManager) context 
      .getSystemService(Context.SENSOR_SERVICE); 

    List<Sensor> sensors = sensorManager 
      .getSensorList(Sensor.TYPE_ACCELEROMETER); 
    if (sensors.size() > 0) { 
     sensor = sensors.get(0); 
     float max = sensor.getMaximumRange(); 
     boolean running = sensorManager.registerListener(sensorEventListener, 
       sensor, SensorManager.SENSOR_DELAY_GAME);   
    } 

и это, как onSensorChanged() выглядит

public void onSensorChanged(SensorEvent event) { 

     now = event.timestamp; 

     x = event.values[0]; 
     y = event.values[1]; 
     z = event.values[2]; 

    } 

Я использую Android уровень API 7

И я протестировал на двух телефонах: HTC HD 2 (Android 2.3.5) Samsung Spica (Android 2.1)

ответ

0

«Точных значений» не существует. Это зависит от устройства. Ускорение может быть положительным или отрицательным - getMaximumRange(), я бы предположил, что вы можете смело умножить это значение на -1, чтобы получить минимальное значение.

+0

Я использовал getMaximumRange(), и он вернул 1.0. Но максимальное значение, которое я получаю, равно 19.xx m/s^2. Это аномалия ..? – Khalil

+0

У меня такая же проблема. getMaximumRange() вернулся 2.0 для меня (Samsung Galaxy Ace, 2.3.3, акселерометр), и я могу легко получить 10.0 или больше. – Kacper86

0

Вы можете получить G делает это: Gs = SQRT (Xg^2 + Уд^2 + Зг^2), где^2 означает SQR или квадрат (X^2 = X * X) Это даст вам Gs.

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