Hi inka,
Ich verstehe leider nicht so ganz, was du im Detail machen willst....könnte die abfrage so aussehen -- if ((t==10) && (tg<520)) --? Ich werde sicher auch noch die passenden stellen für das speichern (und rücksetzen) der zwei variablen t1 und t2 finden, bisher klappte das nicht so ganz
Ein Ablaufschema zum Finden der Bake könnte ja so aussehen:
1. Geht mein Akku zur Neige oder habe ich nichts mehr zu tun?
2. Nein: Meine Aufgabe erledigen oder herumstehen, weiter bei 1.
3. Ja: Zur Ladestation fahren:
4. Auf der Stelle so lange drehen, bis die Bake maximal zu empfangen ist.
5. Geradeaus fahren.
6. Bake erreicht?
7. Ja: Weiter bei 13.
8. Hindernis erkannt?
9. Ja: Ausweichen, dann weiter bei 4.
10. Signal weiter gut zu empfangen?
11. Ja: Weiter bei 5.
12. Nein: Weiter bei 4.
-------------------------------------------
13. Ladestation erreicht, Akku laden!
14. Akku voll geladen?
15. Ja: Losfahren und weiter bei 1.
16. Weiter bei 14.
-------------------------------------------
Mit weniger als das wird es nicht gehen...
In der Hauptschleife (Suchen der Ladestation) würde ich das machen:ich habe mir folgendes im terminal ausgeben lassen, werde daraus aber nicht schlau:
1. task_IR-Empfang -> Einlesen der IR-Empfängerwerte z.B. alle 50ms per Stopwatch. Die Task gibt in einer Variablen z.B. eine 1 aus, wenn die Bake (z.B. mehr als 3x hintereinander) empfangen wird und 0, wenn nicht. In dieser Task keine Ausgaben ans Terminal oder sonstwo, keine Pausen. Die Task ist z.B. eine eigene Funktion, die in der Hauptschleife aufgerufen wird.
2. task_FahreZurLadestation -> Sucht nach der IR-Quelle und steuert dahin. Braucht intern Regeln, die sich nach o.g. Schema richten, und natürlich die permanenten Infos: IR sichtbar oder nicht (aus der task_IR-Empfang), Hindernis erkannt (ACS o.ä.), Ladestation erreicht, Akkustand.
3. task_Ladung -> Akku wird geladen, Ende erkannt. Braucht permanente Info: Akkustand.
Alle Tasks arbeiten autonom (jede z.B. mit eigener/eigenen Stopwatch(es) und teils abhängig von Infos der anderen 2 Tasks:
- task_IR-Empfang läuft immer
- task_FahreZurLadestation läuft nur, wenn task_Ladung gerade nicht läuft und umgekehrt
- Weitere Tasks können gebraucht werden für das hier:
-- Anzeige von Daten (z.B. zum Debuggen). Immer auch mit Stopwatch (0,5 oder 1s, schneller kann man eh nicht lesen)
-- Eigentliche Aufgabe des autonomen Roboters (wenn er nicht gerade zur Ladung muss oder lädt)
-- ...
Lesezeichen