Я пытаюсь реализовать простой алгоритм обнаружения падения с помощью акселерометра android.
override fun onSensorChanged(event: SensorEvent?)
{
x=event!!.values[0].toDouble()
y=event!!.values[1].toDouble()
z=event!!.values[2].toDouble()
var sqroot= sqrt(x.pow(2) + y.pow(2)+z.pow(2))
textView.setText("x= ${event!!.values[0]}\n\n"+"y= ${event!!.values[1]}\n\n\n"+
"z= ${event!!.values[2]}"+"\n\n\n acceleration=$sqroot")
if (sqroot<3 && minv==false && status==false)
{
minv=true
lasttime=System.currentTimeMillis()
Log.i("min thresholds","free fall to ground $sqroot" )
Toast.makeText(this,"free fall to ground $sqroot",Toast.LENGTH_SHORT).show()
}
if (minv)
{
counter++
if (sqroot>=30 && maxv==false && status==false) {
newtime = System.currentTimeMillis()
diff = newtime - lasttime
Toast.makeText(this,"last:$lasttime && new:$newtime \n diff:$diff\n\n $sqroot",Toast.LENGTH_LONG).show()
if (diff > 150 && diff<9000)
{
maxv = true
Log.i("hit the ground", "hiting to ground $sqroot")
Toast.makeText(this, "hit to ground $sqroot", Toast.LENGTH_SHORT).show()
status = true
}
}
}
if(maxv==true && minv==true && status==true)
{
Log.i("fall detected ","fall detected $sqroot")
Toast.makeText(this,"fall detected $sqroot",Toast.LENGTH_SHORT).show()
textView2.text="x=$x\ny=$y\nz=$z \n acc=$sqroot \n\n\n last:$lasttime && new:$newtime \n" +
" diff:$diff"
x=0.0
y=0.0
z=0.0
minv=false
maxv=false
status=false
}
if (counter>10)
{
counter=0
minv=true
maxv=true
}
}
Я использую простую систему пороговых значений, чтобы обнаружить падение и сложение в системе времени, означающей, что я Свободное время для достижения разницы во времени составляет> 900 миллисекунд и <9000 миллисекунд, затем предупреждение о падении </p>
, но я не получаю требуемого результата. Можете ли вы дать предложение, что не так с этим кодом?