Как распечатать значение акселерометра каждые несколько секунд и сохранить в CSV-файл - PullRequest
0 голосов
/ 23 октября 2019

Я хочу печатать акселерометр каждую секунду и сохранять это значение в файле .csv. Я использую Sensor.TYPE_LINEAR_ACCELERATION для генерации значения акселерометра. Пожалуйста, помогите мне, я так запутался с этим,

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    isRunning=false;

    time_string = new String();
    dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    acclero_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);

    Text_X_Acclero = (TextView) findViewById(R.id.text_x_acclero);
    Text_Y_Acclero = (TextView) findViewById(R.id.text_y_acclero);
    Text_Z_Acclero = (TextView) findViewById(R.id.text_z_acclero);

    buttonStart = (Button)findViewById(R.id.button_start);
    buttonStop = (Button)findViewById(R.id.button_stop);

    buttonStart.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            buttonStart.setEnabled(false);
            buttonStop.setEnabled(true);

            Log.d(TAG, "Writing to " + getStorageDir());
            try {
                writer = new FileWriter(new File(getStorageDir(), "sensors_" + System.currentTimeMillis() + ".csv"));
                writer.write(String.format("%s, %s, %s, %s\n ",
                        "Waktu", "x_acclero", "y_acclero", "z_acclero"));
            } catch (IOException e) {
                e.printStackTrace();
            }

            isRunning = true;
            return true;
        }
    });

    buttonStop.setOnTouchListener(new View.OnTouchListener() {
        @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            buttonStart.setEnabled(true);
            buttonStop.setEnabled(false);
            isRunning = false;
            sensorManager.flush(accleroListener);
            sensorManager.unregisterListener(accleroListener);
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        }
    });
} 

, и это мой код для сохранения значения в CSV-файле

public SensorEventListener accleroListener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        x_acclero = event.values[0];
        y_acclero = event.values[1];
        z_acclero = event.values[2];

        //waktu dan tanggal record
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

        time_string = dateFormat.format(new Date());

        Text_X_Acclero.setText("X : " + (int)x_acclero + " m/s2");
        Text_Y_Acclero.setText("Y : " + (int)y_acclero + " m/s2");
        Text_Z_Acclero.setText("Z : " + (int)z_acclero + " m/s2");
        if (isRunning){
            try{
                switch (event.sensor.getType()){
                    case Sensor.TYPE_GYROSCOPE:
                    case Sensor.TYPE_LINEAR_ACCELERATION:
                        writer.write(String.format("%s, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f \n ",
                                time_string, x_acclero, y_acclero, z_acclero));
                        break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
    }
};}

, что код работает, но я не могу установитьсколько значений будет записано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...