2016-04-04 37 views
2

Merhaba, yaptığınız sıçramaları hesaplamak için bu uygulama için jiroskop kullanıyorum, kaç atlama yaptığınızı sayarak bir uygulama ile çalışıyorum. Ama atm ettiğim problem, cihazı biraz hareket ettirdiğimde, bir sıçrama olarak sayılmam ve bu yüzden de istemiyorum. Şakayı, bir sıçrama olarak saydığı bir alt düzeye ulaştığında istiyorum.Dikey atlama hava süresini hesapla

int count = 0; 
public void onSensorChanged(SensorEvent event) { 
    double d = Math.round(Math.sqrt(Math.pow(2, event.values[0]) + Math.pow(2, event.values[1]) + Math.pow(2, event.values[2])) - 2); 
    String result =""; 

    if(d != 0){ 
     count++; 
     result = String.valueOf(d/100.0); 
    } 
    text.setText("jump counts" + " " + count); 
    text.invalidate(); 
    Log.i("Gyro", result); 
} 
+0

1. Bunun için jiroskop kullanmayın. Roroskoplar rotasyon ölçümü içindir. Bir ivmeölçer kullanın. 2. Herhangi bir değişiklik olup olmadığını kontrol ederseniz ('d! = 0'), sensörün hassasiyetinden daha büyük olan herhangi bir hareketi yakalayacaktır. – StenSoft

+0

@StenSoft accelorometre ile denedim ve sadece Y'yi kullandım ve her sarsıntı üzerinde yaptım bir atlama olarak sayılır ama bazen daha fazla atlama sayısı aldı. – Gildarian

+0

İvmeölçerler hızlandırmayı ('TYPE_LINEAR_ACCELERATION' lineer olanı, ne istediğinizi ve 'TYPE_ACCELEROMETER', genel olarak geri dönüş olarak eski cihazlar için kullanmak isteyebileceğiniz yer çekimi de dahil olmak üzere ölçer. Ayrıca ondan uzaklaşmak için zamana ihtiyacın var. Ve küçük (atlamayan) değişiklikleri hariç tutmak için bir eşikle karşılaştırmanız gerekir. – StenSoft

cevap

1

için cayro eşik değeri için bir mesafeden daha büyük ya da eşit dönerse bir atlama sayılır olan bir eşik değerini neden olabilir. daha sonra değiştirilebilir, böylece

int count = 0; 

    public void onSensorChanged(SensorEvent event) { 
     double d = Math.round(Math.sqrt(Math.pow(2, event.values[0]) + Math.pow(2, event.values[1]) + Math.pow(2, event.values[2])) - 2); 
     String result =""; 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 

     float threshold=preferences.getFloat(KEY,defaulttValue) 
     if(d != 0 && d>=threshold){ 
      count++; 
      result = String.valueOf(d/100.0); 
     } 
     text.setText("jump counts" + " " + count); 
     text.invalidate(); 
     Log.i("Gyro", result); 
    } 

bu eşik değeri

ortak tercihleri ​​saklanan kullanıcı tarafından kalibre edilebilir.

+0

Kodunuzu test ettim ve harika çalışıyor, ama şimdi sorun şu ki, telefon örneğini salladığım zaman nasıl bir şey vidalayacağınız veya dengeleyici gibi (sol ve sağ) bir atlama olarak sayılır mı yoksa devre dışı bırakıp bırakamayacağımı bilmiyorum bunun anlamı. – Gildarian

+0

Belki de doğrusal ivmeyi kontrol edebilir ve sadece Y eksenindeki değişiklikleri ölçebilir, sola veya sağa hareket eden X ekseni değerlerini atlayabilirsiniz. Daha fazla bilgi için bu bağlantıyı kontrol edin http://developer.android.com/guide/topics/sensors/sensors_motion.html#sensors-motion-linear –