This code shows us how to get the accelerometer data from the SensorManager, but not how to calculate the velocity correctly. The naive formula you use is correct ONLY for a completely noiseless signal. But all signals in the real world DO have noise, which must be filtered out.
Filtering it out for an accelerometer is tricky because integration already IS a low pass filter, so by simply integrating, you are throwing away the data you need to separate signal and noise. Google "accelerometer filter" for the variety of different approaches that have been tried. On Jan 13, 1:41 pm, SIDIBE Ali-Broma <[email protected]> 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, [email protected], 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

