这个问题已经以几种方式提出,但一直没有确凿的答案。
我正在尝试找出 Android 手机上加速度计的最大范围。一些论坛声称 +-2Gs 和一些 +-3.5Gs。
加速度计硬件(位于 s4 上的 LSM330)具有更高的范围,高达 16Gs。 http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00059856.pdf
我编写了一个应用程序来实际找到这个范围并将其加载到 S4 上。下图显示了读数。显然,每个方向的最大范围是 2Gs。
- 有没有办法增加这个范围,如果有,怎么做?
- 有没有人在其他 Android 手机上找到更大的默认范围?
对于那些感兴趣的人,这是我的代码的 nb 部分:
public class MainActivity extends Activity implements SensorEventListener{
Sensor accelerometer;
SensorManager sm;
TextView maxValue;
TextView realTimeValues;
TextView realTimeResultant;
TextView maxValues;
TextView maxResultant;
float x = 0;
float y = 0;
float z = 0;
float res = 0;
float xMax = 0;
float yMax = 0;
float zMax = 0;
float resMax = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);
maxValue = (TextView)findViewById(R.id.MaxValue);
realTimeValues = (TextView)findViewById(R.id.RealTimeValues);
realTimeResultant = (TextView)findViewById(R.id.RealTimeResultant);
maxValues = (TextView)findViewById(R.id.maxValues);
maxResultant = (TextView)findViewById(R.id.maxResultant);
float max = accelerometer.getMaximumRange();
maxValue.setText("Max range: "+ max);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
x = event.values[0];
y = event.values[1];
z = event.values[2];
res = (float) Math.sqrt( x*x + y*y + z*z);
realTimeValues.setText("X: " + x + "\nY: " + y + "\nZ: " + z);
realTimeResultant.setText(res + " m/s^2");
if (Math.abs(x) > Math.abs(xMax))
xMax = x;
if (Math.abs(y) > Math.abs(yMax))
yMax = y;
if (Math.abs(z) > Math.abs(zMax))
zMax = z;
if (res > resMax)
resMax = res;
maxValues.setText("X: " + xMax + "\nY: " + yMax + "\nZ: " + zMax);
maxResultant.setText(resMax + " m/s^2");
}
}