Ich will durchaus helfen - Aber: Ich bevorzuge Hilfe zur Selbsthilfe. Nach meiner Erfahrung ist der Lerneffekt am größten wenn man selbst etwas erarbeitet hat. Außerdem mache ich keine Hausaufgaben anderer (was dieses Forum weniger betrifft, aber andere dafür umso mehr).Zitat von h_wood44
Jetzt zum geposteten Code:
Der ASURO macht genau das was du ihm "gesagt" hast: Wenn ein Taster gedrückt ist, stellst du die Motoren zuerst auf BREAK und gleich danach (Sekundenbruchteile danach um genau zu sein) auf RWD. Ab dem Augenblick ab dem die Taster keinen Wandkontakt mehr haben, konfigurierst du die Motoren wieder auf FWD.
Was du brauchst:
Eine Zeitbasis: Momentan führt dein ASURO die Schleife mit maximaler Geschwindigkeit aus - Wenn du darauf basierend versuchen würdest, über die Anzahl der Schleifendurchläufe eine Verzögerung zu realisieren, würde sich diese bei Änderungen im Code mit ändern. Es wäre daher sinnvoll, die Ausführungsgeschwindigkeit von vornherein zu reduzieren, auf vielleicht 10 oder 100 Iterationen in der Sekunde. Realisieren kannst du dies, indem du ans Ende der Schleife den sleep-Befehl stellst und eine entsprechende Verzögerung auswählst.
Zustände: Du möchtest Dinge in Abhängigkeit von vorherigen Ereignissen ausführen, dafür musst du dir das in irgend einer Form merken. Für deine Wünsche gibt es zwei Möglichkeiten. Entweder du nimmst eine Zählervariable die auf einen bestimmten Wert gesetzt wird, wenn du Tasterkontakt hast. Gleichzeitig wird der Rückwärtsgang "eingelegt". In der Hauptschleife reduzierst du die Variable in jeder Iteration um eins, ist sie bei 0 angelangt, konfigurierst du den ASURO wieder auf vorwärts.
Was erreichst du damit? Solange die Taster auslösen, wird die Variable auf den Verzögerungswert gesetzt und gehalten. Wenn die Taster nicht mehr auslösen, wird der Wert mit jedem Schleifendurchlauf reduziert. Da die Schleife aber nur begrenzt schnell läuft, kannst du aus der Zeit für eine Schleifeniteration bestimmen, wie lange der ASURO braucht bis er bei 0 angekommen ist und auf vorwärts umstellt.
Wenn du später kompliziertere Programme schreiben willst,reicht dir der Trick mit der Zählvariable vielleicht nicht mehr aus, dann kannst du noch eine Zustandsvariable einführen. In deinem Fall gibt es (momentan) nur die Zustände: "Vorwärts" und "Rückwärts", es könnte aber auch sein dass du vielleicht noch einen Zustand "Bremsen" einführen möchtest ...
Dann wird einfach im Ereignis das den Zustandswechsel auslöst der neue Zustand und die Verzögerungsvariable gesetzt. Nachdem die Zeit für den Zustand abgelaufen ist, kann dann anhand des alten Zustands entschieden werden, ob und wenn ja, welcher Zustand der Neue sein soll.
Das war jetzt vielleicht etwas viel auf einmal, wenn ich morgen Zeit haben sollte, kann ich dir evtl. mit einem kurzen Codeschnipsel zeigen wie das ganze gemeint ist.
mfG
Markus
Lesezeichen