• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Spiel erst bei GPS-Empfang starten

-Waldmeister-

Geocacher
Hey,

ich bin zur Zeit dabei, einen WIG zu programmieren, bei dem es wichtig ist, dass das GPS-Gerät des Spielers bereits von Anfang an über GPS-Empfang verfügt.
So weit kein Problem.
Die GPS Genauigkeit lässt sich ja mit Player.PositionAccuracy:GetValue('m') abfragen.


Bei meinem alten Nokia 6110 ist es jedoch so, dass wenn es noch keinen GPS-Empfang hat, den letzten gespeicherten(!) Wert der GPS-Genauigkeit ausgibt.
Da dieses Handy ca 3-5 Min braucht bis es GPS-Empfang hat und es ja bis dahin nicht mit dem Spiel losgehen soll, habe ich folgendes in Urwigo gemacht:


Die GPS-Genauigkeit wird abgefragt, dann kommt eine Meldung mit einem Text und dann wird die GPS-Genauigkeit noch einmal abgefragt.
Die 2 Abfragen werden dann miteinander verglichen.
Wenn sie unterschiedlich sind, geht es weiter im Spiel.
Sollte das GPS keinen Empfang haben (also die 2 Werte der abgefragten GPS-Genauigkeiten gleich sein), wiederholt sich der Vorgang noch einige male.
Diese Vorgehensweise funktioniert eigentlich ganz gut, da die Werte beim openwig player auf dem nokia 6110 (auch mit Garmin Oregon 450 und einem nokia N8 getestet) bedingt durch die vielen Nachkommastellen, immer anders sind.


Leider habe ich kein Android oder Iphone.
Als jedoch neulich das Tomtom-Carkit als Schnäppchen zu haben war, hab ichs bestellt, um es zusammen mit meinem alten Ipodtouch (2g) als WIG-Testmaschine zu nutzen.
Nur ist es jetzt so, dass die GPS-Genauigkeit nur einen ganzzahligen Wert und keine Nachkommastellen hat.
Jetzt funktioniert also leider die oben beschriebene Vorgehensweise nicht mehr.


Um herauszufinden ob das nur an dem TomTom Carkit liegt wollt ich fragen ob jemand das Cartridge auf seinem Iphone, Android Handy oder Garmin Colorado oä testen könnte?

Oder vllt hat jemand eine bessere Idee um zu prüfen, ob GPS-Empfang vorhanden ist?

Im Anhang is ein Test-Cartridges und die dazugehörige Urwigo-Datei

Zum Test-Cartridge:
-Das Cartridge zeigt beim Starten die aktuelle GPS-Genauigkeit (beim Garmin Oregon 450 immer 0 )
-"Aktuelle GPS Genauigkeit" zeigt die aktuelle GPS Genauigkeit
-und "Start" zeigt den Vorgang wie es in meinem original Cartridge wäre (nach der Meldung "Und los gehts" würde ein weiterer Gegenstand erscheinen)


Interessante Fragen (vllt auch für andere Programmierer iwann mal?) wären :

1. Welche GPS-Genauigkeit gibt das GPS gleich nach dem Starten des Cartridges aus?
2. Ändern sich die Werte der aktuellen GPS-Genauigkeiten mit jeder Abfrage? / Wie schnell (innerhalb Sekunden?) ändern sie sich? / Sind die Werte nur Ganzzahlen oder mit Kommazahlen?
3. Welche GPS-Genauigkeit zeigt das GPS-Gerät wenn es neu gestartet wurde und keinen Empfang hat (zb im Keller) ?

Vielen Dank für jeden Testversuch und jede Antwort :)
 

Anhänge

  • GPSFixtest.zip
    13 KB · Aufrufe: 28

jonny65

Geomaster
Ich kann nur mit dem Oregon testen, wird dir ja nix nützen.
Hat ein Gerät KEINEN barometrischen Höhenmesser, könnte man auch über die Höhe gehen mit :
Player.ObjectLocation.altitude:GetValue("m")
Ist diese 0 (außer am Strand ;-) ) ist kein Empfang vorhanden. Das verwendet ja auch der Emulatorschutz. Wie bekommt man die aktuellen Koords eigentlich ? Wäre auch ne Idee eine Koordinatenänderung herzunehmen. Diese sollte bei Empfang immer vorhanden sein, entweder durch Bewegung (logisch) oder durch Sprünge in der Genauigkeit.
 

jonny65

Geomaster
Ich hab mal was probiert, was mit dem Oregon dann auch so funktioniert. Alle 3 Sekunden die Höhe und die Genauigkeit abfragen. 3 Sekunden sind sinnvoller als 1, denn hier hatte ich auch mal gleiche Werte trotz Empfang. Spricht dafür daß die Aktualisierung nicht kürzer ist als 1 Sekunde. Bei 3 Sekunden hab ich immer Abweichungen. Jetzt den Wert der Genauigkeit vergleichen mit dem nächsten Wert. Wenn gleich, dann ist kein Empfang vorhanden. Noch eine ODER Verknüpfung mit der Höhe. Wenn die 0 ist -> kein Empfang.
Ist die ODER Abfrage true, kann man den Timer stoppen und weitere Events auslösen. In dem Beispiel kommt halt "GPS Empfang ist : OK/Nicht OK" (siehe Bild)

Problem nebenbei : Wie schreibt man Zeilenumbrüche in eine Messagebox ?
Funktioniert wenn man einfach 2 CRs als String in der Verkettung eingibt (siehe Bild unten) und die anschließend complilierte GWC hat diese Formatierung auch. Speicher ich die Urwigo Datei ab und öffne sie wieder, sind die CRs aber draussen !?
"\n" als CR geht nicht, erscheint in der Messagebox dann auch als "\n".

Im Zip die spielbare GWC (Garmin), die die Formatierung enthält, aber wenn man die Urwiga Datei öffnet, is halt der Zeilenumbruch weg. :irre:
 

Anhänge

  • gpstest.zip
    6,7 KB · Aufrufe: 17
  • gpstest.jpg
    gpstest.jpg
    63,3 KB · Aufrufe: 513
OP
W

-Waldmeister-

Geocacher
Eine echt gute Lösung
Vielen Dank :)

Mit Timern hatte ich mich erst wenig beschäftigt
Deswegen hab ichs mit einer Nachricht als Pause zwischen den 2 Abfragen probiert.
Siehe erstes urwigo file in GPSFixtest.zip

Am IpodTouch2G mit Tomtomcarkit bleibt die Genauigkeit konstant auf 10 Meter
Sollte es bei den Iphones auch so sein (was ich jedoch nicht glaube) dann muss die Abfrage noch leicht geändert werden.
Breiten und Längengrad lassen sich so abfragen: Player.ObjectLocation.latitude und Player.ObjectLocation.longitude
Vllt werde ich anstatt der Genauigkeitsangabe lieber diese Wert abffragen

Beim Wherigo Programm (v1.3.3) am Ipod ändert sich die Anzeige der Messwerten nur, wenn man ins Menü und dann wieder zu den Messwerten geht :(
Mit OpenWig und dem Garmin sieht man die Änderungen sofort am Bildschirm.


Des mit dem Zeilenumbruch is seltsam ja
Am Pc funktionierts mit <BR>
Am Garmin jedoch nicht ...

Vllt liest dies hier zufällig jmd der ein Iphone hat, und bei der WIG Datei von Jonny65 testen möchte, wie sich die GPS-Genauigkeit ändert und ob sie Nachkommastellen hat? Würd mich freun :)
 

jonny65

Geomaster
-Waldmeister- schrieb:
Am IpodTouch2G mit Tomtomcarkit bleibt die Genauigkeit konstant auf 10 Meter

Wenn KEIN Empfang da ist, wird 10m angezeigt ???

-Waldmeister- schrieb:
Breiten und Längengrad lassen sich so abfragen: Player.ObjectLocation.latitude und Player.ObjectLocation.longitude

Also die Funktion liefert nix...naja 0 halt und zwar immer...fehlt da nicht ein GET ?

-Waldmeister- schrieb:
Beim Wherigo Programm (v1.3.3) am Ipod ändert sich die Anzeige der Messwerten nur, wenn man ins Menü und dann wieder zu den Messwerten geht :(

Sicher ? Das wär allerdings kacke, sowas wird nicht selten angewendet denk ich mal. Eine sich ändernde Item Description, ideal um z.b die Restzeit anzuzeigen.
 
OP
W

-Waldmeister-

Geocacher
Jonny65 schrieb:
-Waldmeister- schrieb:
Am IpodTouch2G mit Tomtomcarkit bleibt die Genauigkeit konstant auf 10 Meter
Wenn KEIN Empfang da ist, wird 10m angezeigt ???
Nein, wenn er kein Empfang hat, gibt er 0 aus
Und wenn er Empfang hat, gibt er genau 10 aus

Jonny65 schrieb:
-Waldmeister- schrieb:
Breiten und Längengrad lassen sich so abfragen: Player.ObjectLocation.latitude und Player.ObjectLocation.longitude
Also die Funktion liefert nix...naja 0 halt und zwar immer...fehlt da nicht ein GET ?
Also bei mir funktionierts schon
Häng mal meine veränderte urwigo-Datei an.
Warum funktioniert das Timer Beenden nicht im Timer selbst?
Zb nach dem Setzen von GPSEmpfang="OK"?

Jonny65 schrieb:
-Waldmeister- schrieb:
Beim Wherigo Programm (v1.3.3) am Ipod ändert sich die Anzeige der Messwerten nur, wenn man ins Menü und dann wieder zu den Messwerten geht :(
Sicher ? Das wär allerdings kacke, sowas wird nicht selten angewendet denk ich mal. Eine sich ändernde Item Description, ideal um z.b die Restzeit anzuzeigen.
Ja leider -.-
Iphones sind ja auch nicht so toll wie alle meinen :p
 

Anhänge

  • gpstest2.zip
    7,4 KB · Aufrufe: 16

jonny65

Geomaster
-Waldmeister- schrieb:
Nein, wenn er kein Empfang hat, gibt er 0 aus
Und wenn er Empfang hat, gibt er genau 10 aus

Egal ob guter oder schlechter Empfang, nie mal 9 und auch nie 11 sondern immer 10. Also Boolean, 0 oder 10...komisch
Dann müssen die Abfragen anders lauten :
Wenn Wert1=Wert2 oder Wert2=0 oder Hoehe=0 dann "kein Empfang"
Das mit Länge1=Länge2 und Breite1=Breite2 is doch nix. Die Werte sind tatsächlich manchmal gleich wenn man Empfang hat. Taugt also nix zum abfragen.
Abgesehen davon hab ich den Zweck dieser Abfrage nicht verstanden. Logisch, daß man GPS Empfang braucht, den brauch ich auch wenn ich einen Tradi suche, sonst find ich da nix :/

-Waldmeister- schrieb:
Warum funktioniert das Timer Beenden nicht im Timer selbst?
Zb nach dem Setzen von GPSEmpfang="OK"?

Gute Frage...also gibts ne gute Antwort : weils eben so nicht drinsteht :D
Statt GPS Empfang könnt auch drinstehen "Die Bombe ist grad explodiert", aber steht eben nicht drin. :D Das war ja nur zum Demozweck, nicht jetzt speziell für dein Anliegen. Da würde dann im else Zweig halt ein Stop Timer1 stehen. Damit ist der beendet, löst kein Elapse Event mehr aus und verlässt damit diese "Schleife". Nach dem Stop Timer kommt dann das, was passieren soll, also mach ein Item sichtbar oder eine Zone oder was auch immer.
Info nebenbei : Timer vom Typ "Intervall" MUSS man stoppen, Timer vom Typ "Countdown" laufen nur einmal und lösen auch nur einmal das Elapse Event aus. Es sei denn man startet diesen Countdown Timer wieder. Das kann dann sogar auch im Elapse drinstehen
 

TeamBunteBlitze

Geocacher
Hallo,
Jonny65 schrieb:
Problem nebenbei : Wie schreibt man Zeilenumbrüche in eine Messagebox ?
in Urwigo fügst du den Zeilenumbruch direkt am Anfang der nächsten verketteten Zeichenkette mit der ENTER-Taste ein. Der bleibt dann erhalte. In deinem Beispiel nicht als separater String nach "GPS2" sondern als Bestandteil von
"

Aktuelle Höhe: "

VG

Sven
 
OP
W

-Waldmeister-

Geocacher
Jonny65 schrieb:
Das mit Länge1=Länge2 und Breite1=Breite2 is doch nix. Die Werte sind tatsächlich manchmal gleich wenn man Empfang hat. Taugt also nix zum abfragen.
Bei mir sind die Werte eigentlich immer unterschiedlich
Sogar beim Ipodtouch

Jonny65 schrieb:
Abgesehen davon hab ich den Zweck dieser Abfrage nicht verstanden. Logisch, daß man GPS Empfang braucht, den brauch ich auch wenn ich einen Tradi suche, sonst find ich da nix :/
Ja :)
Es soll ein (fast) AnywhereWIG werden, bei dem es doch sehr von Bedeutung ist, dass man schon von Anfang an Empfang hat, und keine gespeicherten Werte bekommt.
Wenn er fertig is, kann ich ihn gern posten, dann weißt du warums von Vorteil is :)

Jonny65 schrieb:
Statt GPS Empfang könnt auch drinstehen "Die Bombe ist grad explodiert", aber steht eben nicht drin. :D Das war ja nur zum Demozweck, nicht jetzt speziell für dein Anliegen. Da würde dann im else Zweig halt ein Stop Timer1 stehen. Damit ist der beendet, löst kein Elapse Event mehr aus und verlässt damit diese "Schleife". Nach dem Stop Timer kommt dann das, was passieren soll, also mach ein Item sichtbar oder eine Zone oder was auch immer.
Ja...
Weiß ich :)
Wenn ich jedoch den intervaltimer in sich selber stoppen will stoppt er nicht
In deinem Beispiel hab ichs nach GPSEmpfang="OK" gesetzt
Aber er läuft trotzdem weiter



Seltsam finde ich auch noch, dass (in Urwigo) bei den Timern bei on start: handled steht (wenn man mit der maus draufbleibt):
It does not occur for the timer of type interval when the timer restarts.
Hab folgendes im Emulator getestet (nicht mit der GPS-Genauigkeit und der Höhe, sondern nur mit dem Breitengrad, da dieser durch bewegen des Männchen ja leicht veränderbar ist)
Ist der Timer Countdown oder Interval passiert folgendes:
Er geht nach jeder "Schleife" wieder in "on start" und macht alle darin befindlichen Anweisungen (hier "Messungen" hochzählen und "Lat1" zuweisen)

Gibt es bei on start und bei on elapse eine Zuweisung für die Änderung eines Beschreibungstextes passiert bei dem Timer Countdown folgendes: Zuerst nimmt er die Beschreibung von on start, ändert sie dann in die von on elapse und bleibt dann bei der von on elapse. (obwohl er ja wieder in on start reingeht?)
Der Timer Interval bleibt immer bei der Beschreibunsänderung von on start und nimmt nie die von onelapse. (obwohl er ja in onelapse reingeht)

Für mich irgendwie seltsam.
Hab mal als Anhang ein Test-File mit Countdown und Interval


Btw: Für meinen Gps-Empfangstest werde ich einen Countdown nehmen, der sich selbst solange aufruft, bis es GPS-Empfang gibt (da sich der Interval-Timer nicht beeden will, wenn es Empfang gibt...)
 

Anhänge

  • intervalVScountdown.urwigo.zip
    2,3 KB · Aufrufe: 18

jonny65

Geomaster
Wie gesagt hatte ich ab und zu ein Wechsel von "OK" auf "Nicht OK" OBWOHL ich Empfang hatte ! Dies deswegen weil Long und Lat gleich blieben.
Schmeiß mal die Anzeige (Item Description) bei Start Timer raus (brauchst doch nicht 2 mal) und setz hier eine if/else Abfrage auf die Variable "GPSEmpfang". Wenn OK, dann Stop Timer. Ich vermute nämlich, daß ein Timerstop (Typ Intervall) im Elapseevent NICHT zieht, da der Timer gar nicht mehr existiert, weil er eben abgelaufen ist. "Was abgelaufen ist, kann man nicht mehr ansprechen". Im Start Event hingegen schon.
 
OP
W

-Waldmeister-

Geocacher
Jonny65 schrieb:
Schmeiß mal die Anzeige (Item Description) bei Start Timer raus (brauchst doch nicht 2 mal)
Die is hier nur zur Demo drin. In meinem WIG natürlich nicht.
Ich versteh nämlich nicht, warum er so abläuft:
-Waldmeister- schrieb:
Hab folgendes im Emulator getestet (nicht mit der GPS-Genauigkeit und der Höhe, sondern nur mit dem Breitengrad, da dieser durch bewegen des Männchen ja leicht veränderbar ist)
Ist der Timer Countdown oder Interval passiert folgendes:
Er geht nach jeder "Schleife" wieder in "on start" und macht alle darin befindlichen Anweisungen (hier "Messungen" hochzählen und "Lat1" zuweisen)

Gibt es bei on start und bei on elapse eine Zuweisung für die Änderung eines Beschreibungstextes passiert bei dem Timer Countdown folgendes: Zuerst nimmt er die Beschreibung von on start, ändert sie dann in die von on elapse und bleibt dann bei der von on elapse. (obwohl er ja wieder in on start reingeht?)
Der Timer Interval bleibt immer bei der Beschreibunsänderung von on start und nimmt nie die von onelapse. (obwohl er ja in onelapse reingeht)

Jonny65 schrieb:
setz hier eine if/else Abfrage auf die Variable "GPSEmpfang". Wenn OK, dann Stop Timer.
Funktioniert :)


Vielen Dank für deine Hilfe! :)
 
Oben