Werte von Accelerometer und Roation_Vector passen nicht

  • Antworten:2
R1Snake
  • Forum-Beiträge: 1

24.06.2020, 19:09:48 via Website

Ich bin aktuell an meiner ersten App für mich selber dran und möchte oft mit dem Motorrad unterwegs bin mir ein paar Werte auf meinem Handy anzeigen lassen.

Das Handy ist an einer Halterung quer am Tacho befestigt.

Nun zu meinen Herausforderungen:

Ich möchte die G Kräfte und den Neigungswinkel vom Handy aktuell ganz einfach in einer Textview ausgeben lassen.

Hierzu habe ich mir bereits 2 Listener erstellt (Accelerometer und Rotation_Vector.

Accelerometer -> G-Kräfte

Hier habe ich im Sensorchanged event mir den Code von Google reinkopiert aber wenn ich meine Werte mit denen von anderen App vergleiche komme ich bei weitem nicht dran:

final double alpha = 0.8;

        // Isolate the force of gravity with the low-pass filter.
        gravity[0] = alpha * gravity[0] + (1 - alpha) * sensorEvent.values[0];
        gravity[1] = alpha * gravity[1] + (1 - alpha) * sensorEvent.values[1];
        gravity[2] = alpha * gravity[2] + (1 - alpha) * sensorEvent.values[2];

        // Remove the gravity contribution with the high-pass filter.
        linear_acceleration[0] = sensorEvent.values[0] - gravity[0];
        linear_acceleration[1] = sensorEvent.values[1] - gravity[1];
        linear_acceleration[2] = sensorEvent.values[2] - gravity[2];


        strfmt = new Formatter(new StringBuilder());


        if (linear_acceleration[0] >= 0) {
            strfmt = new Formatter(new StringBuilder());
            strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[0]);
            tv_gfront.setText(strfmt.toString());
            tv_gback.setText("0.00");
        }
        else {
            strfmt = new Formatter(new StringBuilder());
            strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[0] * -1);
            tv_gback.setText(strfmt.toString());
            tv_gfront.setText("0.00");
        }

        if (linear_acceleration[1] >= 0) {
            strfmt = new Formatter(new StringBuilder());
            strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[1]);
            tv_gleft.setText(strfmt.toString());
            tv_gright.setText("0.00");
        }
        else {
            strfmt = new Formatter(new StringBuilder());
            strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[1] * -1);
            tv_gright.setText(strfmt.toString());
            tv_gleft.setText("0.00");
        }

Beim Winkelsensor habe ich das Problem das die Werte ja von 0.00 bis 1.00 gehen, daher habe ich mir gedacht multipliziere ich den Wert * 180 und bekomme den Winkel raus.

Falsch gedacht.. Der Wert passt nicht und wenn ich mein Handy nur in Y Richtung drehe, dann passt sich auch der X Wert an ?!

        strfmt = new Formatter(new StringBuilder());
        strfmt.format(Locale.GERMANY, "%5.0f", sensorEvent.values[1]*180);
        tv_angleRight.setText(strfmt.toString());

Kann mir bei meinem Problem jemand aushelfen?

Kommentieren
Jokel
  • Forum-Beiträge: 1.530

25.06.2020, 11:50:45 via Website

Sorry falscher thread

— geändert am 25.06.2020, 11:52:27

Hilfreich?
Kommentieren