Inzwischen hab ich am RoutenParser mal fleissig gearbeitet.
Zwar läuft der momentan (noch) nur als eigenständiges Programm, aber nur, weils übersichtlicher ist.
Sind immerhin alleine knapp 200 Zeilen (nagut, nen paar leere sind auch drin, ausserdem musste ich den Joystick und das Display einpflegen zud zu debug-Zwecken gibts auch noch etliche serielle Ausgaben).
Ich habs aber so strukturiert, dass ich gar nicht viel mehr tun muss, als das Programm dann ins eigentliche Roboter-Programm einzukopieren.
Was macht der Routenparser?
-zuerst öffnet er das Routen-Unterverzeichnis der SD-Karte.
-dort zählt er die gefundenen Dateien (1 Datei=1 Route) und wartet nun auf eine Eingabe (per Joystick)
-bei jeder Stickbewegung wird der Reihe nach eine der Routen-Dateien geöffnet, und der Routenname, der am Anfang in Klartext steht, auf Display ausgegeben, damit man weiss, welche Route man gewählt hat
-das Ganze in ner Schleife. Ist das Verzeichnis durch, wird von vorn angefangen..
Wird der Stick eine gewisse Zeit nich mehr bewegt, wird die gerade gewählte Route übernommen, indem ihr Dateiname in ner Variablen gespeichert wird.
Nun wird ein Wegpunkt nach dem anderen _einzeln_ eingelesen-bevor der nächste gelesen wird, muss ein Trigger kommen (das wird später sein: Wegpunkt erreicht, momentan ist das einfach nur nen Sekundenzähler).
Damit habe ich nun alles beisammen, was ich für die Routen-Navigation brauche.
Im Grunde muss das Ganze dann nur noch an die Routine von GPS2Home übergeben werden, mit den aktuellen Wegpunkt-Werten als Sollwerte. Dann wird einfach GPS2Home so oft abgearbeitet, bis kein neuer Wegpunkt mehr kommt und-fertig.
Entspannende Bastelei also....
Aber noch gibts kleinere Problemchen: ich kann durch die Routen nur in eine Richtung blättern (weil ich einfach routenDatei = dir.openNextFile(); benutze), da ich keine Idee habe, wie man _einfach_ rückwärts blättern könnte.
Wenn die Routen alle durch sind, wird einfach mit dir.rewindDirectory(); wieder zum Anfang des Verzeichnisses gesprungen.
Genau _dort_ gibts ein Problem:
Dieses rewind.directory() macht etwas Probleme: aus einem unerklärlichen Grund dauert das ne halbe Sekunde, ehe es ausgeführt wird. Wenn man aber während dieser Zeit den Stick bewegt, wird zwar eine Datei eingelesen, aber die dann gelesenen Werte stimmen nicht. Wenn mir dazu ne Idee kommt (oder jemand nen Tipp hat?) würd ichd as gerne noch irgendwie auffangen.
Ansonsten muss ich die Routen auch noch auf Plausiblität überprüfen.....
Das zweite Problemchen ist ziemlich trivial (und kann vernachlässigt werden): der letzte Wegpunkt wird zweimal eingelesen, ehe festgestellt wird: da sind wir schon. Ich möchts trotzdem noch fixen- es ist einfach unschön.
Obendrein überlege ich noch, was sinnvoller ist: momentan wird das Auto _immer_ zuerst zum Anfangspunkt der ausgewählten Route fahren, und sie dann abarbeiten.
Effektiver wärs eigentlich, zuerst zu schauen, welcher Wegpunkt der nächste (vom Start) ist, und direkt den anzusteuern.
Ich find, irgendwie haben beide Methoden was. Ob ich da noch nen Fahrmodus mache? Mal schauen...
Zudem werd ich wohl noch die Plausibilität der ausgewählten Route überprüfen, einfach, indem die Entfernung zwischen aktueller (=Start-)Position und dem Routeneinstieg mal gegengerechnet wird. Ist die gewählte route weitewr weg, als das Auto fahren könnte (soo ewig reicht so ein Akku ja auch nicht), wird die Route gar nicht erst akzeptiert- man kann sich beim auswählen ja mal vertan haben.
Lesezeichen