Ivo Queiroz
Ivo Queiroz

Reputation: 21

How to generate a graph with accelerometer values?

i´m new to android and i´m developping an app to study more about some mobile sensors. First i´m using the accelerometer.

First I created a layout with two buttons (start and finish), to get the accelerometer values.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ivope.sensormanipulator.SensorManipulator">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_x="50dp"
        android:layout_y="46dp"
        android:text="Accelerometer Signal Analyser"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.197"
        android:layout_below="@+id/graph"
        android:layout_alignRight="@+id/btnStop"
        android:layout_alignEnd="@+id/btnStop"
        android:layout_marginTop="71dp" />

    <com.jjoe64.graphview.GraphView
        android:layout_width="match_parent"
        android:layout_height="200dip"
        android:id="@+id/graph"
        android:layout_gravity="center"
        />


    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_x="75dp"
        android:layout_y="167dp"
        android:background="@color/green"
        android:clickable="true"
        android:text="Start"
        tools:layout_editor_absoluteX="56dp"
        tools:layout_editor_absoluteY="231dp"
        android:layout_below="@+id/textView"
        android:layout_alignLeft="@+id/textView"
        android:layout_alignStart="@+id/textView"
        android:layout_marginTop="75dp" />

    <Button
        android:id="@+id/btnStop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="220dp"
        android:layout_y="167dp"
        android:background="@color/red"
        android:clickable="true"
        android:text="Finish"
        tools:layout_editor_absoluteX="242dp"
        tools:layout_editor_absoluteY="231dp"
        android:layout_marginRight="47dp"
        android:layout_marginEnd="47dp"
        android:layout_alignBaseline="@+id/btnStart"
        android:layout_alignBottom="@+id/btnStart"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />  
</RelativeLayout>

then on main class, i implemented the SensorManager and the onResume, onPause and onSensorChanged functions. Also implemented the onclick functions start(running onResume) and finish(running onPause). It suppose to give me 3 values: ax, ay and az. With these 3 values i want to generate a graph. I tried with android GraphView, my app build succesfully but it does not run. Can some one please help me? is the way i´m trying to get the accelerometer values right? how can i generate a graph with these values?

java code:

package com.example.ivope.sensormanipulator;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;

import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;

public class SensorManipulator extends AppCompatActivity implements SensorEventListener {

    private final SensorManager mSensorManager;
    private final Sensor mAccelerometer;
    double ax, ay, az, y;

    public SensorManipulator() {
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }

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

        GraphView graph = (GraphView) findViewById(R.id.graph);
        LineGraphSeries<DataPoint> series = new LineGraphSeries<>();
        for (int i = 0; i < 5; i++){
            ax = ax + 0.1;
            y = Math.sin(ax);
            series.appendData(new DataPoint(ax, y), true, 5);
        }
        graph.addSeries(series);

        Button btnStart = (Button) findViewById(R.id.btnStart);
        Button btnStop = (Button) findViewById(R.id.btnStop);

        btnStart.setOnClickListener(new OnClickListener() {

                                        @Override
                                        public void onClick(View view) {
                                        onResume();
                                        }
                                    }
        );

        btnStop.setOnClickListener(new OnClickListener() {

                                        @Override
                                        public void onClick(View view) {
                                            onPause();
                                        }
                                    }
        );


    }

    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    }

    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }

    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            ax = event.values[0];
            ay = event.values[1];
            az = event.values[2];
        }
    }

}

Upvotes: 0

Views: 3733

Answers (1)

Subarata Talukder
Subarata Talukder

Reputation: 6331

Real time android chart using accelerometer values. Pleas check Android-Real-Time-Chart on my GitHub repository. This chart has been created with Android GraphWiew library.

I hope it will be fulfill your(lvo Queiroz) requirements. If any need, please let me comment for further discussion.

Upvotes: 1

Related Questions