I'm doing my project to record data from accelerometer and gyroscope sensor and save it into file in sdcard. But I have problem, when I start recording for more than 1 second, the result in file is only 1 data that consist of 1 x axis, 1 y axis, and 1 z axis. Ideally speaking, I should get more data in the file as it is being recorded
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    //return inflater.inflate(R.layout.get_data, container, false);
    //get path from sdcard
    sdcard = Environment.getExternalStorageDirectory().getPath();
    rootView = inflater.inflate(R.layout.get_data, container,false);
    Button start = (Button) rootView.findViewById(R.id.buttonstart);
    Button stop = (Button) rootView.findViewById(R.id.buttonstop);
    //eksekusi saat klik button stop
    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            rekam = false;
            // TODO Auto-generated method stub
            //sensorManager.unregisterListener(mySensorEventListener);
            //super.onStop();
        }
    });
    //eksekusi saat klik button start
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            rekam = true;
            String nama = sdcard+"/datasensor.txt";
            namafile = new File(nama);
        }
    });
    return rootView;
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    parent = getActivity();
    sensorManager = (SensorManager) parent.getSystemService(Context.SENSOR_SERVICE);
    sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
    sensorgyroscope = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE).get(0);
    koordinatX = (TextView)rootView.findViewById(R.id.coordinatx);
    koordinatY = (TextView)rootView.findViewById(R.id.coordinaty);
    koordinatZ = (TextView)rootView.findViewById(R.id.coordinatz);
    koordinatrollX = (TextView)rootView.findViewById(R.id.coordinatrollx);
    koordinatpitchY = (TextView)rootView.findViewById(R.id.coordinatpitchy);
    koordinatyawZ = (TextView)rootView.findViewById(R.id.coordinatyawz);
    sensorManager=(SensorManager) parent.getSystemService(Context.SENSOR_SERVICE);
    //add listener for accelerometer
    sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
    //add listener for gyroscope
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL); 
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER)
    {
        //assign directions accelometer
        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];
        koordinatX.setText("X: "+x);
        koordinatY.setText("Y: "+y);
        koordinatZ.setText("Z: "+z);
        if(rekam==true)
        {
            try
            {
                BufferedWriter out = new BufferedWriter(new FileWriter(namafile));
                out.write(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2]) );
                out.close();
            }
            catch (IOException e)
            {
                System.out.println("Exception");
            }
        }
    }
    if(event.sensor.getType()==Sensor.TYPE_GYROSCOPE)
    {                   
        float roolX = event.values[0];
        float pitchY = event.values[1];
        float yawZ = event.values[2];
        koordinatrollX.setText("Orientation X (Roll) :" + Float.toString(event.values[0]));
        koordinatpitchY.setText("Orientation Y (Pitch) :" + Float.toString(event.values[1]));
        koordinatyawZ.setText("Orientation Z (Yaw):" + Float.toString(event.values[2]));
        if(rekam==true)
        {
            try
            {
            BufferedWriter out = new BufferedWriter(new FileWriter(namafile));
            out.write(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2]) );
            out.close();
            }
            catch (IOException e)
            {
                System.out.println("Exception");
            }
        }
}
}
}
                Instead of buf.write(), try buf.append()
it will append the new sensor readings rather than over writing when you use buf.write()
you have to use:
BufferedWriter out = new BufferedWriter(new FileWriter(namafile));
inside:
    //eksekusi saat klik button start
start.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        rekam = true;
        String nama = sdcard+"/datasensor.txt";
        namafile = new File(nama);
        //use it here.
        BufferedWriter out = new BufferedWriter(new FileWriter(namafile));
    }
});
also:
out.close();
Must be inside the other "stop" onClick.
//eksekusi saat klik button stop
stop.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        rekam = false;
        out.close();
    }
});
and as Shehroz told, you have to use,
out.append(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2]) );
I hope that answer your question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With