Accelerometer daten umwandeln

Diskutiere Accelerometer daten umwandeln im Mobile Geräte Forum; Hallo bräuchte mal eure Hilfe. Ich bin Anfänger und versuche momentan, mit hilfe vom Accelerometer einen Winkelmesser zu erstellen. Nun meine...

  1. brilzi89
    brilzi89 Mitglied
    Hallo bräuchte mal eure Hilfe.
    Ich bin Anfänger und versuche momentan, mit hilfe vom Accelerometer einen Winkelmesser zu erstellen. Nun meine Frage, wie kann ich die Werte vom Accelerometer, in Grad umwandeln?

    Kann mir da einer Helfen bitte.

    Danke im vorraus. :)
     
  2. Wenn du jetzt Java lernen möchtest, dann sichere dir hier unseren Java-Videokurs heute zum Sonderpreis (hier klicken!)
  3. Lucaaa
    Lucaaa Mitglied
    Code (Java):

    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
          gravity = event.values;
        if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
          geomagnetic = event.values;
        if (mGravity != null && geomagnetic != null) {
          float R[] = new float[9];
          float I[] = new float[9];
          boolean success = SensorManager.getRotationMatrix(R, I, gravity, geomagnetic);
          if (success) {
            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);
            myAzimut = orientation[0]; // myAzimut is The geomagnetic inclination angle in radians.
          }
       }
    }
     
    Quelle: https://stackoverflow.com/questions/39190283/accelerometer-values-to-degrees
     
  4. brilzi89
    brilzi89 Mitglied
    danke Lucaaa hab das auch gefunden, aber funktioniert bei mir nicht :/
     
  5. Lucaaa
    Lucaaa Mitglied
    Was genau?
     
  6. brilzi89
    brilzi89 Mitglied
    der wert am Handy geht trotzdem nur von 0 bis 10, wenn ich das Handy um 45grad drehe :/

    hier mal mein Code:
    Code (Java):
    public class WinkelmessActivity extends AppCompatActivity {

        private SensorManager sensorManager;


        // Gravity rotational data
        private float gravity[];
        // Magnetic rotational data
        private float magnetic[]; //for magnetic rotational data
        private float accels[] = new float[3];
        private float mags[] = new float[3];
        private float[] values = new float[3];

        // azimuth, pitch and roll
        private float azimuth;
        private float pitch;
        private float roll;

        TextView xValue, zValue, yValue;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_winkelmess);


            SensorManager sManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

            sManager.registerListener(mySensorEventListener, sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
            sManager.registerListener(mySensorEventListener, sManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_NORMAL);

            xValue = (TextView) findViewById(R.id.xValue);
            zValue = (TextView) findViewById(R.id.zValue);
            yValue = (TextView) findViewById(R.id.yValue);


        }

        private SensorEventListener mySensorEventListener = new SensorEventListener() {
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }

            public void onSensorChanged(SensorEvent event) {
                if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
                    accels = event.values;
                if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
                    mags = event.values;
                if (mags != null && accels != null) {
                    gravity = new float[9];
                    magnetic = new float[9];
                    boolean success = SensorManager.getRotationMatrix(gravity, magnetic, accels, mags);
                    if (success) {
                        float orientation[] = new float[3];
                        SensorManager.getOrientation(gravity, orientation);
                         azimuth = orientation[0]; // myAzimut is The geomagnetic inclination angle in radians.

                        azimuth = orientation[0];
                        Math.toDegrees(azimuth);

                        xValue.setText("X: " + event.values[0]);

                    }
                }
            }

        };
    }
     
  7. Lucaaa
    Lucaaa Mitglied
    Ich habe keine Ahnung aber vielleicht geht das ja:
    45° = 10 ?
    Was wenn:
    10 *9/2
    Dann kommt da 45 raus.
    Ich kenne mich damit nicht aus was da für werte zurück kommen
     
  8. mihe7
    mihe7 Bekanntes Mitglied
    Vielleicht solltest Du nicht event.values[0] sondern azimuth ausgeben und vielleicht solltest Du auch den Rückgabewert von Math.toDegrees verwenden...
     
  9. brilzi89
    brilzi89 Mitglied
    meinst du das so mihe7?

    Code (Java):
    xValue.setText("X: " + Math.toDegrees(azimuth));
     
  10. brilzi89
    brilzi89 Mitglied
    habs jetzt so hinbekommen:

    mal ne andere Frage. wenn ich das Smartphone senkrecht nach oben halte, bekomme ich den Wert 0 , wenn ich jetzt links oder rechts gehe geht der Wert nach oben, alles normal soweit.
    Wie bekomme ich es hin das wenn das Smartphone senkrecht nach oben steht, der Wert bei 90 beginnt und nach runter geht.


    Code (Java):
      private SensorEventListener mySensorEventListener = new SensorEventListener() {
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }

            public void onSensorChanged(SensorEvent event) {
                switch (event.sensor.getType()) {
                    case Sensor.TYPE_MAGNETIC_FIELD:
                        mags = event.values.clone();
                        break;
                    case Sensor.TYPE_ACCELEROMETER:
                        accels = event.values.clone();
                        break;
                }

                if (mags != null && accels != null) {
                    gravity = new float[9];
                    magnetic = new float[9];
                    SensorManager.getRotationMatrix(gravity, magnetic, accels, mags);
                    float[] outGravity = new float[9];
                    SensorManager.remapCoordinateSystem(gravity, SensorManager.AXIS_X, SensorManager.AXIS_Z, outGravity);
                    SensorManager.getOrientation(outGravity, values);

                    azimuth = values[0] ;
                    pitch = values[1] ;
                    roll = values[2] ;
                    mags = null;
                    accels = null;

                    xValue.setText("X: " + Math.toDegrees(azimuth));
                    yValue.setText("Y: " + Math.toDegrees(pitch));
                    zValue.setText("Z: " + Math.toDegrees(roll));

                }

            }
        };
    }
     
     
    Zuletzt bearbeitet: 22. Nov. 2018
  11. Lucaaa
    Lucaaa Mitglied
    Also ich hatte vor einiger Zeit mal was mit LibGDX gemacht. Da war da so, dass Ich 0 hatte, wenn das Handy senkrecht steht, und der Wert beim Linkskippen negativ, und beim Rechtskippen positiv wird. Es gibt da auch 3 Drehachsen schau doch mal in der Dokumentation nach.
     
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Accelerometer daten umwandeln - Ähnliche Themen

SMA Signal Magnitude Area of an accelerometer
SMA Signal Magnitude Area of an accelerometer im Forum Java Basics - Anfänger-Themen
Accelerometer ohne Activity
Accelerometer ohne Activity im Forum Mobile Geräte
accelerometer
accelerometer im Forum Mobile Geräte
Datenbank in jTable Laden
Datenbank in jTable Laden im Forum Java Basics - Anfänger-Themen
Datenbank verbindung
Datenbank verbindung im Forum Java Basics - Anfänger-Themen
Thema: Accelerometer daten umwandeln