Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TSphere mithilfe MotionSensor drehen? (https://www.delphipraxis.net/192482-tsphere-mithilfe-motionsensor-drehen.html)

derseitzer 21. Apr 2017 18:50

TSphere mithilfe MotionSensor drehen?
 
Ich würde gerne meine TSphere mithilfe meines MotionSensors drehen und habe diesen code in einen Timer mit 100ms geschrieben:

procedure TFormMain.Timer1Timer(Sender: TObject);
begin
//Sphere1.RotationAngle.X := 360*MotionSensor1.Sensor.accelerationX;
//Sphere1.RotationAngle.Y := 360*MotionSensor1.Sensor.accelerationY;
//Sphere1.RotationAngle.Z := 360*MotionSensor1.Sensor.accelerationZ;
Dummy1.RotationAngle.X := 360*MotionSensor1.Sensor.accelerationX;
Dummy1.RotationAngle.Y := 360*MotionSensor1.Sensor.accelerationY;
Dummy1.RotationAngle.Z := 360*MotionSensor1.Sensor.accelerationZ;
end;

aber leider will das nicht so ganz..
Andere schreiben diesen code in den Motionsensor unter events in OnDataChanged aber dieses Ereignis gibt es bei mir nicht.. hat jemand eine Idee?

BrightAngel 21. Apr 2017 20:41

AW: TSphere mithilfe MotionSensor drehen?
 
Guten Abend :)

Ich bin vermutlich nicht die beste Hilfe, weil du das folgende bestimmt schon kennst, aber Embarcadero hat in der englischen Doku der Sensoren ein paar Beispiele verlinkt. Eines davon gibt es auf Sourceforge. In der uMain.pas gibt es ab Zeile 89 auch die selben Zugriffe die auch du verwendest :?

Ich habe das leider in Delphi auch noch nicht gemacht und kenne mich da nicht aus. Die machen das ja auch über einen Timer. Irgendwie fühlt sich für mich das aber auch nicht vollständig richtig an: Der Timer pollt ja dann immer nur die Werte. Vor allem verstehe ich einen Beschleunigungssensor so, dass er doch die momentane Beschleunigung misst. Wenn ich da zu selten messe (oder Daten abgreife), dann wird das doch ungenau, oder? :?:

Tut mir leid, dass ich keine größere Hilfe in diesem Fall bin... :oops:

[Edit]
Ich sehe jetzt erst: Benutzt du die Beschleunigung für den absoluten Winkel? Kann das sein, dass du die Kugel nicht nach der Beschleunigung, sondern nach absoluten Lagewinkeln drehen willst? Ist vielleicht gar nicht das Abgreifen, sondern die Auswertung selbst nicht ganz richtig? Siehst du als Effekt, dass sich deine Kugel immer nur kurz dreht, wenn du den Sensor anschuckst, aber dann wieder zurück in die Ausgangsposition "springt" sobald der Sensor ruhig liegt und keine Änderung stattfindet?

Embarcadero Dokumentationsauszug:
Zitat:

Stellt Informationen über Beschleunigung, Winkel, Status und Geschwindigkeit der Gerätebewegung bereit.
AccelerationX, AccelerationY und AccelerationZ geben die Beschleunigung in Gal für die X-, Y- und Z-Achse zurück.
AngleAccelX, AngleAccelY und AngleAccelZ geben die Winkelbeschleunigung in Grad pro Sekunde^2 (°/s²) für die X-, Y- und Z-Achse zurück.
Speed ermittelt die Geschwindigkeit des Gerätes in Meter pro Sekunde (m/s).
Motion ermittelt, ob das Gerät aktuell bewegt wird oder nicht.

Wikipedia schreibt im Übrigen zu Gal:
Zitat:

1 Gal = 1 cm/s² = 0,01 m/s², also etwa ein Promille der durchschnittlichen Erdbeschleunigung von ca. 9,81 m/s² ≈ 10 m/s² = 1000 Gal.
[/Edit]

Brighty

derseitzer 21. Apr 2017 21:06

AW: TSphere mithilfe MotionSensor drehen?
 
Guten Abend und danke für deinen Beitrag:)
Ich habe bis vor wenigen Tagen auch keine Ahnung gehabt also habe ich 8 Labels erstellt und sie mit diesen Variablen des Sensors verbunden, das Handy entwas bewegt und geschaut was mir die Labels für Werte ausgeben.. Nur die Ersten Drei die du hier unten siehst, haben mir konstant Wert gegeben alle anderen waren immer 0.

AccelerationX
AccelerationY
AccelerationZ
AngleAccelX
AngleAccelY
AngleAccelZ
Motion
Speed

Das war der Grund warum ich es so versucht habe.. und ich weiß nicht ganz wo hier der Haken ist :/

BrightAngel 21. Apr 2017 21:15

AW: TSphere mithilfe MotionSensor drehen?
 
Ich kann auch nur mutmaßen, aber vielleicht hat das etwas mit dem Sensor auf Hardwareebene zu tun? Beziehungsweise könntest du eine Beispielapp zum testen der Sensoren aus dem Appstore holen und dann mal schauen, was die liefern: Wenn die mit Java geschriebene App für diesen Sensor in diesem einen Handy mehr Werte liefert, dann liegt es vielleicht wirklich an der Delphikomponente. Wenn nicht, dann hast du deine Ursache. Vielleicht liefert dieser Sensor nur einen Teil der Daten, weil deine HardwareX nur einen Teil der Sensoren verbaut hat. Das wäre jedenfalls eine plausible Erklärung für die vielen Unveränderlichen. Hast du schonmal ein anderes Handy ausprobiert?

Zu der Beschleunigung: Wenn du nur die Beschleunigung hast und du deine Kugel damit anschubsen willst; also dass deine virtuelle Kugel "die selbe Beschleunigung erfährt wie dein physisch vorhandenes Handy", dann müsste man vermutlich die derzeitige Position der Kugel nebst deren derzeitigen Geschwindigkeit speichern und dann bei jeder Messung die Geschwindigkeit anhand der gemessenen Beschleunigung anpassen. Aber irgendwie müsste man eventuell noch der Kugel eine fiktive Masse geben, wenn ich mich da noch richtig verschwommen an die Formel erinnern sollte :oops:

[Edit]
Je länger ich darüber nachdenke und je mehr ich darüber lese, desto logischer erscheint mir, dass AccelerationX/Y/Z die Beschleunigungen im kartesischen Koordinatensystem sind (also wie sehr/heftig habe ich mein Handy entlang der X/Y/Z-Achse beschleunigt?) und die AngleAccelX/Y/Z die Beschleunigungen um die jeweiligen Achsen sind (also wie sehr/heftig habe ich mein Handy um dessen eigene X/Y/Z-Achse gedreht?). Und Motion und Speed sollten klar sein, jedoch scheint das Handy keinen Referenzpunkt zu haben (es nimmt nur die Unterschiede war, aber weiß nicht absolut wie schnell es grade ist...?!?).
[/Edit]

Brighty

Michael II 21. Apr 2017 22:51

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo

ich empfehle dir einen Blick in die Doku über "AvailableProperties" zu werfen. Damit kannst du abfragen, welche Fähigkeiten die in deinem Gerät eingebauten Sensoren haben.

Auf
https://sourceforge.net/p/radstudiod...ntationSensor/

gibt es ein sehr gutes Beispiel, dort unter

radstudiodemos-code-2024-branches-RADStudio_Berlin\Object Pascal\Multi-Device Samples\Device Sensors and Services\SensorInfo

Ich hab's rasch auf meinem alten Nexus10 gecheckt. Läuft gut.

Gruss und viel Spass beim Coden.

derseitzer 21. Apr 2017 23:24

AW: TSphere mithilfe MotionSensor drehen?
 
Michael: Ich werde mir die Dateien runterladen aber könntest du eventuell trotzdem erklären, was ich nun codieren muss damit es funktioniert

BrightAngel 21. Apr 2017 23:32

AW: TSphere mithilfe MotionSensor drehen?
 
Zitat:

Zitat von Michael II (Beitrag 1368641)
ich empfehle dir einen Blick in die Doku über "AvailableProperties" zu werfen. Damit kannst du abfragen, welche Fähigkeiten die in deinem Gerät eingebauten Sensoren haben.

Auf
https://sourceforge.net/p/radstudiod...ntationSensor/

Wieder was gelernt. Danke! :P

Michael II 22. Apr 2017 12:08

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

ich empfehle dir den Code:

radstudiodemos-code-2024-branches-RADStudio_Berlin\Object Pascal\Mobile Snippets\OrientationSensor

von
https://sourceforge.net/p/radstudiod...ntationSensor/

zu laden und zu testen.

Dieses Beispiel zeigt dir, wie du die Lage deines Geräts im Raum abfragen kannst. (TiltX, TiltY, TiltZ). (Ich nehme an, dass du das willst.)


Wenn du nun die Sphäre je nach Lage deines Tablets anzeigen willst, dann arbeite entweder

- mit der Eigenschaft TSphere.RotationAngle

ODER (wenn du zum Beispiel eine Szene mit mehreren Elementen (nicht nur TSphere) darstellst)

- du lässt die Sphäre fix und arbeitest mit einer Kamera (TCamera), welche sich je nach ermittelten Tilt Werten um deine Sphäre bewegt. In diesem Fall musst du die Position und den Rotationswinkel deiner Kamera aufgrund der TiltWerte und dem von dir gewünschten Abstand (Kamera,Sphäre¦Szene) berechnen.


Gruss und viel Spass beim Coden...

derseitzer 24. Apr 2017 09:59

AW: TSphere mithilfe MotionSensor drehen?
 
vielen dank michael2!
Bei mir sind die Tilt-Werte immer 0.. die Heading werte allerdings nicht :/ warum?

himitsu 24. Apr 2017 10:05

AW: TSphere mithilfe MotionSensor drehen?
 
Zitat:

Eines davon gibt es auf Sourceforge.
Eigentlich sind das alle.
Wenn man sowieso die neuste Delphi-Version hat, kann man damit das Demo-Verzeichnis von Delphi aktualisieren.

Nur bei älteren Delphis muß man etwas aufpassen, da dort eben immer alles ans aktuellste Delphi angepasst wird und dann nicht immer alles in allen älternen Versionen mehr funktioniert.

Es wäre zu praktisch, wenn Emba da direkt beim DelphiSetup das SVN mit installiert (also die SVN-Kontrolldateien im Demoverzeichnis)

derseitzer 24. Apr 2017 10:20

AW: TSphere mithilfe MotionSensor drehen?
 
Dummy1.RotationAngle.X := 8*OrientationSensor1.Sensor.HeadingX;
Dummy1.RotationAngle.Y := 8*OrientationSensor1.Sensor.HeadingY;
Dummy1.RotationAngle.Z := 8*OrientationSensor1.Sensor.HeadingZ;

Dieser Code funktioniert allerdings liegt der Wertebereich der Headingwerte irgendwo ziwschen -45 und 45 (glaube ich zumindest).
Deshalb habe ich mal aus Testzwecken die Werte mal 8 genommen. Nun fiel mir beim Testen auf, dass meine Tsphere extrem empfindlich reagiert und ich die Werte irgendwie Runden sollte..

Michael II 24. Apr 2017 10:40

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

wenn du nicht rausfindest in welchem Bereich die H Werte liegen, dann merk doch im Programm min und max ;-).

Und zur Multiplikation mit 8. Wenn die Werte effektiv zwischen -45 und 45 liegen und du mit 8 multiplizierst, dann müssen wir Werte im Bereich -360..360 (Grad) befürchten. Ich habe grad keine Zeit nachzusehen, wie die H Werte definiert sind, aber 8 ist etwas viel...

https://developer.android.com/guide/..._overview.html

Gruss

Michael II 24. Apr 2017 12:00

AW: TSphere mithilfe MotionSensor drehen?
 
Zitat:

Bei mir sind die Tilt-Werte immer 0.. die Heading werte allerdings nicht :/ warum?
Hast du mal gecheckt, ob dir dein Gerät den Wert z.V. stellt?

Das wird in deinem Beispiel hier geprüft:

Delphi-Quellcode:
procedure TOrientationSensorForm.OrientationSensor1SensorChoosing(
  Sender: TObject; const Sensors: TSensorArray; var ChoseSensorIndex: Integer);

...
...
TCustomOrientationSensor.TProperty.TiltX in TCustomOrientationSensor(Sensors[I]).AvailableProperties

Wenn die Eigenschaft nicht z.V. steht, dann hol dir rasch ein neues Gerät :-D.

Wenn die Eigenschaft Tilt vorhanden ist, dann solltest du wohl einen Blick in die Umrechnung "Vektor > Winkel" werfen (ich nehme an, du spielst mit einem Android Gerät), also in die unit System.Android.Sensors :

Delphi-Quellcode:
function TAndroidNativeRotationSensor.GetDoubleProperty(Prop: TCustomOrientationSensor.TProperty): Double;
eventuell in diese Zeile:

Delphi-Quellcode:
Len := 1 - sqX - sqY - sqZ;

Gruss

Michael II 25. Apr 2017 23:18

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

du hast ja wahrscheinlich mittlerweile auch gesehen, dass die "Heading Werte" Daten zum Magnetfeld liefern - und "roh" für deine Aufgabe wohl nicht geeignet sind.

Es gibt übrigens coole Tools, mit welchen du rasch checken kannst, welche Sensoren in deinem Android Gerät eingebaut sind, zum Beispiel "Sensor Kinetics":

https://play.google.com/store/apps/d...kinetics&hl=de

derseitzer 28. Apr 2017 13:09

AW: TSphere mithilfe MotionSensor drehen?
 
Mittlerweile geht mein projekt voran, jedoch hab ich einige Probleme, bei denen mir eventuell jemand helfen könnte?:/

1. Wenn ich meine Tsphere (bzw dummy) mit den Lagesensoren (die mit einem Timer immer wieder abgerufen werden) drehe, sieht das sehr ruckelig aus.. ich würde mir wünschen, dass das eher "fließend" aussieht.. ist das irgendwie möglich? es gibt ja eine Floatanimation.. vielleicht mit der???
2. selbst wenn ich mein Handy nicht bewege, bewegt sich alles ein bisschen - deshalb habe ich meine Werte gerundet, damit die Kommastellen der Sensorwerte verschwinden.. Es ist besser geworden, aber nicht weg:/ sollte ich mal auf 5er stellen runden? also nur 10 15 20 25... zulassen?

Michael II 28. Apr 2017 13:52

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer,

hast du dir die von mir empfohlene (oder eine andere) App geholt um zu prüfen, was alles an Sensoren in deinem Handy vorhanden ist?

Grund: Wahrscheinlich könntest du einen geeigneteren Sensor verwenden für deine App.

Der von dir verwendete "Magnetometer Sensor" gibt dir - wenn ich mich nicht irre - den Vektor [kartesisches Koordiantensystem, nicht Polarkoordinaten] auf den magentischen Pol zurück. Genauer natürlich den Vektor auf die Summe aller Vektoren, welche auf die magnetischen Dinge deiner Welt zeigen - Kühlschrankmagnet mit eingeschlossen ;-)].

Du hast also viele Einflüsse inkl. Messprobleme...

Wenn du echt diesen Vektor nutzen willst, dann wäre evt. eine Umrechnung der Heading Werte in Polarkoordinaten OK.

Runden bringt nichts, du holst dir damit noch mehr Probleme an Bord. Stell dir vor, du rundest immer auf ganzzahlige 5er. Aus dem Sensor ermittelst du Daten 2.4, 2.4, 2.5, 2.4, 2.5, dann rechnest du um auf 0, 0, 5, 0, 5. Und damit springt dein Modell viel stärker, als wenn du die "echten" Werte nutzen würdest.

Was du tun könntest:
Verbessere den Code und Suche im Web nach Glätten/Filtern/Rauschen
Schau noch einmal ins Codebeispiel von Emba. Du siehst, dass dort die Werte schlecht abgegriffen werden (Android). Du rufst den X Wert ab, das Programm frisst nun alle Sensorevents bis zum letzten und nimmt diesen Messwert [Tipp:greife auch alle anderen Events ab], nun fragst du Y ab und das Programm frisst wieder alle Sensorevents und nimmt den letzten Wert. Z genau gleich. Wenn du X,Y,Z rasch hintereinander abfragst wie im Democode, dann liest die Demo den X Wert aus SensorEvent/Messung n, Y aus n+1 und Z aus n+2. Die Elemente x,y,z des Vektors v=(x,y,z) stammen also aus drei voneinander verschiedenen Messungen... nicht gut.

> Greife also direkt alle Vektoren aus dem Sensorevent ab. Also einerseits x,y,z aus der gleichen Messung und alle Messungen.
> Rauschen aus Messwerten entfernen. Glätten/Filtern/Rauschen



https://de.wikipedia.org/wiki/Erdmagnetfeld

derseitzer 29. Apr 2017 18:11

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo Michael,

Ja das habe ich und ich habe folgende Ergebnisse: Accelerometer, Gyroskop, magnetometer, Schwerkraftsensor, Lineare acceleration, rotations sensor, Umgebungstemp. Proximity Sensor, Licht Sensor, Drucksensor, relative feuchte-sensor.. Ich meine ich habe ein S7 Edge.. da sollte schon alles mögliche vorhanden sein..

ich benutze nun nicht mehr den Motion, sondern den Orientationsensor mit folgenden Befehlen:

Dummy1.RotationAngle.X := round(4*OrientationSensor1.Sensor.HeadingY);
Dummy1.RotationAngle.Y := round(4*OrientationSensor1.Sensor.HeadingX);

(Man merke das X und Y vertauscht sind, was beabsichtigt ist, da im Handy die Koordinaten anders definiert sind..)
Somit funktioniert die App eigentlich bis auf das kleine ruckeln. Durch das "round" ist es damit auch schon besser geworden, aber dieses flüssige Drehen fehlt mir trotzdem etwas..

Ich werde mal versuchen ob ich die Werte speichern kann - in die TfloatAnimation reinsetze - und dann ein fließendes Ergebnis bekomme:)

Michael II 29. Apr 2017 19:34

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

du musst dir bewusst sein, dass du bei den Headingwerten das "Magnetometer" abfragst.

Wie erwähnt: Du erhältst einen Vektor v auf den magnetischen Nordpol. Die Werte v=(x,y,z)t haben nichts mit Winkeln zu tun. Diese Winkel müsstest du zuerst ermitteln. [Beachte: Die Schar aller Abbildungen A: R^3->R^3, welche (0,0,1) in norm(v) und e1'=A(1,0,0)t, e2'=A(0,1,0)t je in normierte Vektoren überführt, so dass die Bilder wieder ein Dreibein mit gleicher Orientierung bilden ist von Dimension 1.]

Würdest du nicht besser das Accelerometer hinzuziehen? Es ist für deinen Zweck etwas einfacher in der Handhabung, weil dieser Vektor (Gravitation) orthogonal zur Waagrechten steht.

derseitzer 29. Apr 2017 20:00

AW: TSphere mithilfe MotionSensor drehen?
 
Das Accelerometer gibt mir keine Werte.. nur 0.. ich habe so abgefragt:
Label1.Text := FloatToStr(Zahl*MotionSensor1.Sensor.accelerationX ); (für Zahl alles mögliche eingesetzt)

Da ich nur 0 zurückbekommen habe habe ich eben anderes versucht.. das alles hat auch nicht funktioniert:
Label4.text := FloatToStr(MotionSensor1.Sensor.AngleAccelX);
Label7.text := FloatToStr(MotionSensor1.Sensor.Motion);
Label8.text := FloatToStr(MotionSensor1.Sensor.Speed);

was eben funktioniert hat war das mit dem orientationsensor.. :/

Michael II 29. Apr 2017 21:07

AW: TSphere mithilfe MotionSensor drehen?
 
Das ist komisch. Nur der "abgeleitete* Acceleration Vektor" [*also jener Vektor, welcher dir Änderungen des Acceleator Vektors anzeigt] sollte dir Nullen anzeigen, wenn du dein Gerät nicht bewegst.

Wenn du mit der Android App checkst: Hast du unter Acceleration nachgeschaut? Zeigt dir die App dort auch nur Nullen an?

derseitzer 29. Apr 2017 21:12

AW: TSphere mithilfe MotionSensor drehen?
 
Ja genau ich checke das alles immer auf dem handy :/

borstenei 29. Apr 2017 21:31

AW: TSphere mithilfe MotionSensor drehen?
 
Lade Dir aus dem PlayStore die kostenlose App "Phone Tester " runter, starte die App und überprüfe ob die entsprechenden Sensoren auch Daten liefern. Falls nicht das Handy einfach mal neu starten.
Ich hatte in einer selbstgeschrieben App auch die Probleme das die Beschleunigungssensoren immer 0 ausgegeben haben , nach einem Handy Neustart war das dann wieder ok.

Michael II 30. Apr 2017 12:53

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

ja eine Animation ist sicher gut und wie erwähnt eventuell wäre ein Filtern der "Ungenauigkeiten" ok.

Und noch einmal: Das Abgreifen der Werte X,Y,Z ist in den Emba Beispielen sehr schlecht "gelöst". Wenn du zuerst X abfragst, dann Y, dann Z, dann stammen diese drei Werte nicht unbedingt aus der gleichen Messung [nicht aus dem gleichen SensorEvent].

Ich habe rasch mit meinem Nexu10 getestet: Wenn ich die Werte X,Y,Z alle 0.1sec der Reihe nach abgreife, also zum Beispiel
Code:
... := OrientationSensor1.Sensor.TiltX;
... := OrientationSensor1.Sensor.TiltY;
... := OrientationSensor1.Sensor.TiltZ;
dann stammen diese Werte bei meinem Gerät nur in ca. 22%* aller Fälle aus der gleichen Messung. Wenn du also das Gerät bewegst, dann ist dieser Umstand der weit grösste Fehlerfaktor. :warn: : 78%* aller ermittelten Lagevektoren sind dann schlicht falsch. Eine Drohne oder ähnliches Gerät solltest du mit solchen Daten nicht steuern... wenn du's doch tun willst, dann :duck:

[*Der ermittelte Wert hängt natürlich ab vom Timerintervall und von der Frequenz, mit welcher des Sensor Daten z.V. stellt.]

Besser: Die Vektoren aus dem SensorEvent auslesen. Dann stammen X,Y,Z aus der gleichen Messung.

Ein Beispiel für diese falsche Art der Abfrage: Wenn du einen Sensor hast, welcher die Lage im R^2 ermitteln kann und sich dein Gerät entlang y=x bewegt, dann durchläuft dein Gerät Positionen (t,t), t aus R. Dein Sensor ermittelt korrekt ..., m(n)=(3.232,3.232), m(n+1)=(6.902,6.902),.... wenn nun in deinem Programm in 78% aller Fälle der Wert für x aus Messung n stammt und der Wert von y aus m(n+1) (oder gar einer späteren Messung), dann hättest du mit deinem Programm in 78% aller Fälle eine komplett falsche Position (3.232,6.902) im Schilf ermittelt, obschon der Sensor absolut korrekte Werte meldet. [Das führt natürlich zu Ruckeln... hoffentlich werten Tesla und Co solche Dinge anders aus...]

derseitzer 2. Mai 2017 00:13

AW: TSphere mithilfe MotionSensor drehen?
 
vielen dank für die Antworten wieder mal:)
ich werde mein handy morgen neustarten und es wieder versuchen.
Okay vielen Dank dafür, aber das würde mich zu meinem früheren Problem führen: Ich habe das OnChange Sensorevent nicht :/ ich weiß nicht wieso.. aber ich habe es nicht :'(

Michael II 2. Mai 2017 11:04

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

mit dem fehlenden OnChange bist du nicht allein. Es gibt sicher Cracks hier, welche dir einen Einzeiler für dieses Problem z.V. stellen können. :-D


Wenn du in die System.Android.Sensors.pas schaust, dann siehst du, dass die SensorEvents in FNativeEventQueue gespeichert und hier abgefragt werden:

Delphi-Quellcode:
function TNativeSensor.LastValue: ASensorEvent;
var
  SensorEvent: ASensorEvent;
begin
  while ASensorEventQueue_getEvents(FNativeEventQueue, @SensorEvent,1) > 0 do
    FLastSensorEvent := SensorEvent;
  Result := FLastSensorEvent;
end;
[Du musst also eigentlich nur danach suchen, wo die Events in die Queue gelegt werden, falls du je nach Sensor sehr viele Events in deiner eigenen Eventschlange haben möchtest.]

Du könntest "quick and very dirty" [und natürlich nicht zu empfehlen, ausser emba übernimmt deine Anpassungen für weitere Delphis ;-)] die unit System.Android.Sensors.pas in dein Projektverzeichnis kopieren und diese dann für deine Zwecke anpassen. Wie bereits erwähnt: Wenn du Anpassungen an der unit vornimmst, dann lies Heading, Tilt und Co jeweils aus dem gleichen Sensorevent. Dann machen die ermittelten Werte mehr Sinn.


Und wenn du fertig bist mit :coder:, dann poste deine System.Android.Sensors.pas hier :thumb:.



Es gibt doch sicher User hier, welche mit Android Apps Drohnen und Co steuern? Wie lest ihr die Sensordaten aus?

derseitzer 10. Mai 2017 17:32

AW: TSphere mithilfe MotionSensor drehen?
 
Habe mir Projekte im Internet mit "Gyroscope" gedownloadet.. z.B. Alieninvaders, wo mithilfe des Motionsensors das Raumschiff bewegt werden soll.. funktioniert bei mir auch nicht! was mach ich denn falsch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz