搜索
 找回密码
 立即注册

简单一步 , 微信登陆

车载碰撞和侧翻算法实现

作者:chenfangyu | 时间:2016-12-28 12:10:55 | 阅读:7642| 只看该作者
车载的侧翻算法根据上面的公式实现,而碰撞时根据三个方向的加速度的值。主要利用了传感器的**ensorChanged来实现。

[java] view plain copy


  • package com.leadcore.edr.packet;  
  •   
  • import java.util.*;  
  •   
  • import android.content.Context;  
  • import android.hardware.Sensor;  
  • import android.hardware.SensorEvent;  
  • import android.hardware.SensorEventListener;  
  • import android.hardware.SensorManager;  
  • import java.lang.Math;  
  • import android.util.Log;  
  •   
  • public class GSensorService {  
  •     private static final String TAG = "GSensorService";  
  •     private Context mContext = null;  
  •     private boolean mIsRolloverWarning = false;  
  •     private boolean mIsCrashWarning = false;  
  •   
  •     public GSensorService(Context context) {  
  •         mContext = context;  
  •     }  
  •   
  •     private final SensorEventListener mSensorListener = new SensorEventListener() {  
  •         @Override  
  •         public void **ensorChanged(SensorEvent event) {  
  •             if (Sensor.TYPE_ACCELEROMETER == event.sensor.getType()) {  
  •                 float xAxis = event.values[0];  
  •                 float yAxis = event.values[1];  
  •                 float zAxis = event.values[2];  
  •                 float max_accelerometer = GlobalData.getCrashacceleration()  
  •                                             * SensorManager.STANDARD_GRAVITY / 10;  
  •                 boolean isOverAccelerometer = Math.abs(xAxis) > max_accelerometer  
  •                                             || Math.abs(yAxis) > max_accelerometer  
  •                                             || Math.abs(zAxis) > max_accelerometer;  
  •                 if (isOverAccelerometer && !mIsCrashWarning) {  
  •                     mIsCrashWarning = true;  
  •                     GlobalData.setWarningFlag(JTT808.MSG_WARN_CRASH_WARN);  
  •                     Log.i(TAG, "crash warning.");  
  •                 } else if (!isOverAccelerometer && mIsCrashWarning) {  
  •                     mIsCrashWarning = false;  
  •                     GlobalData.ClearWarningFlag(JTT808.MSG_WARN_CRASH_WARN);  
  •                 }  
  •   
  •                 double rad2 = Math.atan(xAxis / Math.sqrt(yAxis * yAxis + zAxis * zAxis));  
  •                 double degree2 = Math.toDegrees(rad2);  
  •   
  •                 int max_degree = GlobalData.getCrashDegree();  
  •                 if (Math.abs(degree2) >= max_degree && !mIsRolloverWarning) {  
  •                     mIsRolloverWarning = true;  
  •                     GlobalData.setWarningFlag(JTT808.MSG_WARN_ROLLOVER);  
  •                     Log.i(TAG, "Roll over warning.");  
  •                 } else if (Math.abs(degree2) < max_degree && mIsRolloverWarning) {  
  •                     GlobalData.ClearWarningFlag(JTT808.MSG_WARN_ROLLOVER);  
  •                     mIsRolloverWarning = false;  
  •                 }  
  •             }  
  •         }  
  •   
  •         @Override  
  •         public void onAccuracyChanged(Sensor sensor, int accuracy) {  
  •             // Not used.  
  •         }  
  •     };  
  •   
  •     private void registerListener() {  
  •         SensorManager sm = (SensorManager)mContext.getSystemService(Context.SENSOR_SERVICE);  
  •         sm.registerListener(mSensorListener, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  
  •                         SensorManager.SENSOR_DELAY_NORMAL);  
  •     }  
  •   
  •     public void start()  {  
  •         registerListener();  
  •     }  
  • }  


收藏
收藏0
分享
分享
点赞
点赞2
反对
反对0
回复

使用道具 举报

大神点评1

沙发#
liugewill 发表于:2017-3-24 11:41:46
好东西,学习了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
手机版