javaandroidkotlinandroid-sensors

Gravity sensor value increases


Gravity sensor values increases after each call of onSensorChanged(SensorEvent event) the values of event. Values increases and after a little bit of time (about 1 min) reaches a NaN value. Could someone say why this is happening? Code:

private void recordData(SensorEvent e) {
    String label;
    int currentSensorId = -1;
    switch (e.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        currentSensorId = 0;
        label = LOG_LABEL_ACCELEROMETER;
        break;
    case Sensor.TYPE_GYROSCOPE:
        label = LOG_LABEL_GYROSCOPER;
        currentSensorId = 1;
        break;
    case Sensor.TYPE_GRAVITY:
        label = LOG_LABEL_GRAVITY;
        currentSensorId = 2;
        break;
    case Sensor.TYPE_ROTATION_VECTOR:
        label = LOG_LABEL_ROTATION_VECTOR;
        currentSensorId = 3;
        break;
    default:
        label = "UNKNOWN SENSOR TYPE!";
        break;
    }
    if (currentSensorId == -1)
        return;

    // Force set events frequency to value from config,
    // cause sensor events minimal frequency = 0.2 sec.
    timePassed[currentSensorId] = System.currentTimeMillis()
            - lastSensorEventTime[currentSensorId];
    if (timePassed[currentSensorId] < Config.SENSOR_DELAY_MILLISEC) {
        return;
    } else {
        lastSensorEventTime[currentSensorId] = System.currentTimeMillis();
    }

    if (this.pauseRecordingData || checkSDCardMemory())
        return;
    fileWriter.writeEvent(label, System.currentTimeMillis(), e.values);
}

public void writeEvent(String eventSource, long timestamp, float[] values) {
        Log.d(TAG, "writeEvent(); eventSource = " + eventSource);       


    if ( !this.fileExists ) createNewFile();        
    try {       
        String valuesString = eventSource + "\t" + String.format( "%d\t", timestamp);

        for (int i = 0; i < values.length; i++) {
            valuesString += String.format( "%f\t",values[i]);
            Log.d(TAG, "writeEvent(); values[" + i + "] = " + values[i]);
    }           
        buffWriter.append(valuesString + "\n");
    } catch (IOException e1) {              
          e1.printStackTrace();
          Log.d(TAG,"RECORDING EVENT TO FILE FAILED!");
    }               
}

Solution

  • There are two possibilities:

    1. The most probable one: You have an error in your code, for example, you are never resetting the variable or making addition to the values (for details, please read http://developer.android.com/guide/topics/sensors/sensors_motion.html).

    2. Your gravity sensor is broken (to check that, try on another device).

    For more help, please post your code, how are you accessing and managing the values read from the gravity sensor.

    EDIT:

    As I mentioned, there war an error in your code. The sensor read delay should be set to one of the possible options:

    int     SENSOR_DELAY_FASTEST     get sensor data as fast as possible
    int     SENSOR_DELAY_GAME        rate suitable for games
    int     SENSOR_DELAY_NORMAL      rate (default) suitable for screen orientation changes
    int     SENSOR_DELAY_UI          rate suitable for the user interface 
    

    And not to a custom value !!!

    Thank you for finding the solution.