制御/ステアリングに使用されるAndroidアプリケーションを含むプロジェクトに取り組んでいます。
- 速度:電話を前後に傾けると(ピッチ)、ガスの供給と破損をシミュレートします。
- 方向:電話を左右に傾ける(ロールする)と、左右へのステアリングをシミュレートします。
私はすでにうまくいくように見えるいくつかのコードを書きました。しかし、よく見てみると、いくつかの値が奇妙に機能していることがわかりました。
電話を前後に傾けて速度を処理すると、期待どおりの速度と方向の値が得られます。しかし、方向を処理するために電話を左右に傾けると、いくつかの値が破損しているように見えます。左右に傾けると、方向の値(ロール)だけでなく、速度の値(ピッチ)にも影響します。
追加情報:
- Android2.2のプログラミング
- デバイスはGoogleNexusOneです
- デバイスを縦向きに保持する
センサー値を読み取るために使用する最も関連性の高いコードは次のとおりです。
public void onSensorChanged(SensorEvent sensorEvent)
{
synchronized (this)
{
if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION)
{
float azimuth = sensorEvent.values[0]; // azimuth rotation around the z-axis
float pitch = sensorEvent.values[1]; // pitch rotation around the x-axis
float roll = sensorEvent.values[2]; // roll rotation around the y-axis
System.out.println("pitch: " + pitch);
System.out.println("roll: " + roll);
System.out.println("--------------------");
// Convert the sensor values to the actual speed and direction values
float speed = (pitch * 2.222f) + 200;
float direction = roll * -2.222f;
したがって、コードを実行すると、出力された値を確認します。デバイスを左右に傾けると、ピッチ値にも影響を与えるようです。どうして?そして、「ロール」するときに、どうすれば純粋なピッチ値を取得できますか?電話機を左/右に傾けても、ピッチ値に影響を与えたり破損させたりしないようにします。