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