This code shows us how to get accelerometer readings out of the
SensorManager, but the calculation you perform neglects noise in the
accelerometer output. So if you actually try this out, you will notice
it will not compare well with the car's speedometer.

As I mentioned before: to get a realistic solution, you need to
account for the noise by viewing integration as a low pass filter
On Jan 13, 1:41 pm, SIDIBE Ali-Broma <jahbr...@gmail.com> wrote:
> You can use Sensor to determinate speed but you must do some
> mathematic calculat ( Cos, sinus, abs...)
> Please check this below code
>
> package org.sidibe.speedometre;
>
> /*
>  * SIDIBE Ali-Broma,malien, jahbr...@gmail.com, ENSAT Tanger
>  * Novembre 2009 Tout droit permis.
>  *
>  *
>
> import java.util.*;
> import android.app.Activity;
> import android.content.Context;
> import android.graphics.*;
> import android.hardware.Sensor;
> import android.hardware.SensorEvent;
> import android.hardware.SensorEventListener;
> import android.hardware.SensorListener;
> import android.hardware.SensorManager;
> import android.os.Bundle;
> import android.os.Handler;
> import android.view.Gravity;
> import android.widget.TextView;
>
> public class MySpeedometre extends Activity {
>
>         TextView tv;
>         SensorManager sensor;
>         SensorEventListener svls;
>         Handler myhandl= new Handler();
>         double temperature=0;
>
>         public float velocite,accel_actuel,accel_app;
>      Date last;
>
>     @Override
>     public void onCreate(Bundle savedInstanceState) {
>         super.onCreate(savedInstanceState);
>
>         last=new Date(System.currentTimeMillis());
>
> sensor=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
>
>         sensor.registerListener(listener,
> sensor.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER),
> SensorManager.SENSOR_DELAY_FASTEST);
>
>        //Mise a jour l interface chaque seconde
>
>         Timer tim=new Timer();
>         tim.scheduleAtFixedRate(new TimerTask(){
>                 public void run () {
>                         updateGUI();
>                 }
>         },0,1000);
>
>         load();
>         setContentView(tv);
>     }
>
>         public void load()
>         {
>
>                 tv= new TextView(this);
>                 tv.setBackgroundColor(R.drawable.finals);
>             tv.setTextSize(16);
>             tv.setTextColor(Color.GREEN);
>                 tv.setSingleLine(true);
>                 tv.setTypeface(null, Typeface.BOLD);
>                 tv.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);
>                 tv.setGravity(Gravity.CENTER);
>
>                 }
>         public void upadatevelocite()
>         {
>
>                 // Date actuelle en milliseconde
>                 Date now= new Date(System.currentTimeMillis());
>                 // ecart en seconde entre date passe et date actuelle
>                 long ecart= ( now.getTime()-last.getTime())/1000;
>                 // Mise à jour du temps
>                   last.setTime(now.getTime());
>
>                 float ecartv=accel_app*ecart+0; /* calcule de la vitesse from 
> v=at
> +vo;*/
>
>                 // Mise à jour
>                 accel_app=accel_actuel;
>                 velocite=velocite+ecartv;
>
>                 tv.setText(String.valueOf(velocite)+"m/s");
>
>         }
>
> public final SensorEventListener listener= new SensorEventListener(){
>         @Override
>         public void onAccuracyChanged(Sensor arg0, int arg1) {
>                 // TODO Auto-generated method stub
>
>         }
>
>         @Override
>         public void onSensorChanged(SensorEvent event)
>
>         {    float evaleur[]= event.values;
>              double calibration = Double.NaN;
>
>               double x= evaleur[SensorManager.DATA_X];
>               double y= evaleur[SensorManager.DATA_Y];
>               double z= evaleur[SensorManager.DATA_Z];
>            temperature= evaleur[SensorManager.SENSOR_TEMPERATURE];
>               // Calcul du changement  acceleration en coordonnnee ca
>               double a= -1*Math.sqrt(Math.pow(x, 2)+Math.pow(y,
> 2)+Math.pow(z, 2));
>
>               if(calibration==Double.NaN){
>                   calibration=a;
>
>               }
>               else {
>                   upadatevelocite();
>               accel_actuel=(float)a;
>               }
>
>         }
>
> };
>
> public void updateGUI()
> {
>         myhandl.post(new Runnable(){
>                 public void run()
>                 {
>                         tv.setText("Vit:"+ velocite+"m/s 
> à:"+temperature+"°C\n par
> SIDIBE");
>                 }
>         });
>
> }
> }
>
> ==========================================================================

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to